[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