diff options
| -rw-r--r-- | llvm/include/llvm/Target/TargetFrameLowering.h | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/WinException.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/PrologEpilogInserter.cpp | 5 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/win-catchpad.ll | 12 |
4 files changed, 12 insertions, 12 deletions
diff --git a/llvm/include/llvm/Target/TargetFrameLowering.h b/llvm/include/llvm/Target/TargetFrameLowering.h index 2e8c178914e..9585f7c3498 100644 --- a/llvm/include/llvm/Target/TargetFrameLowering.h +++ b/llvm/include/llvm/Target/TargetFrameLowering.h @@ -236,10 +236,11 @@ public: unsigned &FrameReg) const; /// Same as above, except that the 'base register' will always be RSP, not - /// RBP on x86. This is used exclusively for lowering STATEPOINT nodes. + /// RBP on x86. This is generally used for emitting statepoint or EH tables + /// that use offsets from RSP. /// TODO: This should really be a parameterizable choice. virtual int getFrameIndexReferenceFromSP(const MachineFunction &MF, int FI, - unsigned &FrameReg) const { + unsigned &FrameReg) const { // default to calling normal version, we override this on x86 only llvm_unreachable("unimplemented for non-x86"); return 0; diff --git a/llvm/lib/CodeGen/AsmPrinter/WinException.cpp b/llvm/lib/CodeGen/AsmPrinter/WinException.cpp index 4f1d5cb864a..bc2c9ee635c 100644 --- a/llvm/lib/CodeGen/AsmPrinter/WinException.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/WinException.cpp @@ -791,7 +791,7 @@ void WinException::computeIP2StateTable( // Emit an entry indicating that PCs after 'Label' have this EH state. if (I.State != LastEHState) IPToStateTable.push_back( - std::make_pair(create32bitRef(I.BeginLabel), I.State)); + std::make_pair(getLabelPlusOne(I.BeginLabel), I.State)); LastEHState = I.State; LastEndLabel = I.EndLabel; } diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp index 63825b5dde9..495da5c07d1 100644 --- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp +++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp @@ -820,12 +820,11 @@ void PEI::replaceFrameIndices(MachineFunction &Fn) { Fn, FuncInfo.UnwindHelpFrameIdx, FrameReg); for (WinEHTryBlockMapEntry &TBME : FuncInfo.TryBlockMap) { for (WinEHHandlerType &H : TBME.HandlerArray) { - unsigned UnusedReg; if (H.CatchObj.FrameIndex == INT_MAX) H.CatchObj.FrameOffset = INT_MAX; else - H.CatchObj.FrameOffset = - TFI.getFrameIndexReference(Fn, H.CatchObj.FrameIndex, UnusedReg); + H.CatchObj.FrameOffset = TFI.getFrameIndexReferenceFromSP( + Fn, H.CatchObj.FrameIndex, FrameReg); } } } diff --git a/llvm/test/CodeGen/X86/win-catchpad.ll b/llvm/test/CodeGen/X86/win-catchpad.ll index 45d1085f3ad..67875f23060 100644 --- a/llvm/test/CodeGen/X86/win-catchpad.ll +++ b/llvm/test/CodeGen/X86/win-catchpad.ll @@ -120,7 +120,7 @@ catchendblock: ; preds = %catch, %catch.2, %c ; X86: $handlerMap$0$try_catch_catch: ; X86-NEXT: .long 0 ; X86-NEXT: .long "??_R0H@8" -; X86-NEXT: .long -20 +; X86-NEXT: .long 24 ; X86-NEXT: .long "?catch$[[catch1bb]]@?0?try_catch_catch@4HA" ; X86-NEXT: .long 64 ; X86-NEXT: .long 0 @@ -156,7 +156,7 @@ catchendblock: ; preds = %catch, %catch.2, %c ; X64: .seh_endprologue ; X64-DAG: .Ltmp4 ; X64-DAG: leaq -[[local_offs]](%rbp), %rdx -; X64-DAG: movl [[e_addr:[-0-9]+]](%rbp), %ecx +; X64-DAG: movl -4(%rbp), %ecx ; X64: callq f ; X64: leaq [[contbb]](%rip), %rax ; X64-NEXT: addq $32, %rsp @@ -204,7 +204,7 @@ catchendblock: ; preds = %catch, %catch.2, %c ; X64-NEXT: .long 0 ; X64-NEXT: .long "??_R0H@8"@IMGREL ; FIXME: This should probably be offset from rsp, not rbp. -; X64-NEXT: .long [[e_addr]] +; X64-NEXT: .long 44 ; X64-NEXT: .long "?catch$[[catch1bb]]@?0?try_catch_catch@4HA"@IMGREL ; X64-NEXT: .long 56 ; X64-NEXT: .long 64 @@ -216,9 +216,9 @@ catchendblock: ; preds = %catch, %catch.2, %c ; X64: $ip2state$try_catch_catch: ; X64-NEXT: .long .Lfunc_begin0@IMGREL ; X64-NEXT: .long -1 -; X64-NEXT: .long .Ltmp0@IMGREL +; X64-NEXT: .long .Ltmp0@IMGREL+1 ; X64-NEXT: .long 0 -; X64-NEXT: .long .Ltmp4@IMGREL +; X64-NEXT: .long .Ltmp4@IMGREL+1 ; X64-NEXT: .long 1 ; X64-NEXT: .long .Ltmp3@IMGREL+1 ; X64-NEXT: .long -1 @@ -353,7 +353,7 @@ catchendblock: ; X64-LABEL: $ip2state$branch_to_normal_dest: ; X64-NEXT: .long .Lfunc_begin1@IMGREL ; X64-NEXT: .long -1 -; X64-NEXT: .long .Ltmp[[before_call]]@IMGREL +; X64-NEXT: .long .Ltmp[[before_call]]@IMGREL+1 ; X64-NEXT: .long 0 ; X64-NEXT: .long .Ltmp[[after_call]]@IMGREL+1 ; X64-NEXT: .long -1 |

