diff options
Diffstat (limited to 'test/Transforms/SSI')
-rw-r--r-- | test/Transforms/SSI/2009-07-09-Invoke.ll | 71 | ||||
-rw-r--r-- | test/Transforms/SSI/2009-08-15-UnreachableBB.ll | 19 | ||||
-rw-r--r-- | test/Transforms/SSI/2009-08-17-CritEdge.ll | 15 | ||||
-rw-r--r-- | test/Transforms/SSI/2009-08-19-UnreachableBB2.ll | 22 | ||||
-rw-r--r-- | test/Transforms/SSI/dg.exp | 3 | ||||
-rw-r--r-- | test/Transforms/SSI/ssiphi.ll | 22 |
6 files changed, 152 insertions, 0 deletions
diff --git a/test/Transforms/SSI/2009-07-09-Invoke.ll b/test/Transforms/SSI/2009-07-09-Invoke.ll new file mode 100644 index 0000000..20a2217 --- /dev/null +++ b/test/Transforms/SSI/2009-07-09-Invoke.ll @@ -0,0 +1,71 @@ +; RUN: opt < %s -ssi-everything -disable-output +; PR4511 + + %"struct.std::_Vector_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >" = type { %"struct.std::_Vector_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Vector_impl" } + %"struct.std::_Vector_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Vector_impl" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* } + %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider" } + %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider" = type { i8* } + %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep_base" } + %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep_base" = type { i32, i32, i32 } + %"struct.std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >" = type { %"struct.std::_Vector_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >" } + +declare void @_Unwind_Resume(i8*) + +declare fastcc %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* @_ZSt24__uninitialized_copy_auxIPSsS0_ET0_T_S2_S1_St12__false_type(%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*) + +define fastcc void @_ZNSt6vectorISsSaISsEE9push_backERKSs(%"struct.std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >"* nocapture %this, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* nocapture %__x) { +entry: + br i1 undef, label %_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEj.exit.i, label %bb + +bb: ; preds = %entry + ret void + +_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEj.exit.i: ; preds = %entry + %0 = invoke fastcc %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* @_ZSt24__uninitialized_copy_auxIPSsS0_ET0_T_S2_S1_St12__false_type(%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* undef, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* undef, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* undef) + to label %invcont14.i unwind label %ppad81.i ; <%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*> [#uses=3] + +invcont14.i: ; preds = %_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEj.exit.i + %1 = icmp eq %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* %0, null ; <i1> [#uses=1] + br i1 %1, label %bb19.i, label %bb.i17.i + +bb.i17.i: ; preds = %invcont14.i + %2 = invoke fastcc i8* @_ZNSs4_Rep8_M_cloneERKSaIcEj(%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep"* undef, i32 0) + to label %bb2.i25.i unwind label %ppad.i.i.i23.i ; <i8*> [#uses=0] + +ppad.i.i.i23.i: ; preds = %bb.i17.i + invoke void @_Unwind_Resume(i8* undef) + to label %.noexc.i24.i unwind label %lpad.i29.i + +.noexc.i24.i: ; preds = %ppad.i.i.i23.i + unreachable + +bb2.i25.i: ; preds = %bb.i17.i + unreachable + +lpad.i29.i: ; preds = %ppad.i.i.i23.i + invoke void @_Unwind_Resume(i8* undef) + to label %.noexc.i9 unwind label %ppad81.i + +.noexc.i9: ; preds = %lpad.i29.i + unreachable + +bb19.i: ; preds = %invcont14.i + %3 = getelementptr %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* %0, i32 1 ; <%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*> [#uses=2] + %4 = invoke fastcc %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* @_ZSt24__uninitialized_copy_auxIPSsS0_ET0_T_S2_S1_St12__false_type(%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* undef, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* undef, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* %3) + to label %invcont20.i unwind label %ppad81.i ; <%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*> [#uses=0] + +invcont20.i: ; preds = %bb19.i + unreachable + +invcont32.i: ; preds = %ppad81.i + unreachable + +ppad81.i: ; preds = %bb19.i, %lpad.i29.i, %_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEj.exit.i + %__new_finish.0.i = phi %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* [ %0, %lpad.i29.i ], [ undef, %_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEj.exit.i ], [ %3, %bb19.i ] ; <%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"*> [#uses=0] + br i1 undef, label %invcont32.i, label %bb.i.i.i.i + +bb.i.i.i.i: ; preds = %bb.i.i.i.i, %ppad81.i + br label %bb.i.i.i.i +} + +declare fastcc i8* @_ZNSs4_Rep8_M_cloneERKSaIcEj(%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep"* nocapture, i32) diff --git a/test/Transforms/SSI/2009-08-15-UnreachableBB.ll b/test/Transforms/SSI/2009-08-15-UnreachableBB.ll new file mode 100644 index 0000000..0fe37ec --- /dev/null +++ b/test/Transforms/SSI/2009-08-15-UnreachableBB.ll @@ -0,0 +1,19 @@ +; RUN: opt < %s -ssi-everything -disable-output + +declare fastcc i32 @ras_Empty(i8** nocapture) nounwind readonly + +define i32 @cc_Tautology() nounwind { +entry: + unreachable + +cc_InitData.exit: ; No predecessors! + %0 = call fastcc i32 @ras_Empty(i8** undef) nounwind ; <i32> [#uses=1] + %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1] + br i1 %1, label %bb2, label %bb6 + +bb2: ; preds = %cc_InitData.exit + unreachable + +bb6: ; preds = %cc_InitData.exit + ret i32 undef +} diff --git a/test/Transforms/SSI/2009-08-17-CritEdge.ll b/test/Transforms/SSI/2009-08-17-CritEdge.ll new file mode 100644 index 0000000..61bd2dc --- /dev/null +++ b/test/Transforms/SSI/2009-08-17-CritEdge.ll @@ -0,0 +1,15 @@ +; RUN: opt < %s -ssi-everything -disable-output + +define void @test(i32 %x) { +entry: + br label %label1 +label1: + %A = phi i32 [ 0, %entry ], [ %A.1, %label2 ] + %B = icmp slt i32 %A, %x + br i1 %B, label %label2, label %label2 +label2: + %A.1 = add i32 %A, 1 + br label %label1 +label3: ; No predecessors! + ret void +} diff --git a/test/Transforms/SSI/2009-08-19-UnreachableBB2.ll b/test/Transforms/SSI/2009-08-19-UnreachableBB2.ll new file mode 100644 index 0000000..64bed19 --- /dev/null +++ b/test/Transforms/SSI/2009-08-19-UnreachableBB2.ll @@ -0,0 +1,22 @@ +; RUN: opt < %s -ssi-everything -disable-output + +define void @foo() { +entry: + %tmp0 = load i64* undef, align 4 ; <i64> [#uses=3] + br i1 undef, label %end_stmt_playback, label %bb16 + +readJournalHdr.exit: ; No predecessors! + br label %end_stmt_playback + +bb16: ; preds = %bb7 + %tmp1 = icmp slt i64 0, %tmp0 ; <i1> [#uses=1] + br i1 %tmp1, label %bb16, label %bb17 + +bb17: ; preds = %bb16 + store i64 %tmp0, i64* undef, align 4 + br label %end_stmt_playback + +end_stmt_playback: ; preds = %bb17, %readJournalHdr.exit, %bb6, %bb2 + store i64 %tmp0, i64* undef, align 4 + ret void +} diff --git a/test/Transforms/SSI/dg.exp b/test/Transforms/SSI/dg.exp new file mode 100644 index 0000000..f200589 --- /dev/null +++ b/test/Transforms/SSI/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] diff --git a/test/Transforms/SSI/ssiphi.ll b/test/Transforms/SSI/ssiphi.ll new file mode 100644 index 0000000..a42b70c --- /dev/null +++ b/test/Transforms/SSI/ssiphi.ll @@ -0,0 +1,22 @@ +; RUN: opt < %s -ssi-everything -S | FileCheck %s + +declare void @use(i32) +declare i32 @create() + +define i32 @foo() { +entry: + %x = call i32 @create() + %y = icmp slt i32 %x, 10 + br i1 %y, label %T, label %F +T: +; CHECK: SSI_sigma + call void @use(i32 %x) + br label %join +F: +; CHECK: SSI_sigma + call void @use(i32 %x) + br label %join +join: +; CHECK: SSI_phi + ret i32 %x +} |