[llvm-commits] [llvm] r149162 - /llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp

Duncan Sands baldrick at free.fr
Sat Jan 28 04:43:20 PST 2012


Hi Bill, also it looks like the original commit broke the 32 bit dragonegg
buildbot.  Check out the end of this log file:

http://lab.llvm.org:8011/builders/dragonegg-i386-linux/builds/1002/steps/compile.llvm.stage2/logs/stdio

Ciao, Duncan.

On 28/01/12 02:10, Bill Wendling wrote:
> Author: void
> Date: Fri Jan 27 19:10:01 2012
> New Revision: 149162
>
> URL: http://llvm.org/viewvc/llvm-project?rev=149162&view=rev
> Log:
> Revert r149159 until I can fix tests.
>
> Modified:
>      llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
>
> Modified: llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp?rev=149162&r1=149161&r2=149162&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp (original)
> +++ llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp Fri Jan 27 19:10:01 2012
> @@ -39,7 +39,6 @@
>       Constant *RewindFunction;
>
>       bool InsertUnwindResumeCalls(Function&Fn);
> -    Instruction *GetExceptionObject(ResumeInst *RI);
>
>     public:
>       static char ID; // Pass identification, replacement for typeid.
> @@ -65,46 +64,6 @@
>     return new DwarfEHPrepare(tm);
>   }
>
> -/// GetExceptionObject - Return the exception object from the value passed into
> -/// the 'resume' instruction (typically an aggregate). Clean up any dead
> -/// instructions, including the 'resume' instruction.
> -Instruction *DwarfEHPrepare::GetExceptionObject(ResumeInst *RI) {
> -  Value *V = RI->getOperand(0);
> -  Instruction *ExnObj = 0;
> -  InsertValueInst *SelIVI = dyn_cast<InsertValueInst>(V);
> -  LoadInst *SelLoad = 0;
> -  InsertValueInst *ExcIVI = 0;
> -  bool EraseIVIs = false;
> -
> -  if (SelIVI) {
> -    if (SelIVI->getNumIndices() == 1&&  *SelIVI->idx_begin() == 1) {
> -      ExcIVI = dyn_cast<InsertValueInst>(SelIVI->getOperand(0));
> -      if (ExcIVI&&  isa<UndefValue>(ExcIVI->getOperand(0))&&
> -          ExcIVI->getNumIndices() == 1&&  *ExcIVI->idx_begin() == 0) {
> -        ExnObj = cast<Instruction>(ExcIVI->getOperand(1));
> -        SelLoad = dyn_cast<LoadInst>(SelIVI->getOperand(1));
> -        EraseIVIs = true;
> -      }
> -    }
> -  }
> -
> -  if (!ExnObj)
> -    ExnObj = ExtractValueInst::Create(RI->getOperand(0), 0, "exn.obj", RI);
> -
> -  RI->eraseFromParent();
> -
> -  if (EraseIVIs) {
> -    if (SelIVI->getNumUses() == 0)
> -      SelIVI->eraseFromParent();
> -    if (ExcIVI->getNumUses() == 0)
> -      ExcIVI->eraseFromParent();
> -    if (SelLoad&&  SelLoad->getNumUses() == 0)
> -      SelLoad->eraseFromParent();
> -  }
> -
> -  return ExnObj;
> -}
> -
>   /// InsertUnwindResumeCalls - Convert the ResumeInsts that are still present
>   /// into calls to the appropriate _Unwind_Resume function.
>   bool DwarfEHPrepare::InsertUnwindResumeCalls(Function&Fn) {
> @@ -132,26 +91,8 @@
>
>     // Create the basic block where the _Unwind_Resume call will live.
>     LLVMContext&Ctx = Fn.getContext();
> -  unsigned ResumesSize = Resumes.size();
> -
> -  if (ResumesSize == 1) {
> -    // Instead of creating a new BB and PHI node, just append the call to
> -    // _Unwind_Resume to the end of the single resume block.
> -    ResumeInst *RI = Resumes.front();
> -    BasicBlock *UnwindBB = RI->getParent();
> -    Instruction *ExnObj = GetExceptionObject(RI);
> -
> -    // Call the _Unwind_Resume function.
> -    CallInst *CI = CallInst::Create(RewindFunction, ExnObj, "", UnwindBB);
> -    CI->setCallingConv(TLI->getLibcallCallingConv(RTLIB::UNWIND_RESUME));
> -
> -    // We never expect _Unwind_Resume to return.
> -    new UnreachableInst(Ctx, UnwindBB);
> -    return true;
> -  }
> -
>     BasicBlock *UnwindBB = BasicBlock::Create(Ctx, "unwind_resume",&Fn);
> -  PHINode *PN = PHINode::Create(Type::getInt8PtrTy(Ctx), ResumesSize,
> +  PHINode *PN = PHINode::Create(Type::getInt8PtrTy(Ctx), Resumes.size(),
>                                   "exn.obj", UnwindBB);
>
>     // Extract the exception object from the ResumeInst and add it to the PHI node
> @@ -161,8 +102,38 @@
>       ResumeInst *RI = *I;
>       BranchInst::Create(UnwindBB, RI->getParent());
>
> -    Instruction *ExnObj = GetExceptionObject(RI);
> +    Value *V = RI->getOperand(0);
> +    Instruction *ExnObj = 0;
> +    InsertValueInst *SelIVI = dyn_cast<InsertValueInst>(V);
> +    LoadInst *SelLoad = 0;
> +    InsertValueInst *ExcIVI = 0;
> +    bool EraseIVIs = false;
> +    if (SelIVI) {
> +      if (SelIVI->getNumIndices() == 1&&  *SelIVI->idx_begin() == 1) {
> +        ExcIVI = dyn_cast<InsertValueInst>(SelIVI->getOperand(0));
> +        if (ExcIVI&&  isa<UndefValue>(ExcIVI->getOperand(0))&&
> +            ExcIVI->getNumIndices() == 1&&  *ExcIVI->idx_begin() == 0) {
> +          ExnObj = cast<Instruction>(ExcIVI->getOperand(1));
> +          SelLoad = dyn_cast<LoadInst>(SelIVI->getOperand(1));
> +          EraseIVIs = true;
> +        }
> +      }
> +    }
> +
> +    if (!ExnObj)
> +      ExnObj = ExtractValueInst::Create(RI->getOperand(0), 0, "exn.obj", RI);
> +
>       PN->addIncoming(ExnObj, RI->getParent());
> +    RI->eraseFromParent();
> +
> +    if (EraseIVIs) {
> +      if (SelIVI->getNumUses() == 0)
> +        SelIVI->eraseFromParent();
> +      if (ExcIVI->getNumUses() == 0)
> +        ExcIVI->eraseFromParent();
> +      if (SelLoad&&  SelLoad->getNumUses() == 0)
> +        SelLoad->eraseFromParent();
> +    }
>
>       ++NumResumesLowered;
>     }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list