Skip to content

Commit

Permalink
[WinEH] Remove CatchObjRecoverIdx
Browse files Browse the repository at this point in the history
CatchObjRecoverIdx was used for the old scheme, it is no longer
relevant.

llvm-svn: 250065
  • Loading branch information
majnemer committed Oct 12, 2015
1 parent a1566a4 commit 99c1d13
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 16 deletions.
1 change: 0 additions & 1 deletion llvm/include/llvm/CodeGen/WinEHFuncInfo.h
Expand Up @@ -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 {
Expand Down
17 changes: 4 additions & 13 deletions llvm/lib/CodeGen/AsmPrinter/WinException.cpp
Expand Up @@ -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)
Expand Down Expand Up @@ -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)));
Expand Down Expand Up @@ -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
Expand All @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
Expand Up @@ -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 {
Expand Down
1 change: 0 additions & 1 deletion llvm/lib/CodeGen/WinEHPrepare.cpp
Expand Up @@ -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
Expand Down

0 comments on commit 99c1d13

Please sign in to comment.