[llvm] r256965 - [WinEH] Remove calculateCatchReturnSuccessorColors

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 6 20:37:47 PST 2016


On Wed, Jan 6, 2016 at 5:07 PM, Justin Bogner <mail at justinbogner.com> wrote:

> David Majnemer via llvm-commits <llvm-commits at lists.llvm.org> writes:
> > Author: majnemer
> > Date: Wed Jan  6 13:26:30 2016
> > New Revision: 256965
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=256965&view=rev
> > Log:
> > [WinEH] Remove calculateCatchReturnSuccessorColors
> >
> > The functionality that calculateCatchReturnSuccessorColors provides was
> > once non-trivial: it was a computation layered on top of funclet
> > coloring.
> >
> > These days, LLVM IR directly encodes what
> > calculateCatchReturnSuccessorColors computed, obsoleting the need for
> > it.
> >
> > No functionality change is intended.
> >
> > Modified:
> >     llvm/trunk/include/llvm/CodeGen/WinEHFuncInfo.h
> >     llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
> >     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> >     llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
> >
> > Modified: llvm/trunk/include/llvm/CodeGen/WinEHFuncInfo.h
> > URL:
> >
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/WinEHFuncInfo.h?rev=256965&r1=256964&r2=256965&view=diff
> >
> ==============================================================================
> >
> > --- llvm/trunk/include/llvm/CodeGen/WinEHFuncInfo.h (original)
> > +++ llvm/trunk/include/llvm/CodeGen/WinEHFuncInfo.h Wed Jan  6 13:26:30
> 2016
> > @@ -93,8 +93,6 @@ struct WinEHFuncInfo {
> >    DenseMap<const Instruction *, int> EHPadStateMap;
> >    DenseMap<const FuncletPadInst *, int> FuncletBaseStateMap;
> >    DenseMap<const InvokeInst *, int> InvokeStateMap;
> > -  DenseMap<const CatchReturnInst *, const BasicBlock *>
> > -      CatchRetSuccessorColorMap;
> >    DenseMap<MCSymbol *, std::pair<int, MCSymbol *>> LabelToStateMap;
> >    SmallVector<CxxUnwindMapEntry, 4> CxxUnwindMap;
> >    SmallVector<WinEHTryBlockMapEntry, 4> TryBlockMap;
> > @@ -125,8 +123,5 @@ void calculateSEHStateNumbers(const Func
> >                                WinEHFuncInfo &FuncInfo);
> >
> >  void calculateClrEHStateNumbers(const Function *Fn, WinEHFuncInfo
> &FuncInfo);
> > -
> > -void calculateCatchReturnSuccessorColors(const Function *Fn,
> > -                                         WinEHFuncInfo &FuncInfo);
> >  }
> >  #endif // LLVM_CODEGEN_WINEHFUNCINFO_H
> >
> > Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp?rev=256965&r1=256964&r2=256965&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
> (original)
> > +++ llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp Wed
> Jan  6 13:26:30 2016
> > @@ -271,6 +271,8 @@ void FunctionLoweringInfo::set(const Fun
> >      }
> >    }
> >
> > +  WinEHFuncInfo &EHInfo = *MF->getWinEHFuncInfo();
> > +
> >    // Mark landing pad blocks.
> >    SmallVector<const LandingPadInst *, 4> LPads;
> >    for (BB = Fn->begin(); BB != EB; ++BB) {
> > @@ -289,7 +291,6 @@ void FunctionLoweringInfo::set(const Fun
> >      return;
> >
> >    // Calculate state numbers if we haven't already.
> > -  WinEHFuncInfo &EHInfo = *MF->getWinEHFuncInfo();
>
> Why are you moving this call before the early return? Ubsan complains
> that we're binding a nullptr to a reference now, since
> MF->getWinEHFuncInfo() will be null when !isFuncletEHPersonality(...)
>

Sorry, this change was spurious.  Fixed in r257028.


>
> >    if (Personality == EHPersonality::MSVC_CXX)
> >      calculateWinCXXEHStateNumbers(&fn, EHInfo);
> >    else if (isAsynchronousEHPersonality(Personality))
> > @@ -297,8 +298,6 @@ void FunctionLoweringInfo::set(const Fun
> >    else if (Personality == EHPersonality::CoreCLR)
> >      calculateClrEHStateNumbers(&fn, EHInfo);
> >
> > -  calculateCatchReturnSuccessorColors(&fn, EHInfo);
> > -
> >    // Map all BB references in the WinEH data to MBBs.
> >    for (WinEHTryBlockMapEntry &TBME : EHInfo.TryBlockMap) {
> >      for (WinEHHandlerType &H : TBME.HandlerArray) {
> >
> > Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=256965&r1=256964&r2=256965&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> (original)
> > +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Wed Jan
> 6 13:26:30 2016
> > @@ -1205,8 +1205,13 @@ void SelectionDAGBuilder::visitCatchRet(
> >    // Figure out the funclet membership for the catchret's successor.
> >    // This will be used by the FuncletLayout pass to determine how to
> order the
> >    // BB's.
> > -  WinEHFuncInfo *EHInfo = DAG.getMachineFunction().getWinEHFuncInfo();
> > -  const BasicBlock *SuccessorColor =
> EHInfo->CatchRetSuccessorColorMap[&I];
> > +  // A 'catchret' returns to the outer scope's color.
> > +  Value *ParentPad = I.getParentPad();
> > +  const BasicBlock *SuccessorColor;
> > +  if (isa<ConstantTokenNone>(ParentPad))
> > +    SuccessorColor = &FuncInfo.Fn->getEntryBlock();
> > +  else
> > +    SuccessorColor = cast<Instruction>(ParentPad)->getParent();
> >    assert(SuccessorColor && "No parent funclet for catchret!");
> >    MachineBasicBlock *SuccessorColorMBB =
> FuncInfo.MBBMap[SuccessorColor];
> >    assert(SuccessorColorMBB && "No MBB for SuccessorColor!");
> >
> > Modified: llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/WinEHPrepare.cpp?rev=256965&r1=256964&r2=256965&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/CodeGen/WinEHPrepare.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/WinEHPrepare.cpp Wed Jan  6 13:26:30 2016
> > @@ -664,24 +664,6 @@ void WinEHPrepare::colorFunclets(Functio
> >    }
> >  }
> >
> > -void llvm::calculateCatchReturnSuccessorColors(const Function *Fn,
> > -                                               WinEHFuncInfo &FuncInfo)
> {
> > -  for (const BasicBlock &BB : *Fn) {
> > -    const auto *CatchRet =
> dyn_cast<CatchReturnInst>(BB.getTerminator());
> > -    if (!CatchRet)
> > -      continue;
> > -    // A 'catchret' returns to the outer scope's color.
> > -    Value *ParentPad = CatchRet->getParentPad();
> > -    const BasicBlock *Color;
> > -    if (isa<ConstantTokenNone>(ParentPad))
> > -      Color = &Fn->getEntryBlock();
> > -    else
> > -      Color = cast<Instruction>(ParentPad)->getParent();
> > -    // Record the catchret successor's funclet membership.
> > -    FuncInfo.CatchRetSuccessorColorMap[CatchRet] = Color;
> > -  }
> > -}
> > -
> >  void WinEHPrepare::demotePHIsOnFunclets(Function &F) {
> >    // Strip PHI nodes off of EH pads.
> >    SmallVector<PHINode *, 16> PHINodes;
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160106/c6366f7f/attachment.html>


More information about the llvm-commits mailing list