diff options
Diffstat (limited to 'test/Transforms/CodeExtractor')
10 files changed, 464 insertions, 0 deletions
diff --git a/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll b/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll new file mode 100644 index 0000000000000..aba35642e4dc9 --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll @@ -0,0 +1,75 @@ +; RUN: llvm-as < %s | opt -loop-extract -disable-output + +define void @solve() { +entry: + br label %loopentry.0 + +loopentry.0: ; preds = %endif.0, %entry + br i1 false, label %no_exit.0, label %loopexit.0 + +no_exit.0: ; preds = %loopentry.0 + br i1 false, label %then.0, label %endif.0 + +then.0: ; preds = %no_exit.0 + br i1 false, label %shortcirc_done, label %shortcirc_next + +shortcirc_next: ; preds = %then.0 + br label %shortcirc_done + +shortcirc_done: ; preds = %shortcirc_next, %then.0 + br i1 false, label %then.1, label %endif.1 + +then.1: ; preds = %shortcirc_done + br i1 false, label %cond_true, label %cond_false + +cond_true: ; preds = %then.1 + br label %cond_continue + +cond_false: ; preds = %then.1 + br label %cond_continue + +cond_continue: ; preds = %cond_false, %cond_true + br label %return + +after_ret.0: ; No predecessors! + br label %endif.1 + +endif.1: ; preds = %after_ret.0, %shortcirc_done + br label %endif.0 + +endif.0: ; preds = %endif.1, %no_exit.0 + br label %loopentry.0 + +loopexit.0: ; preds = %loopentry.0 + br i1 false, label %then.2, label %endif.2 + +then.2: ; preds = %loopexit.0 + br i1 false, label %then.3, label %endif.3 + +then.3: ; preds = %then.2 + br label %return + +after_ret.1: ; No predecessors! + br label %endif.3 + +endif.3: ; preds = %after_ret.1, %then.2 + br label %endif.2 + +endif.2: ; preds = %endif.3, %loopexit.0 + br label %loopentry.1 + +loopentry.1: ; preds = %no_exit.1, %endif.2 + br i1 false, label %no_exit.1, label %loopexit.1 + +no_exit.1: ; preds = %loopentry.1 + br label %loopentry.1 + +loopexit.1: ; preds = %loopentry.1 + br label %return + +after_ret.2: ; No predecessors! + br label %return + +return: ; preds = %after_ret.2, %loopexit.1, %then.3, %cond_continue + ret void +} diff --git a/test/Transforms/CodeExtractor/2004-03-14-DominanceProblem.ll b/test/Transforms/CodeExtractor/2004-03-14-DominanceProblem.ll new file mode 100644 index 0000000000000..a41430d45d3c4 --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-14-DominanceProblem.ll @@ -0,0 +1,33 @@ +; RUN: llvm-as < %s | opt -loop-extract -disable-output +; This testcase is failing the loop extractor because not all exit blocks +; are dominated by all of the live-outs. + +define i32 @ab(i32 %alpha, i32 %beta) { +entry: + br label %loopentry.1.preheader + +loopentry.1.preheader: ; preds = %entry + br label %loopentry.1 + +loopentry.1: ; preds = %no_exit.1, %loopentry.1.preheader + br i1 false, label %no_exit.1, label %loopexit.0.loopexit1 + +no_exit.1: ; preds = %loopentry.1 + %tmp.53 = load i32* null ; <i32> [#uses=1] + br i1 false, label %shortcirc_next.2, label %loopentry.1 + +shortcirc_next.2: ; preds = %no_exit.1 + %tmp.563 = call i32 @wins( i32 0, i32 %tmp.53, i32 3 ) ; <i32> [#uses=0] + ret i32 0 + +loopexit.0.loopexit1: ; preds = %loopentry.1 + br label %loopexit.0 + +loopexit.0: ; preds = %loopexit.0.loopexit1 + ret i32 0 +} + +declare i32 @wins(i32, i32, i32) + +declare i16 @ab_code() + diff --git a/test/Transforms/CodeExtractor/2004-03-14-NoSwitchSupport.ll b/test/Transforms/CodeExtractor/2004-03-14-NoSwitchSupport.ll new file mode 100644 index 0000000000000..ded821b702f5c --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-14-NoSwitchSupport.ll @@ -0,0 +1,28 @@ +; RUN: llvm-as < %s | opt -loop-extract-single -disable-output + +define void @ab() { +entry: + br label %codeReplTail + +then.1: ; preds = %codeReplTail + br label %loopentry.1 + +loopentry.1: ; preds = %no_exit.1, %then.1 + br i1 false, label %no_exit.1, label %loopexit.0.loopexit1 + +no_exit.1: ; preds = %loopentry.1 + br label %loopentry.1 + +loopexit.0.loopexit: ; preds = %codeReplTail + ret void + +loopexit.0.loopexit1: ; preds = %loopentry.1 + ret void + +codeReplTail: ; preds = %codeReplTail, %entry + switch i16 0, label %codeReplTail [ + i16 0, label %loopexit.0.loopexit + i16 1, label %then.1 + ] +} + diff --git a/test/Transforms/CodeExtractor/2004-03-17-MissedLiveIns.ll b/test/Transforms/CodeExtractor/2004-03-17-MissedLiveIns.ll new file mode 100644 index 0000000000000..e2030e2db9879 --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-17-MissedLiveIns.ll @@ -0,0 +1,47 @@ +; RUN: llvm-as < %s | opt -loop-extract -disable-output + +define void @sendMTFValues() { +entry: + br i1 false, label %then.1, label %endif.1 + +then.1: ; preds = %entry + br i1 false, label %loopentry.6.preheader, label %else.0 + +endif.1: ; preds = %entry + ret void + +else.0: ; preds = %then.1 + ret void + +loopentry.6.preheader: ; preds = %then.1 + br i1 false, label %endif.7.preheader, label %loopexit.9 + +endif.7.preheader: ; preds = %loopentry.6.preheader + %tmp.183 = add i32 0, -1 ; <i32> [#uses=1] + br label %endif.7 + +endif.7: ; preds = %loopexit.15, %endif.7.preheader + br i1 false, label %loopentry.10, label %loopentry.12 + +loopentry.10: ; preds = %endif.7 + br label %loopentry.12 + +loopentry.12: ; preds = %loopentry.10, %endif.7 + %ge.2.1 = phi i32 [ 0, %loopentry.10 ], [ %tmp.183, %endif.7 ] ; <i32> [#uses=0] + br i1 false, label %loopexit.14, label %no_exit.11 + +no_exit.11: ; preds = %loopentry.12 + ret void + +loopexit.14: ; preds = %loopentry.12 + br i1 false, label %loopexit.15, label %no_exit.14 + +no_exit.14: ; preds = %loopexit.14 + ret void + +loopexit.15: ; preds = %loopexit.14 + br i1 false, label %endif.7, label %loopexit.9 + +loopexit.9: ; preds = %loopexit.15, %loopentry.6.preheader + ret void +} diff --git a/test/Transforms/CodeExtractor/2004-03-17-OutputMismatch.ll b/test/Transforms/CodeExtractor/2004-03-17-OutputMismatch.ll new file mode 100644 index 0000000000000..9f4b273a61ead --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-17-OutputMismatch.ll @@ -0,0 +1,20 @@ +; RUN: llvm-as < %s | opt -loop-extract -disable-output + +%struct.node_t = type { double*, %struct.node_t*, %struct.node_t**, double**, double*, i32, i32 } +%struct.table_t = type { [1 x %struct.node_t**], [1 x %struct.node_t**] } + +define void @make_tables() { +entry: + %tmp.0.i = malloc %struct.node_t ; <%struct.node_t*> [#uses=1] + br i1 false, label %no_exit.i, label %loopexit.i + +no_exit.i: ; preds = %no_exit.i, %entry + %prev_node.0.i.1 = phi %struct.node_t* [ %tmp.16.i, %no_exit.i ], [ %tmp.0.i, %entry ] ; <%struct.node_t*> [#uses=0] + %tmp.16.i = malloc %struct.node_t ; <%struct.node_t*> [#uses=2] + br i1 false, label %no_exit.i, label %loopexit.i + +loopexit.i: ; preds = %no_exit.i, %entry + %cur_node.0.i.0 = phi %struct.node_t* [ null, %entry ], [ %tmp.16.i, %no_exit.i ] ; <%struct.node_t*> [#uses=0] + ret void +} + diff --git a/test/Transforms/CodeExtractor/2004-03-17-UpdatePHIsOutsideRegion.ll b/test/Transforms/CodeExtractor/2004-03-17-UpdatePHIsOutsideRegion.ll new file mode 100644 index 0000000000000..b1b0324bca503 --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-17-UpdatePHIsOutsideRegion.ll @@ -0,0 +1,23 @@ +; RUN: llvm-as < %s | opt -loop-extract -disable-output + +define void @maketree() { +entry: + br i1 false, label %no_exit.1, label %loopexit.0 + +no_exit.1: ; preds = %endif, %expandbox.entry, %entry + br i1 false, label %endif, label %expandbox.entry + +expandbox.entry: ; preds = %no_exit.1 + br i1 false, label %loopexit.1, label %no_exit.1 + +endif: ; preds = %no_exit.1 + br i1 false, label %loopexit.1, label %no_exit.1 + +loopexit.1: ; preds = %endif, %expandbox.entry + %ic.i.0.0.4 = phi i32 [ 0, %expandbox.entry ], [ 0, %endif ] ; <i32> [#uses=0] + ret void + +loopexit.0: ; preds = %entry + ret void +} + diff --git a/test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll b/test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll new file mode 100644 index 0000000000000..48e5a768e0e58 --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll @@ -0,0 +1,194 @@ +; RUN: llvm-as < %s | opt -loop-extract -disable-output + +declare i32 @_IO_getc() + +declare void @__errno_location() + +define void @yylex() { +entry: + switch i32 0, label %label.126 [ + i32 0, label %return + i32 61, label %combine + i32 33, label %combine + i32 94, label %combine + i32 37, label %combine + i32 47, label %combine + i32 42, label %combine + i32 62, label %combine + i32 60, label %combine + i32 58, label %combine + i32 124, label %combine + i32 38, label %combine + i32 45, label %combine + i32 43, label %combine + i32 34, label %string_constant + i32 39, label %char_constant + i32 46, label %loopexit.2 + i32 57, label %loopexit.2 + i32 56, label %loopexit.2 + i32 55, label %loopexit.2 + i32 54, label %loopexit.2 + i32 53, label %loopexit.2 + i32 52, label %loopexit.2 + i32 51, label %loopexit.2 + i32 50, label %loopexit.2 + i32 49, label %loopexit.2 + i32 48, label %loopexit.2 + i32 95, label %letter + i32 122, label %letter + i32 121, label %letter + i32 120, label %letter + i32 119, label %letter + i32 118, label %letter + i32 117, label %letter + i32 116, label %letter + i32 115, label %letter + i32 114, label %letter + i32 113, label %letter + i32 112, label %letter + i32 111, label %letter + i32 110, label %letter + i32 109, label %letter + i32 108, label %letter + i32 107, label %letter + i32 106, label %letter + i32 105, label %letter + i32 104, label %letter + i32 103, label %letter + i32 102, label %letter + i32 101, label %letter + i32 100, label %letter + i32 99, label %letter + i32 98, label %letter + i32 97, label %letter + i32 90, label %letter + i32 89, label %letter + i32 88, label %letter + i32 87, label %letter + i32 86, label %letter + i32 85, label %letter + i32 84, label %letter + i32 83, label %letter + i32 82, label %letter + i32 81, label %letter + i32 80, label %letter + i32 79, label %letter + i32 78, label %letter + i32 77, label %letter + i32 75, label %letter + i32 74, label %letter + i32 73, label %letter + i32 72, label %letter + i32 71, label %letter + i32 70, label %letter + i32 69, label %letter + i32 68, label %letter + i32 67, label %letter + i32 66, label %letter + i32 65, label %letter + i32 64, label %label.13 + i32 76, label %label.12 + i32 36, label %label.11 + i32 -1, label %label.10 + ] + +label.10: ; preds = %entry + ret void + +label.11: ; preds = %entry + ret void + +label.12: ; preds = %entry + ret void + +label.13: ; preds = %entry + ret void + +letter: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry + ret void + +loopexit.2: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry + switch i32 0, label %shortcirc_next.14 [ + i32 48, label %then.20 + i32 46, label %endif.38 + ] + +then.20: ; preds = %loopexit.2 + switch i32 0, label %else.4 [ + i32 120, label %then.21 + i32 88, label %then.21 + ] + +then.21: ; preds = %then.20, %then.20 + ret void + +else.4: ; preds = %then.20 + ret void + +shortcirc_next.14: ; preds = %loopexit.2 + ret void + +endif.38: ; preds = %loopexit.2 + br i1 false, label %then.40, label %then.39 + +then.39: ; preds = %endif.38 + ret void + +then.40: ; preds = %endif.38 + invoke void @__errno_location( ) + to label %switchexit.2 unwind label %LongJmpBlkPre + +loopentry.6: ; preds = %endif.52 + switch i32 0, label %switchexit.2 [ + i32 73, label %label.82 + i32 105, label %label.82 + i32 76, label %label.80 + i32 108, label %label.80 + i32 70, label %label.78 + i32 102, label %label.78 + ] + +label.78: ; preds = %loopentry.6, %loopentry.6 + ret void + +label.80: ; preds = %loopentry.6, %loopentry.6 + ret void + +label.82: ; preds = %loopentry.6, %loopentry.6 + %c.0.15.5 = phi i32 [ %tmp.79417, %loopentry.6 ], [ %tmp.79417, %loopentry.6 ] ; <i32> [#uses=0] + ret void + +switchexit.2: ; preds = %loopentry.6, %then.40 + br i1 false, label %endif.51, label %loopexit.6 + +endif.51: ; preds = %switchexit.2 + br i1 false, label %endif.52, label %then.52 + +then.52: ; preds = %endif.51 + ret void + +endif.52: ; preds = %endif.51 + %tmp.79417 = invoke i32 @_IO_getc( ) + to label %loopentry.6 unwind label %LongJmpBlkPre ; <i32> [#uses=2] + +loopexit.6: ; preds = %switchexit.2 + ret void + +char_constant: ; preds = %entry + ret void + +string_constant: ; preds = %entry + ret void + +combine: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry + ret void + +label.126: ; preds = %entry + ret void + +return: ; preds = %entry + ret void + +LongJmpBlkPre: ; preds = %endif.52, %then.40 + ret void +} diff --git a/test/Transforms/CodeExtractor/2004-08-12-BlockExtractPHI.ll b/test/Transforms/CodeExtractor/2004-08-12-BlockExtractPHI.ll new file mode 100644 index 0000000000000..0ab5498b0491d --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-08-12-BlockExtractPHI.ll @@ -0,0 +1,26 @@ +; RUN: llvm-as < %s | opt -extract-blocks -disable-output + +define void @test1() { +no_exit.0.i: + br i1 false, label %yylex.entry, label %yylex.entry + +yylex.entry: ; preds = %no_exit.0.i, %no_exit.0.i + %tmp.1027 = phi i32 [ 0, %no_exit.0.i ], [ 0, %no_exit.0.i ] ; <i32> [#uses=0] + ret void +} + +define void @test2() { +no_exit.0.i: + switch i32 0, label %yylex.entry [ + i32 0, label %yylex.entry + i32 1, label %foo + ] + +yylex.entry: ; preds = %no_exit.0.i, %no_exit.0.i + %tmp.1027 = phi i32 [ 0, %no_exit.0.i ], [ 0, %no_exit.0.i ] ; <i32> [#uses=0] + ret void + +foo: ; preds = %no_exit.0.i + ret void +} + diff --git a/test/Transforms/CodeExtractor/2004-11-12-InvokeExtract.ll b/test/Transforms/CodeExtractor/2004-11-12-InvokeExtract.ll new file mode 100644 index 0000000000000..8cd6094826681 --- /dev/null +++ b/test/Transforms/CodeExtractor/2004-11-12-InvokeExtract.ll @@ -0,0 +1,15 @@ +; RUN: llvm-as < %s | opt -extract-blocks -disable-output +define i32 @foo() { + br label %EB + +EB: ; preds = %0 + %V = invoke i32 @foo( ) + to label %Cont unwind label %Unw ; <i32> [#uses=1] + +Cont: ; preds = %EB + ret i32 %V + +Unw: ; preds = %EB + unwind +} + diff --git a/test/Transforms/CodeExtractor/dg.exp b/test/Transforms/CodeExtractor/dg.exp new file mode 100644 index 0000000000000..f2005891a59a8 --- /dev/null +++ b/test/Transforms/CodeExtractor/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] |