[WinEH] Remove CatchObjRecoverIdx
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 12 Oct 2015 16:44:22 +0000 (16:44 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Mon, 12 Oct 2015 16:44:22 +0000 (16:44 +0000)
CatchObjRecoverIdx was used for the old scheme, it is no longer
relevant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250065 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/WinEHFuncInfo.h
lib/CodeGen/AsmPrinter/WinException.cpp
lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
lib/CodeGen/WinEHPrepare.cpp

index 2eedf363d4044e852a7fa95c7fbf76086654345f..2754de0bf5447edf8306ec3b71817f08ccc39e43 100644 (file)
@@ -60,7 +60,6 @@ struct SEHUnwindMapEntry {
 
 struct WinEHHandlerType {
   int Adjectives;
-  int CatchObjRecoverIdx;
   /// The CatchObj starts out life as an LLVM alloca, is turned into a frame
   /// index, and after PEI, becomes a raw offset.
   union {
index f6945b1d1fb0c1b888968ddddf42b54ea1a2bf60..86e6881e892cd73ebae8ebc0c528291fc867cdc9 100644 (file)
@@ -146,8 +146,7 @@ void WinException::endFunction(const MachineFunction *MF) {
   }
 }
 
-/// Retreive the MCSymbol for a GlobalValue or MachineBasicBlock. GlobalValues
-/// are used in the old WinEH scheme, and they will be removed eventually.
+/// Retreive the MCSymbol for a GlobalValue or MachineBasicBlock.
 static MCSymbol *getMCSymbolForMBB(AsmPrinter *Asm,
                                    const MachineBasicBlock *MBB) {
   if (!MBB)
@@ -275,7 +274,6 @@ const MCExpr *WinException::create32bitRef(const MCSymbol *Value) {
 const MCExpr *WinException::create32bitRef(const Value *V) {
   if (!V)
     return MCConstantExpr::create(0, Asm->OutContext);
-  // FIXME: Delete the GlobalValue case once the new IR is fully functional.
   if (const auto *GV = dyn_cast<GlobalValue>(V))
     return create32bitRef(Asm->getSymbol(GV));
   return create32bitRef(MMI->getAddrLabelSymbol(cast<BasicBlock>(V)));
@@ -649,16 +647,10 @@ void WinException::emitCXXFrameHandler3Table(const MachineFunction *MF) {
       OS.EmitLabel(HandlerMapXData);
       for (const WinEHHandlerType &HT : TBME.HandlerArray) {
         // Get the frame escape label with the offset of the catch object. If
-        // the index is -1, then there is no catch object, and we should emit an
-        // offset of zero, indicating that no copy will occur.
+        // the index is INT_MAX, then there is no catch object, and we should
+        // emit an offset of zero, indicating that no copy will occur.
         const MCExpr *FrameAllocOffsetRef = nullptr;
-        if (HT.CatchObjRecoverIdx >= 0) {
-          MCSymbol *FrameAllocOffset =
-              Asm->OutContext.getOrCreateFrameAllocSymbol(
-                  FuncLinkageName, HT.CatchObjRecoverIdx);
-          FrameAllocOffsetRef = MCSymbolRefExpr::create(
-              FrameAllocOffset, MCSymbolRefExpr::VK_None, Asm->OutContext);
-        } else if (HT.CatchObj.FrameIndex != INT_MAX) {
+        if (HT.CatchObj.FrameIndex != INT_MAX) {
           int Offset = getFrameIndexOffset(HT.CatchObj.FrameIndex);
           // For 32-bit, the catch object offset is relative to the end of the
           // EH registration node. For 64-bit, it's relative to SP at the end of
@@ -681,7 +673,6 @@ void WinException::emitCXXFrameHandler3Table(const MachineFunction *MF) {
         OS.EmitValue(create32bitRef(HandlerSym), 4);        // Handler
 
         if (shouldEmitPersonality) {
-          // With the new IR, this is always 16 + 8 + getMaxCallFrameSize().
           // Keep this in sync with X86FrameLowering::emitPrologue.
           int ParentFrameOffset =
               16 + 8 + MF->getFrameInfo()->getMaxCallFrameSize();
index b0d8103093192d60175702ef965a547f62982d7e..f33e7cb0dce30c5c774f569f5b5b17e71370bfc4 100644 (file)
@@ -297,7 +297,7 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
   // Map all BB references in the WinEH data to MBBs.
   for (WinEHTryBlockMapEntry &TBME : EHInfo.TryBlockMap) {
     for (WinEHHandlerType &H : TBME.HandlerArray) {
-      if (H.CatchObjRecoverIdx == -2 && H.CatchObj.Alloca) {
+      if (H.CatchObj.Alloca) {
         assert(StaticAllocaMap.count(H.CatchObj.Alloca));
         H.CatchObj.FrameIndex = StaticAllocaMap[H.CatchObj.Alloca];
       } else {
index 3872879cd741e5f27a87f1cd1afe4c6581e0d11c..56648538f982328b067f7cba15c0c44b213f9cec 100644 (file)
@@ -194,7 +194,6 @@ static void addTryBlockMapEntry(WinEHFuncInfo &FuncInfo, int TryLow,
       HT.TypeDescriptor = cast<GlobalVariable>(TypeInfo->stripPointerCasts());
     HT.Adjectives = cast<ConstantInt>(CPI->getArgOperand(1))->getZExtValue();
     HT.Handler = CPI->getParent();
-    HT.CatchObjRecoverIdx = -2;
     if (isa<ConstantPointerNull>(CPI->getArgOperand(2)))
       HT.CatchObj.Alloca = nullptr;
     else