summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp')
-rw-r--r--llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp152
1 files changed, 10 insertions, 142 deletions
diff --git a/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp b/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
index 0ecfdad462a..ec946379b1e 100644
--- a/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
+++ b/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
@@ -74,7 +74,7 @@ TEST(WebAssemblyExceptionInfoTest, TEST0) {
declare i32 @__gxx_wasm_personality_v0(...)
- define hidden void @test0() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
+ define void @test0() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
unreachable
}
@@ -100,14 +100,14 @@ body: |
; predecessors: %bb.0
successors: %bb.3, %bb.9
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %0:except_ref = CATCH implicit-def $arguments
CLEANUPRET implicit-def dead $arguments
bb.3 (landing-pad):
; predecessors: %bb.2
successors: %bb.4, %bb.6
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %1:except_ref = CATCH implicit-def $arguments
BR_IF %bb.4, %58:i32, implicit-def $arguments, implicit-def $value_stack, implicit $value_stack
BR %bb.6, implicit-def $arguments
@@ -138,13 +138,13 @@ body: |
; predecessors: %bb.4
successors: %bb.9
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %2:except_ref = CATCH implicit-def $arguments
CLEANUPRET implicit-def dead $arguments
bb.9 (landing-pad):
; predecessors: %bb.2, %bb.6, %bb.8
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %3:except_ref = CATCH implicit-def $arguments
CLEANUPRET implicit-def dead $arguments
bb.10:
@@ -237,7 +237,7 @@ TEST(WebAssemblyExceptionInfoTest, TEST1) {
declare i32 @__gxx_wasm_personality_v0(...)
- define hidden void @test1() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
+ define void @test1() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
unreachable
}
@@ -257,7 +257,7 @@ body: |
; predecessors: %bb.0
successors: %bb.2, %bb.8
liveins: $value_stack
- %52:i32 = CATCH_I32 0, implicit-def dead $arguments
+ %0:except_ref = CATCH implicit-def $arguments
BR_IF %bb.2, %32:i32, implicit-def $arguments, implicit-def $value_stack, implicit $value_stack
BR %bb.8, implicit-def $arguments
@@ -271,7 +271,7 @@ body: |
; predecessors: %bb.2
successors: %bb.4, %bb.6
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %1:except_ref = CATCH implicit-def $arguments
BR_IF %bb.4, %43:i32, implicit-def $arguments, implicit-def $value_stack, implicit $value_stack
BR %bb.6, implicit-def $arguments
@@ -313,13 +313,13 @@ body: |
; predecessors: %bb.4
successors: %bb.11
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %2:except_ref = CATCH implicit-def $arguments
CLEANUPRET implicit-def dead $arguments
bb.11 (landing-pad):
; predecessors: %bb.2, %bb.6, %bb.10
liveins: $value_stack
- CATCH_ALL implicit-def $arguments
+ %3:except_ref = CATCH implicit-def $arguments
CLEANUPRET implicit-def dead $arguments
bb.12:
@@ -415,135 +415,3 @@ body: |
EXPECT_EQ(WE0_1->getParentException(), WE0);
EXPECT_EQ(WE0_1->getExceptionDepth(), (unsigned)2);
}
-
-// Terminate pad test
-TEST(WebAssemblyExceptionInfoTest, TEST2) {
- std::unique_ptr<LLVMTargetMachine> TM = createTargetMachine();
- ASSERT_TRUE(TM);
-
- StringRef MIRString = R"MIR(
---- |
- target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
- target triple = "wasm32-unknown-unknown"
-
- declare i32 @__gxx_wasm_personality_v0(...)
- declare void @_ZSt9terminatev()
- declare void @__clang_call_terminate(i8*)
-
- define hidden void @test2() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
- unreachable
- }
-
-...
----
-name: test2
-liveins:
- - { reg: '$arguments' }
- - { reg: '$value_stack' }
-body: |
- bb.0:
- successors: %bb.3, %bb.1
- BR %bb.3, implicit-def dead $arguments
-
- bb.1 (landing-pad):
- ; predecessors: %bb.0
- successors: %bb.2, %bb.4
- %3:i32 = CATCH_I32 0, implicit-def dead $arguments
- BR %bb.2, implicit-def dead $arguments
-
- bb.2:
- ; predecessors: %bb.1
- successors: %bb.3(0x80000000); %bb.3(200.00%)
- CATCHRET %bb.3, %bb.0, implicit-def dead $arguments
-
- bb.3:
- ; predecessors: %bb.0, %bb.2
- RETURN_VOID implicit-def $arguments
-
- bb.4 (landing-pad):
- ; predecessors: %bb.1
- successors: %bb.5, %bb.6
- CATCH_ALL implicit-def $arguments
- BR %bb.5, implicit-def dead $arguments
-
- bb.5:
- ; predecessors: %bb.4
- CLEANUPRET implicit-def dead $arguments
-
- bb.6 (landing-pad):
- ; predecessors: %bb.4
- successors: %bb.7(0x80000000); %bb.7(200.00%)
- %6:i32 = CATCH_I32 0, implicit-def dead $arguments
- CALL_VOID @__clang_call_terminate, %7:i32, implicit-def $arguments
- UNREACHABLE implicit-def $arguments
-
- bb.7 (landing-pad):
- ; predecessors: %bb.6
- CATCH_ALL implicit-def $arguments
- CALL_VOID @_ZSt9terminatev, implicit-def $arguments
- UNREACHABLE implicit-def $arguments
-)MIR";
-
- LLVMContext Context;
- std::unique_ptr<MIRParser> MIR;
- MachineModuleInfo MMI(TM.get());
- std::unique_ptr<Module> M =
- parseMIR(Context, MIR, *TM, MIRString, "test2", MMI);
- ASSERT_TRUE(M);
-
- Function *F = M->getFunction("test2");
- auto *MF = MMI.getMachineFunction(*F);
- ASSERT_TRUE(MF);
-
- WebAssemblyExceptionInfo WEI;
- MachineDominatorTree MDT;
- MachineDominanceFrontier MDF;
- MDT.runOnMachineFunction(*MF);
- MDF.getBase().analyze(MDT.getBase());
- WEI.recalculate(MDT, MDF);
-
- // Exception info structure:
- // |- bb1 (ehpad), bb2, bb4, bb5, bb6, bb7
- // |- bb4 (ehpad), bb5, bb6, bb7
- // |- bb6 (ehpad), bb7
- //
- // Here, bb6 is a terminate pad with a 'catch' instruction, and bb7 is a
- // terminate pad with a 'catch_all' instruction, In this case we put bb6 and
- // bb7 into one exception.
-
- auto *MBB1 = MF->getBlockNumbered(1);
- auto *WE0 = WEI.getExceptionFor(MBB1);
- ASSERT_TRUE(WE0);
- EXPECT_EQ(WE0->getEHPad(), MBB1);
- EXPECT_EQ(WE0->getParentException(), nullptr);
- EXPECT_EQ(WE0->getExceptionDepth(), (unsigned)1);
-
- auto *MBB2 = MF->getBlockNumbered(2);
- WE0 = WEI.getExceptionFor(MBB2);
- ASSERT_TRUE(WE0);
- EXPECT_EQ(WE0->getEHPad(), MBB1);
-
- auto *MBB4 = MF->getBlockNumbered(4);
- auto *WE0_0 = WEI.getExceptionFor(MBB4);
- ASSERT_TRUE(WE0_0);
- EXPECT_EQ(WE0_0->getEHPad(), MBB4);
- EXPECT_EQ(WE0_0->getParentException(), WE0);
- EXPECT_EQ(WE0_0->getExceptionDepth(), (unsigned)2);
-
- auto *MBB5 = MF->getBlockNumbered(5);
- WE0_0 = WEI.getExceptionFor(MBB5);
- ASSERT_TRUE(WE0_0);
- EXPECT_EQ(WE0_0->getEHPad(), MBB4);
-
- auto *MBB6 = MF->getBlockNumbered(6);
- auto *WE0_0_0 = WEI.getExceptionFor(MBB6);
- ASSERT_TRUE(WE0_0_0);
- EXPECT_EQ(WE0_0_0->getEHPad(), MBB6);
- EXPECT_EQ(WE0_0_0->getParentException(), WE0_0);
- EXPECT_EQ(WE0_0_0->getExceptionDepth(), (unsigned)3);
-
- auto *MBB7 = MF->getBlockNumbered(7);
- WE0_0_0 = WEI.getExceptionFor(MBB7);
- ASSERT_TRUE(WE0_0_0);
- EXPECT_EQ(WE0_0_0->getEHPad(), MBB6);
-}
OpenPOWER on IntegriCloud