[llvm] r231164 - WinEH: Remove vestigial EH object

Alexey Samsonov vonosmas at gmail.com
Tue Mar 3 16:34:21 PST 2015


While you're here touching this code, have you seen
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/2050/steps/check-llvm%20msan/logs/stdio
?

On Tue, Mar 3, 2015 at 3:20 PM, Reid Kleckner <reid at kleckner.net> wrote:

> Author: rnk
> Date: Tue Mar  3 17:20:30 2015
> New Revision: 231164
>
> URL: http://llvm.org/viewvc/llvm-project?rev=231164&view=rev
> Log:
> WinEH: Remove vestigial EH object
>
> Ultimately, we'll need to leave something behind to indicate which
> alloca will hold the exception, but we can figure that out when it comes
> time to emit the __CxxFrameHandler3 catch handler table.
>
> Modified:
>     llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
>     llvm/trunk/test/CodeGen/WinEH/cppeh-catch-all.ll
>     llvm/trunk/test/CodeGen/WinEH/cppeh-catch-scalar.ll
>     llvm/trunk/test/CodeGen/WinEH/cppeh-frame-vars.ll
>     llvm/trunk/test/CodeGen/WinEH/cppeh-inalloca.ll
>     llvm/trunk/test/CodeGen/WinEH/cppeh-nonalloca-frame-values.ll
>
> Modified: llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/WinEHPrepare.cpp?rev=231164&r1=231163&r2=231164&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/WinEHPrepare.cpp (original)
> +++ llvm/trunk/lib/CodeGen/WinEHPrepare.cpp Tue Mar  3 17:20:30 2015
> @@ -73,8 +73,7 @@ private:
>                              SmallVectorImpl<LandingPadInst *> &LPads);
>    bool outlineHandler(HandlerType CatchOrCleanup, Function *SrcFn,
>                        Constant *SelectorType, LandingPadInst *LPad,
> -                      CallInst *&EHAlloc, AllocaInst *&EHObjPtr,
> -                      FrameVarInfoMap &VarInfo);
> +                      CallInst *&EHAlloc, FrameVarInfoMap &VarInfo);
>  };
>
>  class WinEHFrameVariableMaterializer : public ValueMaterializer {
> @@ -132,9 +131,9 @@ protected:
>  class WinEHCatchDirector : public WinEHCloningDirectorBase {
>  public:
>    WinEHCatchDirector(LandingPadInst *LPI, Function *CatchFn, Value
> *Selector,
> -                     Value *EHObj, FrameVarInfoMap &VarInfo)
> +                     FrameVarInfoMap &VarInfo)
>        : WinEHCloningDirectorBase(LPI, CatchFn, VarInfo),
> -        CurrentSelector(Selector->stripPointerCasts()), EHObj(EHObj) {}
> +        CurrentSelector(Selector->stripPointerCasts()) {}
>
>    CloningAction handleBeginCatch(ValueToValueMapTy &VMap,
>                                   const Instruction *Inst,
> @@ -149,7 +148,6 @@ public:
>
>  private:
>    Value *CurrentSelector;
> -  Value *EHObj;
>  };
>
>  class WinEHCleanupDirector : public WinEHCloningDirectorBase {
> @@ -239,7 +237,6 @@ bool WinEHPrepare::prepareCPPEHHandlers(
>    // handlers are outlined.
>    FrameVarInfoMap FrameVarInfo;
>    SmallVector<CallInst *, 4> HandlerAllocs;
> -  SmallVector<AllocaInst *, 4> HandlerEHObjPtrs;
>
>    bool HandlersOutlined = false;
>
> @@ -267,17 +264,14 @@ bool WinEHPrepare::prepareCPPEHHandlers(
>          // Create a new instance of the handler data structure in the
>          // HandlerData vector.
>          CallInst *EHAlloc = nullptr;
> -        AllocaInst *EHObjPtr = nullptr;
>          bool Outlined = outlineHandler(Catch, &F, LPad->getClause(Idx),
> LPad,
> -                                       EHAlloc, EHObjPtr, FrameVarInfo);
> +                                       EHAlloc, FrameVarInfo);
>          if (Outlined) {
>            HandlersOutlined = true;
>            // These values must be resolved after all handlers have been
>            // outlined.
>            if (EHAlloc)
>              HandlerAllocs.push_back(EHAlloc);
> -          if (EHObjPtr)
> -            HandlerEHObjPtrs.push_back(EHObjPtr);
>          }
>        } // End if (isCatch)
>      }   // End for each clause
> @@ -290,9 +284,8 @@ bool WinEHPrepare::prepareCPPEHHandlers(
>      //        when landing pad block analysis is added.
>      if (LPad->isCleanup()) {
>        CallInst *EHAlloc = nullptr;
> -      AllocaInst *IgnoreEHObjPtr = nullptr;
> -      bool Outlined = outlineHandler(Cleanup, &F, nullptr, LPad, EHAlloc,
> -                                     IgnoreEHObjPtr, FrameVarInfo);
> +      bool Outlined =
> +          outlineHandler(Cleanup, &F, nullptr, LPad, EHAlloc,
> FrameVarInfo);
>        if (Outlined) {
>          HandlersOutlined = true;
>          // This value must be resolved after all handlers have been
> outlined.
> @@ -399,18 +392,6 @@ bool WinEHPrepare::prepareCPPEHHandlers(
>      EHDataMap[EHAlloc->getParent()->getParent()] = EHData;
>    }
>
> -  // Next, replace the place-holder EHObjPtr allocas with GEP instructions
> -  // that pull the EHObjPtr from the frame alloc structure
> -  for (AllocaInst *EHObjPtr : HandlerEHObjPtrs) {
> -    Value *EHData = EHDataMap[EHObjPtr->getParent()->getParent()];
> -    Builder.SetInsertPoint(EHObjPtr);
> -    Value *ElementPtr = Builder.CreateConstInBoundsGEP2_32(EHData, 0, 1);
> -    EHObjPtr->replaceAllUsesWith(ElementPtr);
> -    EHObjPtr->removeFromParent();
> -    ElementPtr->takeName(EHObjPtr);
> -    delete EHObjPtr;
> -  }
> -
>    // Finally, replace all of the temporary allocas for frame variables
> used in
>    // the outlined handlers and the original frame allocas with GEP
> instructions
>    // that get the equivalent pointer from the frame allocation struct.
> @@ -490,7 +471,7 @@ bool WinEHPrepare::prepareCPPEHHandlers(
>
>  bool WinEHPrepare::outlineHandler(HandlerType CatchOrCleanup, Function
> *SrcFn,
>                                    Constant *SelectorType, LandingPadInst
> *LPad,
> -                                  CallInst *&EHAlloc, AllocaInst
> *&EHObjPtr,
> +                                  CallInst *&EHAlloc,
>                                    FrameVarInfoMap &VarInfo) {
>    Module *M = SrcFn->getParent();
>    LLVMContext &Context = M->getContext();
> @@ -539,20 +520,8 @@ bool WinEHPrepare::outlineHandler(Handle
>    std::unique_ptr<WinEHCloningDirectorBase> Director;
>
>    if (CatchOrCleanup == Catch) {
> -    // This alloca is only temporary.  We'll be replacing it once we know
> all
> -    // the frame variables that need to go in the frame allocation
> structure.
> -    EHObjPtr = Builder.CreateAlloca(Int8PtrType, 0, "eh.obj.ptr");
> -
> -    // This will give us a raw pointer to the exception object, which
> -    // corresponds to the formal parameter of the catch statement.  If the
> -    // handler uses this object, we will generate code during the
> outlining
> -    // process to cast the pointer to the appropriate type and deference
> it
> -    // as necessary.  The un-outlined landing pad code represents the
> -    // exception object as the result of the llvm.eh.begincatch call.
> -    Value *EHObj = Builder.CreateLoad(EHObjPtr, false, "eh.obj");
> -
>      Director.reset(
> -        new WinEHCatchDirector(LPad, Handler, SelectorType, EHObj,
> VarInfo));
> +        new WinEHCatchDirector(LPad, Handler, SelectorType, VarInfo));
>    } else {
>      Director.reset(new WinEHCleanupDirector(LPad, Handler, VarInfo));
>    }
> @@ -668,10 +637,11 @@ CloningDirector::CloningAction WinEHCatc
>    // The argument to the call is some form of the first element of the
>    // landingpad aggregate value, but that doesn't matter.  It isn't used
>    // here.
> -  // The return value of this instruction, however, is used to access the
> -  // EH object pointer.  We have generated an instruction to get that
> value
> -  // from the EH alloc block, so we can just map to that here.
> -  VMap[Inst] = EHObj;
> +  // The second argument is an outparameter where the exception object
> will be
> +  // stored. Typically the exception object is a scalar, but it can be an
> +  // aggregate when catching by value.
> +  // FIXME: Leave something behind to indicate where the exception object
> lives
> +  // for this handler. Should it be part of llvm.eh.actions?
>    return CloningDirector::SkipInstruction;
>  }
>
>
> Modified: llvm/trunk/test/CodeGen/WinEH/cppeh-catch-all.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/cppeh-catch-all.ll?rev=231164&r1=231163&r2=231164&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WinEH/cppeh-catch-all.ll (original)
> +++ llvm/trunk/test/CodeGen/WinEH/cppeh-catch-all.ll Tue Mar  3 17:20:30
> 2015
> @@ -56,8 +56,6 @@ try.cont:
>  ; CHECK: entry:
>  ; CHECK:   %eh.alloc = call i8* @llvm.framerecover(i8* bitcast (void ()*
> @_Z4testv to i8*), i8* %1)
>  ; CHECK:   %eh.data = bitcast i8* %eh.alloc to %struct._Z4testv.ehdata*
> -; CHECK:   %eh.obj.ptr = getelementptr inbounds %struct._Z4testv.ehdata,
> %struct._Z4testv.ehdata* %eh.data, i32 0, i32 1
> -; CHECK:   %eh.obj = load i8*, i8** %eh.obj.ptr
>  ; CHECK:   call void @_Z16handle_exceptionv()
>  ; CHECK:   ret i8* blockaddress(@_Z4testv, %try.cont)
>  ; CHECK: }
>
> Modified: llvm/trunk/test/CodeGen/WinEH/cppeh-catch-scalar.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/cppeh-catch-scalar.ll?rev=231164&r1=231163&r2=231164&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WinEH/cppeh-catch-scalar.ll (original)
> +++ llvm/trunk/test/CodeGen/WinEH/cppeh-catch-scalar.ll Tue Mar  3
> 17:20:30 2015
> @@ -87,8 +87,6 @@ eh.resume:
>  ; CHECK: entry:
>  ; CHECK:   %eh.alloc = call i8* @llvm.framerecover(i8* bitcast (void ()*
> @_Z4testv to i8*), i8* %1)
>  ; CHECK:   %eh.data = bitcast i8* %eh.alloc to %struct._Z4testv.ehdata*
> -; CHECK:   %eh.obj.ptr = getelementptr inbounds %struct._Z4testv.ehdata,
> %struct._Z4testv.ehdata* %eh.data, i32 0, i32 1
> -; CHECK:   %eh.obj = load i8*, i8** %eh.obj.ptr
>  ; CHECK:   %i = getelementptr inbounds %struct._Z4testv.ehdata,
> %struct._Z4testv.ehdata* %eh.data, i32 0, i32 2
>  ; CHECK:   %tmp7 = load i32, i32* %i, align 4
>  ; CHECK:   call void @_Z10handle_inti(i32 %tmp7)
>
> Modified: llvm/trunk/test/CodeGen/WinEH/cppeh-frame-vars.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/cppeh-frame-vars.ll?rev=231164&r1=231163&r2=231164&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WinEH/cppeh-frame-vars.ll (original)
> +++ llvm/trunk/test/CodeGen/WinEH/cppeh-frame-vars.ll Tue Mar  3 17:20:30
> 2015
> @@ -181,8 +181,6 @@ eh.resume:
>  ; CHECK: entry:
>  ; CHECK:   %eh.alloc = call i8* @llvm.framerecover(i8* bitcast (void ()*
> @"\01?test@@YAXXZ" to i8*), i8* %1)
>  ; CHECK:   %eh.data = bitcast i8* %eh.alloc to %"struct.\01?test@
> @YAXXZ.ehdata"*
> -; CHECK:   %eh.obj.ptr = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 1
> -; CHECK:   %eh.obj = load i8*, i8** %eh.obj.ptr
>  ; CHECK:   %e = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 2
>  ; CHECK:   %NumExceptions = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 3
>  ; CHECK:   %ExceptionVal = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 4
>
> Modified: llvm/trunk/test/CodeGen/WinEH/cppeh-inalloca.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/cppeh-inalloca.ll?rev=231164&r1=231163&r2=231164&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WinEH/cppeh-inalloca.ll (original)
> +++ llvm/trunk/test/CodeGen/WinEH/cppeh-inalloca.ll Tue Mar  3 17:20:30
> 2015
> @@ -134,8 +134,6 @@ eh.resume:
>  ; CHECK: entry:
>  ; CHECK:   %eh.alloc = call i8* @llvm.framerecover(i8* bitcast (i32 (<{
> %struct.A }>*)* @"\01?test@@YAHUA@@@Z" to i8*), i8* %1)
>  ; CHECK:   %eh.data = bitcast i8* %eh.alloc to %"struct.\01?test@@YAHUA@
> @@Z.ehdata"*
> -; CHECK:   %eh.obj.ptr = getelementptr inbounds %"struct.\01?test@@YAHUA@@@Z.ehdata",
> %"struct.\01?test@@YAHUA@@@Z.ehdata"* %eh.data, i32 0, i32 1
> -; CHECK:   %eh.obj = load i8*, i8** %eh.obj.ptr
>  ; CHECK:   %e = getelementptr inbounds %"struct.\01?test@@YAHUA@@@Z.ehdata",
> %"struct.\01?test@@YAHUA@@@Z.ehdata"* %eh.data, i32 0, i32 2
>  ; CHECK:   %eh.temp.alloca = getelementptr inbounds %"struct.\01?test@
> @YAHUA@@@Z.ehdata", %"struct.\01?test@@YAHUA@@@Z.ehdata"* %eh.data, i32
> 0, i32 3
>  ; CHECK:   %.reload = load <{ %struct.A }>*, <{ %struct.A }>**
> %eh.temp.alloca
>
> Modified: llvm/trunk/test/CodeGen/WinEH/cppeh-nonalloca-frame-values.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/cppeh-nonalloca-frame-values.ll?rev=231164&r1=231163&r2=231164&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WinEH/cppeh-nonalloca-frame-values.ll
> (original)
> +++ llvm/trunk/test/CodeGen/WinEH/cppeh-nonalloca-frame-values.ll Tue Mar
> 3 17:20:30 2015
> @@ -189,8 +189,6 @@ eh.resume:
>  ; CHECK: entry:
>  ; CHECK:   %eh.alloc = call i8* @llvm.framerecover(i8* bitcast (void ()*
> @"\01?test@@YAXXZ" to i8*), i8* %1)
>  ; CHECK:   %eh.data = bitcast i8* %eh.alloc to %"struct.\01?test@
> @YAXXZ.ehdata"*
> -; CHECK:   %eh.obj.ptr = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 1
> -; CHECK:   %eh.obj = load i8*, i8** %eh.obj.ptr
>  ; CHECK:   %e = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 2
>  ; CHECK:   %eh.temp.alloca = getelementptr inbounds %"struct.\01?test@@YAXXZ.ehdata",
> %"struct.\01?test@@YAXXZ.ehdata"* %eh.data, i32 0, i32 3
>  ; CHECK:   %NumExceptions.020.reload = load i32, i32* %eh.temp.alloca
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150303/52a9dc93/attachment.html>


More information about the llvm-commits mailing list