diff options
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 7 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/inconsistent_landingpad.ll | 30 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/token_landingpad.ll | 22 |
3 files changed, 59 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 6dd72c86f77..885997e2d0e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -2177,6 +2177,13 @@ void SelectionDAGBuilder::visitLandingPad(const LandingPadInst &LP) { TLI.getExceptionSelectorRegister(PersonalityFn) == 0) return; + // If landingpad's return type is token type, we don't create DAG nodes + // for its exception pointer and selector value. The extraction of exception + // pointer or selector value from token type landingpads is not currently + // supported. + if (LP.getType()->isTokenTy()) + return; + SmallVector<EVT, 2> ValueVTs; SDLoc dl = getCurSDLoc(); ComputeValueVTs(TLI, DAG.getDataLayout(), LP.getType(), ValueVTs); diff --git a/llvm/test/CodeGen/X86/inconsistent_landingpad.ll b/llvm/test/CodeGen/X86/inconsistent_landingpad.ll new file mode 100644 index 00000000000..495e999c4a9 --- /dev/null +++ b/llvm/test/CodeGen/X86/inconsistent_landingpad.ll @@ -0,0 +1,30 @@ +; RUN: not llvm-as -disable-output <%s 2>&1 | FileCheck %s + +define void @test() personality i32 (...)* @dummy_personality { +; CHECK: The landingpad instruction should have a consistent result type inside a function +entry: + invoke void @dummy1() + to label %next unwind label %unwind1 + +unwind1: + %lp1 = landingpad token + cleanup + br label %return + +next: + invoke void @dummy2() + to label %return unwind label %unwind2 + +unwind2: + %lp2 = landingpad { i8*, i32 } + cleanup + br label %return + +return: + ret void +} + +declare void @dummy1() +declare void @dummy2() + +declare i32 @dummy_personality(...) diff --git a/llvm/test/CodeGen/X86/token_landingpad.ll b/llvm/test/CodeGen/X86/token_landingpad.ll new file mode 100644 index 00000000000..41e8a793235 --- /dev/null +++ b/llvm/test/CodeGen/X86/token_landingpad.ll @@ -0,0 +1,22 @@ +; RUN: llc < %s | FileCheck %s + +; This test verifies that SelectionDAG can handle landingPad of token type. + +define void @test() personality i32 (...)* @dummy_personality { +; CHECK: .cfi_personality 155, _dummy_personality +entry: + invoke void @dummy() + to label %return unwind label %unwind + +unwind: ; preds = %entry + %lp = landingpad token + cleanup + br label %return + +return: ; preds = %entry + ret void +} + +declare void @dummy() + +declare i32 @dummy_personality(...) |