diff options
| author | Eric Christopher <echristo@gmail.com> | 2019-04-17 02:12:23 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2019-04-17 02:12:23 +0000 |
| commit | a86343512845c9c1fdbac865fea88aa5fce7142a (patch) | |
| tree | 666fc6353de19ad8b00e56b67edd33f24104e4a7 /llvm/test/Transforms/LoopSimplify | |
| parent | 7f8ca6e3679b3af951cb7a4b1377edfaa3244b93 (diff) | |
| download | bcm5719-llvm-a86343512845c9c1fdbac865fea88aa5fce7142a.tar.gz bcm5719-llvm-a86343512845c9c1fdbac865fea88aa5fce7142a.zip | |
Temporarily Revert "Add basic loop fusion pass."
As it's causing some bot failures (and per request from kbarton).
This reverts commit r358543/ab70da07286e618016e78247e4a24fcb84077fda.
llvm-svn: 358546
Diffstat (limited to 'llvm/test/Transforms/LoopSimplify')
32 files changed, 0 insertions, 1877 deletions
diff --git a/llvm/test/Transforms/LoopSimplify/2003-04-25-AssertFail.ll b/llvm/test/Transforms/LoopSimplify/2003-04-25-AssertFail.ll deleted file mode 100644 index 66bf1a0caa9..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2003-04-25-AssertFail.ll +++ /dev/null @@ -1,20 +0,0 @@ -; This testcase exposed a problem with the loop identification pass (LoopInfo). -; Basically, it was incorrectly calculating the loop nesting information. -; -; RUN: opt < %s -loop-simplify - -define i32 @yylex() { - br label %loopentry.0 -loopentry.0: ; preds = %else.4, %0 - br label %loopexit.2 -loopexit.2: ; preds = %else.4, %loopexit.2, %loopentry.0 - br i1 false, label %loopexit.2, label %else.4 -yy_find_action: ; preds = %else.4 - br label %else.4 -else.4: ; preds = %yy_find_action, %loopexit.2 - switch i32 0, label %loopexit.2 [ - i32 2, label %yy_find_action - i32 0, label %loopentry.0 - ] -} - diff --git a/llvm/test/Transforms/LoopSimplify/2003-05-12-PreheaderExitOfChild.ll b/llvm/test/Transforms/LoopSimplify/2003-05-12-PreheaderExitOfChild.ll deleted file mode 100644 index 2b2afae3661..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2003-05-12-PreheaderExitOfChild.ll +++ /dev/null @@ -1,42 +0,0 @@ -; This (complex) testcase causes an assertion failure because a preheader is -; inserted for the "fail" loop, but the exit block of a loop is not updated -; to be the preheader instead of the exit loop itself. - -; RUN: opt < %s -loop-simplify -define i32 @re_match_2() { - br label %loopentry.1 -loopentry.1: ; preds = %endif.82, %0 - br label %shortcirc_done.36 -shortcirc_done.36: ; preds = %loopentry.1 - br i1 false, label %fail, label %endif.40 -endif.40: ; preds = %shortcirc_done.36 - br label %loopexit.20 -loopentry.20: ; preds = %endif.46 - br label %loopexit.20 -loopexit.20: ; preds = %loopentry.20, %endif.40 - br label %loopentry.21 -loopentry.21: ; preds = %no_exit.19, %loopexit.20 - br i1 false, label %no_exit.19, label %loopexit.21 -no_exit.19: ; preds = %loopentry.21 - br i1 false, label %fail, label %loopentry.21 -loopexit.21: ; preds = %loopentry.21 - br label %endif.45 -endif.45: ; preds = %loopexit.21 - br label %cond_true.15 -cond_true.15: ; preds = %endif.45 - br i1 false, label %fail, label %endif.46 -endif.46: ; preds = %cond_true.15 - br label %loopentry.20 -fail: ; preds = %loopexit.37, %cond_true.15, %no_exit.19, %shortcirc_done.36 - br label %then.80 -then.80: ; preds = %fail - br label %endif.81 -endif.81: ; preds = %then.80 - br label %loopexit.37 -loopexit.37: ; preds = %endif.81 - br i1 false, label %fail, label %endif.82 -endif.82: ; preds = %loopexit.37 - br label %loopentry.1 -} - - diff --git a/llvm/test/Transforms/LoopSimplify/2003-08-15-PreheadersFail.ll b/llvm/test/Transforms/LoopSimplify/2003-08-15-PreheadersFail.ll deleted file mode 100644 index 4a69067f5f1..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2003-08-15-PreheadersFail.ll +++ /dev/null @@ -1,52 +0,0 @@ -; RUN: opt < %s -instcombine -simplifycfg -licm -disable-output -target datalayout = "e-p:32:32" -@yy_base = external global [787 x i16] ; <[787 x i16]*> [#uses=1] -@yy_state_ptr = external global i32* ; <i32**> [#uses=3] -@yy_state_buf = external global [16386 x i32] ; <[16386 x i32]*> [#uses=1] -@yy_lp = external global i32 ; <i32*> [#uses=1] - -define i32 @_yylex() { - br label %loopentry.0 -loopentry.0: ; preds = %else.26, %0 - store i32* getelementptr ([16386 x i32], [16386 x i32]* @yy_state_buf, i64 0, i64 0), i32** @yy_state_ptr - %tmp.35 = load i32*, i32** @yy_state_ptr ; <i32*> [#uses=2] - %inc.0 = getelementptr i32, i32* %tmp.35, i64 1 ; <i32*> [#uses=1] - store i32* %inc.0, i32** @yy_state_ptr - %tmp.36 = load i32, i32* null ; <i32> [#uses=1] - store i32 %tmp.36, i32* %tmp.35 - br label %loopexit.2 -loopexit.2: ; preds = %else.26, %loopexit.2, %loopentry.0 - store i8* null, i8** null - %tmp.91 = load i32, i32* null ; <i32> [#uses=1] - %tmp.92 = sext i32 %tmp.91 to i64 ; <i64> [#uses=1] - %tmp.93 = getelementptr [787 x i16], [787 x i16]* @yy_base, i64 0, i64 %tmp.92 ; <i16*> [#uses=1] - %tmp.94 = load i16, i16* %tmp.93 ; <i16> [#uses=1] - %tmp.95 = icmp ne i16 %tmp.94, 4394 ; <i1> [#uses=1] - br i1 %tmp.95, label %loopexit.2, label %yy_find_action -yy_find_action: ; preds = %else.26, %loopexit.2 - br label %loopentry.3 -loopentry.3: ; preds = %then.9, %shortcirc_done.0, %yy_find_action - %tmp.105 = load i32, i32* @yy_lp ; <i32> [#uses=1] - %tmp.106 = icmp ne i32 %tmp.105, 0 ; <i1> [#uses=1] - br i1 %tmp.106, label %shortcirc_next.0, label %shortcirc_done.0 -shortcirc_next.0: ; preds = %loopentry.3 - %tmp.114 = load i16, i16* null ; <i16> [#uses=1] - %tmp.115 = sext i16 %tmp.114 to i32 ; <i32> [#uses=1] - %tmp.116 = icmp slt i32 0, %tmp.115 ; <i1> [#uses=1] - br label %shortcirc_done.0 -shortcirc_done.0: ; preds = %shortcirc_next.0, %loopentry.3 - %shortcirc_val.0 = phi i1 [ false, %loopentry.3 ], [ %tmp.116, %shortcirc_next.0 ] ; <i1> [#uses=1] - br i1 %shortcirc_val.0, label %else.0, label %loopentry.3 -else.0: ; preds = %shortcirc_done.0 - %tmp.144 = load i32, i32* null ; <i32> [#uses=1] - %tmp.145 = and i32 %tmp.144, 8192 ; <i32> [#uses=1] - %tmp.146 = icmp ne i32 %tmp.145, 0 ; <i1> [#uses=1] - br i1 %tmp.146, label %then.9, label %else.26 -then.9: ; preds = %else.0 - br label %loopentry.3 -else.26: ; preds = %else.0 - switch i32 0, label %loopentry.0 [ - i32 2, label %yy_find_action - i32 0, label %loopexit.2 - ] -} diff --git a/llvm/test/Transforms/LoopSimplify/2003-12-10-ExitBlocksProblem.ll b/llvm/test/Transforms/LoopSimplify/2003-12-10-ExitBlocksProblem.ll deleted file mode 100644 index 32b632220d3..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2003-12-10-ExitBlocksProblem.ll +++ /dev/null @@ -1,36 +0,0 @@ -; LoopSimplify is breaking LICM on this testcase because the exit blocks from -; the loop are reachable from more than just the exit nodes: the exit blocks -; have predecessors from outside of the loop! -; -; This is distilled from a monsterous crafty example. - -; RUN: opt < %s -licm -disable-output - - -@G = weak global i32 0 ; <i32*> [#uses=7] - -define i32 @main() { -entry: - store i32 123, i32* @G - br label %loopentry.i -loopentry.i: ; preds = %endif.1.i, %entry - %tmp.0.i = load i32, i32* @G ; <i32> [#uses=1] - %tmp.1.i = icmp eq i32 %tmp.0.i, 123 ; <i1> [#uses=1] - br i1 %tmp.1.i, label %Out.i, label %endif.0.i -endif.0.i: ; preds = %loopentry.i - %tmp.3.i = load i32, i32* @G ; <i32> [#uses=1] - %tmp.4.i = icmp eq i32 %tmp.3.i, 126 ; <i1> [#uses=1] - br i1 %tmp.4.i, label %ExitBlock.i, label %endif.1.i -endif.1.i: ; preds = %endif.0.i - %tmp.6.i = load i32, i32* @G ; <i32> [#uses=1] - %inc.i = add i32 %tmp.6.i, 1 ; <i32> [#uses=1] - store i32 %inc.i, i32* @G - br label %loopentry.i -Out.i: ; preds = %loopentry.i - store i32 0, i32* @G - br label %ExitBlock.i -ExitBlock.i: ; preds = %Out.i, %endif.0.i - %tmp.7.i = load i32, i32* @G ; <i32> [#uses=1] - ret i32 %tmp.7.i -} - diff --git a/llvm/test/Transforms/LoopSimplify/2004-02-05-DominatorInfoCorruption.ll b/llvm/test/Transforms/LoopSimplify/2004-02-05-DominatorInfoCorruption.ll deleted file mode 100644 index aae8476c830..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2004-02-05-DominatorInfoCorruption.ll +++ /dev/null @@ -1,14 +0,0 @@ -; RUN: opt < %s -loop-simplify -verify -licm -disable-output - -define void @.subst_48() { -entry: - br label %loopentry.0 -loopentry.0: ; preds = %loopentry.0, %entry - br i1 false, label %loopentry.0, label %loopentry.2 -loopentry.2: ; preds = %loopentry.2, %loopentry.0 - %tmp.968 = icmp sle i32 0, 3 ; <i1> [#uses=1] - br i1 %tmp.968, label %loopentry.2, label %UnifiedReturnBlock -UnifiedReturnBlock: ; preds = %loopentry.2 - ret void -} - diff --git a/llvm/test/Transforms/LoopSimplify/2004-03-15-IncorrectDomUpdate.ll b/llvm/test/Transforms/LoopSimplify/2004-03-15-IncorrectDomUpdate.ll deleted file mode 100644 index 3e7661ecb57..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2004-03-15-IncorrectDomUpdate.ll +++ /dev/null @@ -1,11 +0,0 @@ -; RUN: opt < %s -loop-simplify -licm -disable-output -define void @main() { -entry: - br i1 false, label %Out, label %loop -loop: ; preds = %loop, %entry - %LI = icmp sgt i32 0, 0 ; <i1> [#uses=1] - br i1 %LI, label %loop, label %Out -Out: ; preds = %loop, %entry - ret void -} - diff --git a/llvm/test/Transforms/LoopSimplify/2004-04-01-IncorrectDomUpdate.ll b/llvm/test/Transforms/LoopSimplify/2004-04-01-IncorrectDomUpdate.ll deleted file mode 100644 index c29383764af..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2004-04-01-IncorrectDomUpdate.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt < %s -loop-simplify -licm -disable-output - -; This is PR306 - -define void @NormalizeCoeffsVecFFE() { -entry: - br label %loopentry.0 -loopentry.0: ; preds = %no_exit.0, %entry - br i1 false, label %loopentry.1, label %no_exit.0 -no_exit.0: ; preds = %loopentry.0 - br i1 false, label %loopentry.0, label %loopentry.1 -loopentry.1: ; preds = %no_exit.1, %no_exit.0, %loopentry.0 - br i1 false, label %no_exit.1, label %loopexit.1 -no_exit.1: ; preds = %loopentry.1 - %tmp.43 = icmp eq i16 0, 0 ; <i1> [#uses=1] - br i1 %tmp.43, label %loopentry.1, label %loopexit.1 -loopexit.1: ; preds = %no_exit.1, %loopentry.1 - ret void -} - diff --git a/llvm/test/Transforms/LoopSimplify/2004-04-12-LoopSimplify-SwitchBackedges.ll b/llvm/test/Transforms/LoopSimplify/2004-04-12-LoopSimplify-SwitchBackedges.ll deleted file mode 100644 index c522ec9463b..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2004-04-12-LoopSimplify-SwitchBackedges.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: opt < %s -loop-simplify -disable-output - -define void @test() { -loopentry.0: - br label %loopentry.1 -loopentry.1: ; preds = %then.6, %then.6, %loopentry.1, %loopentry.0 - %pixel.4 = phi i32 [ 0, %loopentry.0 ], [ %pixel.4, %loopentry.1 ], [ %tmp.370, %then.6 ], [ %tmp.370, %then.6 ] ; <i32> [#uses=1] - br i1 false, label %then.6, label %loopentry.1 -then.6: ; preds = %loopentry.1 - %tmp.370 = add i32 0, 0 ; <i32> [#uses=2] - switch i32 0, label %label.7 [ - i32 6408, label %loopentry.1 - i32 32841, label %loopentry.1 - ] -label.7: ; preds = %then.6 - ret void -} - diff --git a/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll b/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll deleted file mode 100644 index df7034baf66..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: opt < %s -sroa -loop-simplify -licm -disable-output -verify-dom-info -verify-loop-info - -define void @inflate() { -entry: - br label %loopentry.0.outer1111 -loopentry.0.outer1111: ; preds = %then.41, %label.11, %loopentry.0.outer1111, %entry - %left.0.ph1107 = phi i32 [ %tmp.1172, %then.41 ], [ 0, %entry ], [ %tmp.1172, %label.11 ], [ %left.0.ph1107, %loopentry.0.outer1111 ] ; <i32> [#uses=2] - %tmp.1172 = sub i32 %left.0.ph1107, 0 ; <i32> [#uses=2] - switch i32 0, label %label.11 [ - i32 23, label %loopentry.0.outer1111 - i32 13, label %then.41 - ] -label.11: ; preds = %loopentry.0.outer1111 - br label %loopentry.0.outer1111 -then.41: ; preds = %loopentry.0.outer1111 - br label %loopentry.0.outer1111 -} - diff --git a/llvm/test/Transforms/LoopSimplify/2007-10-28-InvokeCrash.ll b/llvm/test/Transforms/LoopSimplify/2007-10-28-InvokeCrash.ll deleted file mode 100644 index 9f65d68202f..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2007-10-28-InvokeCrash.ll +++ /dev/null @@ -1,29 +0,0 @@ -; RUN: opt < %s -loop-simplify -disable-output -; PR1752 -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-s0:0:64-f80:32:32" -target triple = "i686-pc-mingw32" - -define void @func() personality i32 (...)* @__gxx_personality_v0 { -bb_init: - br label %bb_main - -bb_main: - br label %invcont17.normaldest - -invcont17.normaldest917: ; No predecessors! - %tmp23 = invoke i32 @foo() - to label %invcont17.normaldest unwind label %invcont17.normaldest.normaldest - -invcont17.normaldest: ; preds = %invcont17.normaldest917, %bb_main - br label %bb_main - -invcont17.normaldest.normaldest: ; No predecessors! - %exn = landingpad {i8*, i32} - catch i8* null - store i32 %tmp23, i32* undef - br label %bb_main -} - -declare i32 @foo() - -declare i32 @__gxx_personality_v0(...) diff --git a/llvm/test/Transforms/LoopSimplify/2010-07-15-IncorrectDomFrontierUpdate.ll b/llvm/test/Transforms/LoopSimplify/2010-07-15-IncorrectDomFrontierUpdate.ll deleted file mode 100644 index f179da234cb..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2010-07-15-IncorrectDomFrontierUpdate.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt < %s -domfrontier -loop-simplify -domfrontier -verify-dom-info -analyze - - -define void @a() nounwind { -entry: - br i1 undef, label %bb37, label %bb1.i - -bb1.i: ; preds = %bb1.i, %bb - %indvar = phi i64 [ %indvar.next, %bb1.i ], [ 0, %entry ] ; <i64> [#uses=1] - %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2] - %exitcond = icmp eq i64 %indvar.next, 576 ; <i1> [#uses=1] - br i1 %exitcond, label %bb37, label %bb1.i - -bb37: ; preds = %bb1.i, %bb - br label %return - - -return: ; preds = %bb39 - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/2010-12-26-PHIInfiniteLoop.ll b/llvm/test/Transforms/LoopSimplify/2010-12-26-PHIInfiniteLoop.ll deleted file mode 100644 index 00f520bf797..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2010-12-26-PHIInfiniteLoop.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: opt < %s -loop-simplify -S -; PR8702 -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-unknown-freebsd9.0" - -declare void @foo(i32 %x) - -define fastcc void @inm_merge() nounwind { -entry: - br label %for.cond - -for.cond: ; preds = %while.cond36.i, %entry - br i1 undef, label %do.body, label %for.body - -for.body: ; preds = %for.cond - br i1 undef, label %while.cond36.i, label %if.end44 - -if.end44: ; preds = %for.body - %call49 = call fastcc i32 @inm_get_source() - br i1 undef, label %if.end54, label %for.cond64 - -if.end54: ; preds = %if.end44 - br label %while.cond36.i - -while.cond36.i: ; preds = %if.end54, %for.body - br label %for.cond - -for.cond64: ; preds = %if.end88, %for.cond64, %if.end44 - %error.161 = phi i32 [ %error.161, %for.cond64 ], [ %error.161, %if.end88 ], [ %call49, %if.end44 ] - call void @foo(i32 %error.161) - br i1 undef, label %for.cond64, label %if.end88 - -if.end88: ; preds = %for.cond64 - br i1 undef, label %for.cond64, label %if.end98 - -if.end98: ; preds = %if.end88 - unreachable - -do.body: ; preds = %for.cond - unreachable -} - -declare fastcc i32 @inm_get_source() nounwind diff --git a/llvm/test/Transforms/LoopSimplify/2011-12-14-LandingpadHeader.ll b/llvm/test/Transforms/LoopSimplify/2011-12-14-LandingpadHeader.ll deleted file mode 100644 index cb9dd4124e2..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2011-12-14-LandingpadHeader.ll +++ /dev/null @@ -1,45 +0,0 @@ -; RUN: opt < %s -loop-simplify -S | FileCheck %s -; PR11575 - -@catchtypeinfo = external unnamed_addr constant { i8*, i8*, i8* } - -define void @main() uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { -entry: - invoke void @f1() - to label %try.cont19 unwind label %catch - -; CHECK: catch.preheader: -; CHECK-NEXT: landingpad -; CHECK: br label %catch - -; CHECK: catch.preheader.split-lp: -; CHECK-NEXT: landingpad -; CHECK: br label %catch - -catch: ; preds = %if.else, %entry - %0 = landingpad { i8*, i32 } - catch i8* bitcast ({ i8*, i8*, i8* }* @catchtypeinfo to i8*) - invoke void @f3() - to label %if.else unwind label %eh.resume - -if.else: ; preds = %catch - invoke void @f2() - to label %try.cont19 unwind label %catch - -try.cont19: ; preds = %if.else, %entry - ret void - -eh.resume: ; preds = %catch - %1 = landingpad { i8*, i32 } - cleanup - catch i8* bitcast ({ i8*, i8*, i8* }* @catchtypeinfo to i8*) - resume { i8*, i32 } undef -} - -declare i32 @__gxx_personality_v0(...) - -declare void @f1() - -declare void @f2() - -declare void @f3() diff --git a/llvm/test/Transforms/LoopSimplify/2012-03-20-indirectbr.ll b/llvm/test/Transforms/LoopSimplify/2012-03-20-indirectbr.ll deleted file mode 100644 index 9c805da485d..00000000000 --- a/llvm/test/Transforms/LoopSimplify/2012-03-20-indirectbr.ll +++ /dev/null @@ -1,41 +0,0 @@ -; RUN: opt < %s -loop-simplify -S | FileCheck %s - -; Make sure the preheader exists. -; CHECK: sw.bb103: -; CHECK: indirectbr {{.*}}label %while.cond112 -; CHECK: while.cond112: -; But the tail is not split. -; CHECK: for.body: -; CHECK: indirectbr {{.*}}label %while.cond112 -define fastcc void @build_regex_nfa() nounwind uwtable ssp { -entry: - indirectbr i8* blockaddress(@build_regex_nfa, %while.cond), [label %while.cond] - -while.cond: ; preds = %if.then439, %entry - indirectbr i8* blockaddress(@build_regex_nfa, %sw.bb103), [label %do.body785, label %sw.bb103] - -sw.bb103: ; preds = %while.body - indirectbr i8* blockaddress(@build_regex_nfa, %while.cond112), [label %while.cond112] - -while.cond112: ; preds = %for.body, %for.cond.preheader, %sw.bb103 - %pc.0 = phi i8 [ -1, %sw.bb103 ], [ 0, %for.body ], [ %pc.0, %for.cond.preheader ] - indirectbr i8* blockaddress(@build_regex_nfa, %Lsetdone), [label %sw.bb118, label %Lsetdone] - -sw.bb118: ; preds = %while.cond112 - indirectbr i8* blockaddress(@build_regex_nfa, %for.cond.preheader), [label %Lerror.loopexit, label %for.cond.preheader] - -for.cond.preheader: ; preds = %sw.bb118 - indirectbr i8* blockaddress(@build_regex_nfa, %for.body), [label %while.cond112, label %for.body] - -for.body: ; preds = %for.body, %for.cond.preheader - indirectbr i8* blockaddress(@build_regex_nfa, %for.body), [label %while.cond112, label %for.body] - -Lsetdone: ; preds = %while.cond112 - unreachable - -do.body785: ; preds = %while.cond, %while.body - ret void - -Lerror.loopexit: ; preds = %sw.bb118 - unreachable -} diff --git a/llvm/test/Transforms/LoopSimplify/ashr-crash.ll b/llvm/test/Transforms/LoopSimplify/ashr-crash.ll deleted file mode 100644 index b5cc1449cec..00000000000 --- a/llvm/test/Transforms/LoopSimplify/ashr-crash.ll +++ /dev/null @@ -1,80 +0,0 @@ -; RUN: opt -basicaa -loop-rotate -licm -instcombine -indvars -loop-unroll -S %s | FileCheck %s -; -; PR18361: ScalarEvolution::getAddRecExpr(): -; Assertion `isLoopInvariant(Operands[i],... -; -; After a series of loop optimizations, SCEV's LoopDispositions grow stale. -; In particular, LoopSimplify hoists %cmp4, resulting in this SCEV for %add: -; {(zext i1 %cmp4 to i32),+,1}<nw><%for.cond1.preheader> -; -; When recomputing the SCEV for %ashr, we truncate the operands to get: -; (zext i1 %cmp4 to i16) -; -; This SCEV was never mapped to a value so never invalidated. It's -; loop disposition is still marked as non-loop-invariant, which is -; inconsistent with the AddRec. - -target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx" - -@d = common global i32 0, align 4 -@a = common global i32 0, align 4 -@c = common global i32 0, align 4 -@b = common global i32 0, align 4 - -; Check that the def-use chain that leads to the bad SCEV is still -; there. -; -; CHECK-LABEL: @foo -; CHECK-LABEL: entry: -; CHECK-LABEL: for.cond1.preheader: -; CHECK-LABEL: for.body3: -; CHECK: %cmp4.le.le -; CHECK: %conv.le.le = zext i1 %cmp4.le.le to i32 -; CHECK: %xor.le.le = xor i32 %conv6.le.le, 1 -define void @foo() { -entry: - br label %for.cond - -for.cond: ; preds = %for.inc7, %entry - %storemerge = phi i32 [ 0, %entry ], [ %inc8, %for.inc7 ] - %f.0 = phi i32 [ undef, %entry ], [ %f.1, %for.inc7 ] - store i32 %storemerge, i32* @d, align 4 - %cmp = icmp slt i32 %storemerge, 1 - br i1 %cmp, label %for.cond1, label %for.end9 - -for.cond1: ; preds = %for.cond, %for.body3 - %storemerge1 = phi i32 [ %inc, %for.body3 ], [ 0, %for.cond ] - %f.1 = phi i32 [ %xor, %for.body3 ], [ %f.0, %for.cond ] - store i32 %storemerge1, i32* @a, align 4 - %cmp2 = icmp slt i32 %storemerge1, 1 - br i1 %cmp2, label %for.body3, label %for.inc7 - -for.body3: ; preds = %for.cond1 - %0 = load i32, i32* @c, align 4 - %cmp4 = icmp sge i32 %storemerge1, %0 - %conv = zext i1 %cmp4 to i32 - %1 = load i32, i32* @d, align 4 - %add = add nsw i32 %conv, %1 - %sext = shl i32 %add, 16 - %conv6 = ashr exact i32 %sext, 16 - %xor = xor i32 %conv6, 1 - %inc = add nsw i32 %storemerge1, 1 - br label %for.cond1 - -for.inc7: ; preds = %for.cond1 - %2 = load i32, i32* @d, align 4 - %inc8 = add nsw i32 %2, 1 - br label %for.cond - -for.end9: ; preds = %for.cond - %cmp10 = icmp sgt i32 %f.0, 0 - br i1 %cmp10, label %if.then, label %if.end - -if.then: ; preds = %for.end9 - store i32 0, i32* @b, align 4 - br label %if.end - -if.end: ; preds = %if.then, %for.end9 - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/basictest.ll b/llvm/test/Transforms/LoopSimplify/basictest.ll deleted file mode 100644 index e5fb7b9907b..00000000000 --- a/llvm/test/Transforms/LoopSimplify/basictest.ll +++ /dev/null @@ -1,236 +0,0 @@ -; RUN: opt < %s -S -loop-simplify | FileCheck %s -; RUN: opt < %s -S -passes=loop-simplify | FileCheck %s - -; This function should get a preheader inserted before bb3, that is jumped -; to by bb1 & bb2 -define void @test() { -; CHECK-LABEL: define void @test( -entry: - br i1 true, label %bb1, label %bb2 - -bb1: - br label %bb3 -; CHECK: bb1: -; CHECK-NEXT: br label %[[PH:.*]] - -bb2: - br label %bb3 -; CHECK: bb2: -; CHECK-NEXT: br label %[[PH]] - -bb3: - br label %bb3 -; CHECK: [[PH]]: -; CHECK-NEXT: br label %bb3 -; -; CHECK: bb3: -; CHECK-NEXT: br label %bb3 -} - -; Test a case where we have multiple exit blocks as successors of a single loop -; block that need to be made dedicated exit blocks. We also have multiple -; exiting edges to one of the exit blocks that all should be rewritten. -define void @test_multiple_exits_from_single_block(i8 %a, i8* %b.ptr) { -; CHECK-LABEL: define void @test_multiple_exits_from_single_block( -entry: - switch i8 %a, label %loop [ - i8 0, label %exit.a - i8 1, label %exit.b - ] -; CHECK: entry: -; CHECK-NEXT: switch i8 %a, label %[[PH:.*]] [ -; CHECK-NEXT: i8 0, label %exit.a -; CHECK-NEXT: i8 1, label %exit.b -; CHECK-NEXT: ] - -loop: - %b = load volatile i8, i8* %b.ptr - switch i8 %b, label %loop [ - i8 0, label %exit.a - i8 1, label %exit.b - i8 2, label %loop - i8 3, label %exit.a - i8 4, label %loop - i8 5, label %exit.a - i8 6, label %loop - ] -; CHECK: [[PH]]: -; CHECK-NEXT: br label %loop -; -; CHECK: loop: -; CHECK-NEXT: %[[B:.*]] = load volatile i8, i8* %b.ptr -; CHECK-NEXT: switch i8 %[[B]], label %[[BACKEDGE:.*]] [ -; CHECK-NEXT: i8 0, label %[[LOOPEXIT_A:.*]] -; CHECK-NEXT: i8 1, label %[[LOOPEXIT_B:.*]] -; CHECK-NEXT: i8 2, label %[[BACKEDGE]] -; CHECK-NEXT: i8 3, label %[[LOOPEXIT_A]] -; CHECK-NEXT: i8 4, label %[[BACKEDGE]] -; CHECK-NEXT: i8 5, label %[[LOOPEXIT_A]] -; CHECK-NEXT: i8 6, label %[[BACKEDGE]] -; CHECK-NEXT: ] -; -; CHECK: [[BACKEDGE]]: -; CHECK-NEXT: br label %loop - -exit.a: - ret void -; CHECK: [[LOOPEXIT_A]]: -; CHECK-NEXT: br label %exit.a -; -; CHECK: exit.a: -; CHECK-NEXT: ret void - -exit.b: - ret void -; CHECK: [[LOOPEXIT_B]]: -; CHECK-NEXT: br label %exit.b -; -; CHECK: exit.b: -; CHECK-NEXT: ret void -} - -; Check that we leave already dedicated exits alone when forming dedicated exit -; blocks. -define void @test_pre_existing_dedicated_exits(i1 %a, i1* %ptr) { -; CHECK-LABEL: define void @test_pre_existing_dedicated_exits( -entry: - br i1 %a, label %loop.ph, label %non_dedicated_exit -; CHECK: entry: -; CHECK-NEXT: br i1 %a, label %loop.ph, label %non_dedicated_exit - -loop.ph: - br label %loop.header -; CHECK: loop.ph: -; CHECK-NEXT: br label %loop.header - -loop.header: - %c1 = load volatile i1, i1* %ptr - br i1 %c1, label %loop.body1, label %dedicated_exit1 -; CHECK: loop.header: -; CHECK-NEXT: %[[C1:.*]] = load volatile i1, i1* %ptr -; CHECK-NEXT: br i1 %[[C1]], label %loop.body1, label %dedicated_exit1 - -loop.body1: - %c2 = load volatile i1, i1* %ptr - br i1 %c2, label %loop.body2, label %non_dedicated_exit -; CHECK: loop.body1: -; CHECK-NEXT: %[[C2:.*]] = load volatile i1, i1* %ptr -; CHECK-NEXT: br i1 %[[C2]], label %loop.body2, label %[[LOOPEXIT:.*]] - -loop.body2: - %c3 = load volatile i1, i1* %ptr - br i1 %c3, label %loop.backedge, label %dedicated_exit2 -; CHECK: loop.body2: -; CHECK-NEXT: %[[C3:.*]] = load volatile i1, i1* %ptr -; CHECK-NEXT: br i1 %[[C3]], label %loop.backedge, label %dedicated_exit2 - -loop.backedge: - br label %loop.header -; CHECK: loop.backedge: -; CHECK-NEXT: br label %loop.header - -dedicated_exit1: - ret void -; Check that there isn't a split loop exit. -; CHECK-NOT: br label %dedicated_exit1 -; -; CHECK: dedicated_exit1: -; CHECK-NEXT: ret void - -dedicated_exit2: - ret void -; Check that there isn't a split loop exit. -; CHECK-NOT: br label %dedicated_exit2 -; -; CHECK: dedicated_exit2: -; CHECK-NEXT: ret void - -non_dedicated_exit: - ret void -; CHECK: [[LOOPEXIT]]: -; CHECK-NEXT: br label %non_dedicated_exit -; -; CHECK: non_dedicated_exit: -; CHECK-NEXT: ret void -} - -; Check that we form what dedicated exits we can even when some exits are -; reached via indirectbr which precludes forming dedicated exits. -define void @test_form_some_dedicated_exits_despite_indirectbr(i8 %a, i8* %ptr, i8** %addr.ptr) { -; CHECK-LABEL: define void @test_form_some_dedicated_exits_despite_indirectbr( -entry: - switch i8 %a, label %loop.ph [ - i8 0, label %exit.a - i8 1, label %exit.b - i8 2, label %exit.c - ] -; CHECK: entry: -; CHECK-NEXT: switch i8 %a, label %loop.ph [ -; CHECK-NEXT: i8 0, label %exit.a -; CHECK-NEXT: i8 1, label %exit.b -; CHECK-NEXT: i8 2, label %exit.c -; CHECK-NEXT: ] - -loop.ph: - br label %loop.header -; CHECK: loop.ph: -; CHECK-NEXT: br label %loop.header - -loop.header: - %addr1 = load volatile i8*, i8** %addr.ptr - indirectbr i8* %addr1, [label %loop.body1, label %exit.a] -; CHECK: loop.header: -; CHECK-NEXT: %[[ADDR1:.*]] = load volatile i8*, i8** %addr.ptr -; CHECK-NEXT: indirectbr i8* %[[ADDR1]], [label %loop.body1, label %exit.a] - -loop.body1: - %b = load volatile i8, i8* %ptr - switch i8 %b, label %loop.body2 [ - i8 0, label %exit.a - i8 1, label %exit.b - i8 2, label %exit.c - ] -; CHECK: loop.body1: -; CHECK-NEXT: %[[B:.*]] = load volatile i8, i8* %ptr -; CHECK-NEXT: switch i8 %[[B]], label %loop.body2 [ -; CHECK-NEXT: i8 0, label %exit.a -; CHECK-NEXT: i8 1, label %[[LOOPEXIT:.*]] -; CHECK-NEXT: i8 2, label %exit.c -; CHECK-NEXT: ] - -loop.body2: - %addr2 = load volatile i8*, i8** %addr.ptr - indirectbr i8* %addr2, [label %loop.backedge, label %exit.c] -; CHECK: loop.body2: -; CHECK-NEXT: %[[ADDR2:.*]] = load volatile i8*, i8** %addr.ptr -; CHECK-NEXT: indirectbr i8* %[[ADDR2]], [label %loop.backedge, label %exit.c] - -loop.backedge: - br label %loop.header -; CHECK: loop.backedge: -; CHECK-NEXT: br label %loop.header - -exit.a: - ret void -; Check that there isn't a split loop exit. -; CHECK-NOT: br label %exit.a -; -; CHECK: exit.a: -; CHECK-NEXT: ret void - -exit.b: - ret void -; CHECK: [[LOOPEXIT]]: -; CHECK-NEXT: br label %exit.b -; -; CHECK: exit.b: -; CHECK-NEXT: ret void - -exit.c: - ret void -; Check that there isn't a split loop exit. -; CHECK-NOT: br label %exit.c -; -; CHECK: exit.c: -; CHECK-NEXT: ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/dbg-loc.ll b/llvm/test/Transforms/LoopSimplify/dbg-loc.ll deleted file mode 100644 index efd5e8e71c9..00000000000 --- a/llvm/test/Transforms/LoopSimplify/dbg-loc.ll +++ /dev/null @@ -1,102 +0,0 @@ -; Check that LoopSimplify creates debug locations in synthesized basic blocks. -; RUN: opt -loop-simplify %s -S -o - | FileCheck %s - -%union.anon = type { i32 } -%"Length" = type <{ %union.anon, i8, i8, i8, i8 }> -declare void @bar(%"Length"*) #3 -@catchtypeinfo = external unnamed_addr constant { i8*, i8*, i8* } -declare i32 @__gxx_personality_v0(...) -declare void @f1() -declare void @f2() -declare void @f3() - -; CHECK-LABEL: @foo -; CHECK: for.body.preheader: -; CHECK-NEXT: br label %for.body, !dbg [[PREHEADER_LOC:![0-9]+]] -; CHECK: for.end.loopexit: -; CHECK-NEXT: br label %for.end, !dbg [[LOOPEXIT_LOC:![0-9]+]] - -define linkonce_odr hidden void @foo(%"Length"* %begin, %"Length"* %end) nounwind ssp uwtable align 2 !dbg !6 { -entry: - %cmp.4 = icmp eq %"Length"* %begin, %end, !dbg !7 - br i1 %cmp.4, label %for.end, label %for.body, !dbg !8 - -for.body: ; preds = %entry, %length.exit - %begin.sink5 = phi %"Length"* [ %incdec.ptr, %length.exit ], [ %begin, %entry ] - tail call void @llvm.dbg.value(metadata %"Length"* %begin.sink5, metadata !15, metadata !16), !dbg !17 - %m_type.i.i.i = getelementptr inbounds %"Length", %"Length"* %begin.sink5, i64 0, i32 2, !dbg !9 - %0 = load i8, i8* %m_type.i.i.i, align 1, !dbg !9 - %cmp.i.i = icmp eq i8 %0, 9, !dbg !7 - br i1 %cmp.i.i, label %if.then.i, label %length.exit, !dbg !8 - -if.then.i: ; preds = %for.body - tail call void @bar(%"Length"* %begin.sink5) #7, !dbg !10 - br label %length.exit, !dbg !10 - -length.exit: ; preds = %for.body, %if.then.i - %incdec.ptr = getelementptr inbounds %"Length", %"Length"* %begin.sink5, i64 1, !dbg !11 - %cmp = icmp eq %"Length"* %incdec.ptr, %end, !dbg !7 - br i1 %cmp, label %for.end, label %for.body, !dbg !8 - -for.end: ; preds = %length.exit, %entry - ret void, !dbg !12 -} - -; CHECK-LABEL: @with_landingpad -; CHECK: catch.preheader: -; CHECK: br label %catch, !dbg [[LPAD_PREHEADER_LOC:![0-9]+]] -; CHECK: catch.preheader.split-lp: -; CHECK: br label %catch, !dbg [[LPAD_PREHEADER_LOC]] - -define void @with_landingpad() uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { -entry: - invoke void @f1() to label %try.cont19 unwind label %catch, !dbg !13 - -catch: ; preds = %if.else, %entry - %0 = landingpad { i8*, i32 } - catch i8* bitcast ({ i8*, i8*, i8* }* @catchtypeinfo to i8*), !dbg !13 - invoke void @f3() to label %if.else unwind label %eh.resume, !dbg !13 - -if.else: ; preds = %catch - invoke void @f2() to label %try.cont19 unwind label %catch, !dbg !13 - -try.cont19: ; preds = %if.else, %entry - ret void, !dbg !13 - -eh.resume: ; preds = %catch - %1 = landingpad { i8*, i32 } - cleanup catch i8* bitcast ({ i8*, i8*, i8* }* @catchtypeinfo to i8*), !dbg !13 - resume { i8*, i32 } undef, !dbg !13 -} - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.value(metadata, metadata, metadata) - -; CHECK-DAG: [[PREHEADER_LOC]] = !DILocation(line: 73, column: 27, scope: !{{[0-9]+}}) -; CHECK-DAG: [[LOOPEXIT_LOC]] = !DILocation(line: 75, column: 9, scope: !{{[0-9]+}}) -; CHECK-DAG: [[LPAD_PREHEADER_LOC]] = !DILocation(line: 85, column: 1, scope: !{{[0-9]+}}) - -!llvm.module.flags = !{!0, !1, !2} -!llvm.dbg.cu = !{!14} -!0 = !{i32 2, !"Dwarf Version", i32 4} -!1 = !{i32 2, !"Debug Info Version", i32 3} -!2 = !{i32 1, !"PIC Level", i32 2} - -!3 = !{} -!4 = !DISubroutineType(types: !3) -!5 = !DIFile(filename: "Vector.h", directory: "/tmp") -!6 = distinct !DISubprogram(name: "destruct", scope: !5, file: !5, line: 71, type: !4, isLocal: false, isDefinition: true, scopeLine: 72, flags: DIFlagPrototyped, isOptimized: false, unit: !14, retainedNodes: !3) -!7 = !DILocation(line: 73, column: 38, scope: !6) -!8 = !DILocation(line: 73, column: 13, scope: !6) -!9 = !DILocation(line: 73, column: 27, scope: !6) -!10 = !DILocation(line: 74, column: 17, scope: !6) -!11 = !DILocation(line: 73, column: 46, scope: !6) -!12 = !DILocation(line: 75, column: 9, scope: !6) -!13 = !DILocation(line: 85, column: 1, scope: !6) -!14 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", - file: !5, - isOptimized: true, flags: "-O2", - splitDebugFilename: "abc.debug", emissionKind: 2) -!15 = !DILocalVariable(name: "begin", arg: 1, scope: !6, file: !5, line: 71) -!16 = !DIExpression() -!17 = !DILocation(line: 71, column: 32, scope: !6) diff --git a/llvm/test/Transforms/LoopSimplify/dup-preds.ll b/llvm/test/Transforms/LoopSimplify/dup-preds.ll deleted file mode 100644 index c9253fa51a6..00000000000 --- a/llvm/test/Transforms/LoopSimplify/dup-preds.ll +++ /dev/null @@ -1,46 +0,0 @@ -; RUN: opt -loop-simplify -S %s | FileCheck %s -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64" -target triple = "powerpc64-bgq-linux" - -define fastcc void @do_update_md([3 x float]* nocapture readonly %x) #0 { -entry: - br i1 undef, label %if.end365, label %lor.lhs.false134 - -lor.lhs.false134: ; preds = %entry - br i1 undef, label %lor.lhs.false138, label %if.end365 - -lor.lhs.false138: ; preds = %lor.lhs.false134 - br i1 undef, label %lor.lhs.false142, label %if.end365 - -lor.lhs.false142: ; preds = %lor.lhs.false138 - br i1 undef, label %for.body276.lr.ph, label %if.end365 - -for.body276.lr.ph: ; preds = %lor.lhs.false142 - switch i16 undef, label %if.then288 [ - i16 4, label %for.body344 - i16 2, label %for.body344 - ] - -if.then288: ; preds = %for.body276.lr.ph - br label %for.body305 - -for.body305: ; preds = %for.body305, %if.then288 - br label %for.body305 - -for.body344: ; preds = %for.body344, %for.body276.lr.ph, %for.body276.lr.ph - %indvar = phi i64 [ %indvar.next, %for.body344 ], [ 0, %for.body276.lr.ph ], [ 0, %for.body276.lr.ph ] - %indvars.iv552 = phi i64 [ %indvars.iv.next553, %for.body344 ], [ 0, %for.body276.lr.ph ], [ 0, %for.body276.lr.ph ] - %indvars.iv.next553 = add nuw nsw i64 %indvars.iv552, 1 - %indvar.next = add i64 %indvar, 1 - br label %for.body344 - -; CHECK-LABEL: @do_update_md -; CHECK: %indvars.iv552 = phi i64 [ %indvars.iv.next553, %for.body344 ], [ 0, %for.body344.preheader ] -; CHECK: ret - -if.end365: ; preds = %lor.lhs.false142, %lor.lhs.false138, %lor.lhs.false134, %entry - ret void -} - -attributes #0 = { nounwind } - diff --git a/llvm/test/Transforms/LoopSimplify/hardertest.ll b/llvm/test/Transforms/LoopSimplify/hardertest.ll deleted file mode 100644 index 1ccb396490c..00000000000 --- a/llvm/test/Transforms/LoopSimplify/hardertest.ll +++ /dev/null @@ -1,15 +0,0 @@ -; RUN: opt < %s -loop-simplify - -define void @foo(i1 %C) { - br i1 %C, label %T, label %F -T: ; preds = %0 - br label %Loop -F: ; preds = %0 - br label %Loop -Loop: ; preds = %L2, %Loop, %F, %T - %Val = phi i32 [ 0, %T ], [ 1, %F ], [ 2, %Loop ], [ 3, %L2 ] ; <i32> [#uses=0] - br i1 %C, label %Loop, label %L2 -L2: ; preds = %Loop - br label %Loop -} - diff --git a/llvm/test/Transforms/LoopSimplify/indirectbr-backedge.ll b/llvm/test/Transforms/LoopSimplify/indirectbr-backedge.ll deleted file mode 100644 index 7eabc09cd7d..00000000000 --- a/llvm/test/Transforms/LoopSimplify/indirectbr-backedge.ll +++ /dev/null @@ -1,35 +0,0 @@ -; RUN: opt -loop-simplify -S < %s | FileCheck %s - -; LoopSimplify shouldn't split loop backedges that use indirectbr. - -; CHECK: bb1: ; preds = %bb5, %bb -; CHECK-NEXT: indirectbr - -; CHECK: bb5: ; preds = %bb1 -; CHECK-NEXT: br label %bb1{{$}} - -define void @foo(i8* %p) nounwind { -bb: - br label %bb1 - -bb1: ; preds = %bb5, %bb1, %bb - indirectbr i8* %p, [label %bb6, label %bb7, label %bb1, label %bb2, label %bb3, label %bb5, label %bb4] - -bb2: ; preds = %bb1 - ret void - -bb3: ; preds = %bb1 - ret void - -bb4: ; preds = %bb1 - ret void - -bb5: ; preds = %bb1 - br label %bb1 - -bb6: ; preds = %bb1 - ret void - -bb7: ; preds = %bb1 - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/indirectbr.ll b/llvm/test/Transforms/LoopSimplify/indirectbr.ll deleted file mode 100644 index ca05f437e5c..00000000000 --- a/llvm/test/Transforms/LoopSimplify/indirectbr.ll +++ /dev/null @@ -1,100 +0,0 @@ -; RUN: opt < %s -loop-simplify -lcssa -verify-loop-info -verify-dom-info -S \ -; RUN: | grep -F "indirectbr i8* %x, [label %L0, label %L1]" \ -; RUN: | count 6 - -; LoopSimplify should not try to transform loops when indirectbr is involved. - -define void @entry(i8* %x) { -entry: - indirectbr i8* %x, [ label %L0, label %L1 ] - -L0: - br label %L0 - -L1: - ret void -} - -define void @backedge(i8* %x) { -entry: - br label %L0 - -L0: - br label %L1 - -L1: - indirectbr i8* %x, [ label %L0, label %L1 ] -} - -define i64 @exit(i8* %x) { -entry: - br label %L2 - -L2: - %z = bitcast i64 0 to i64 - indirectbr i8* %x, [ label %L0, label %L1 ] - -L0: - br label %L2 - -L1: - ret i64 %z -} - -define i64 @criticalexit(i8* %x, i1 %a) { -entry: - br i1 %a, label %L1, label %L2 - -L2: - %z = bitcast i64 0 to i64 - indirectbr i8* %x, [ label %L0, label %L1 ] - -L0: - br label %L2 - -L1: - %y = phi i64 [ %z, %L2 ], [ 1, %entry ] - ret i64 %y -} - -define i64 @exit_backedge(i8* %x) { -entry: - br label %L0 - -L0: - %z = bitcast i64 0 to i64 - indirectbr i8* %x, [ label %L0, label %L1 ] - -L1: - ret i64 %z -} - -define i64 @criticalexit_backedge(i8* %x, i1 %a) { -entry: - br i1 %a, label %L0, label %L1 - -L0: - %z = bitcast i64 0 to i64 - indirectbr i8* %x, [ label %L0, label %L1 ] - -L1: - %y = phi i64 [ %z, %L0 ], [ 1, %entry ] - ret i64 %y -} - -define void @pr5502() nounwind { -entry: - br label %while.cond - -while.cond: - br i1 undef, label %while.body, label %while.end - -while.body: - indirectbr i8* undef, [label %end_opcode, label %end_opcode] - -end_opcode: - br i1 false, label %end_opcode, label %while.cond - -while.end: - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/merge-exits.ll b/llvm/test/Transforms/LoopSimplify/merge-exits.ll deleted file mode 100644 index 5cdf8148778..00000000000 --- a/llvm/test/Transforms/LoopSimplify/merge-exits.ll +++ /dev/null @@ -1,48 +0,0 @@ -; RUN: opt < %s -loop-simplify -loop-rotate -instcombine -indvars -S -verify-loop-info -verify-dom-info | FileCheck %s - -; Loopsimplify should be able to merge the two loop exits -; into one, so that loop rotate can rotate the loop, so -; that indvars can promote the induction variable to i64 -; without needing casts. - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n32:64" - -; CHECK-LABEL: @test1 -; CHECK: bb: -; CHECK: phi i64 -; CHECK-NOT: phi i64 -; CHECK-NOT: sext - -define float @test1(float* %pTmp1, float* %peakWeight, i32 %bandEdgeIndex) nounwind { -entry: - %t0 = load float, float* %peakWeight, align 4 - br label %bb1 - -bb: ; preds = %bb2 - %t1 = sext i32 %hiPart.0 to i64 - %t2 = getelementptr float, float* %pTmp1, i64 %t1 - %t3 = load float, float* %t2, align 4 - %t4 = fadd float %t3, %distERBhi.0 - %t5 = add i32 %hiPart.0, 1 - %t6 = sext i32 %t5 to i64 - %t7 = getelementptr float, float* %peakWeight, i64 %t6 - %t8 = load float, float* %t7, align 4 - %t9 = fadd float %t8, %peakCount.0 - br label %bb1 - -bb1: ; preds = %bb, %entry - %peakCount.0 = phi float [ %t0, %entry ], [ %t9, %bb ] - %hiPart.0 = phi i32 [ 0, %entry ], [ %t5, %bb ] - %distERBhi.0 = phi float [ 0.000000e+00, %entry ], [ %t4, %bb ] - %t10 = fcmp uge float %distERBhi.0, 2.500000e+00 - br i1 %t10, label %bb3, label %bb2 - -bb2: ; preds = %bb1 - %t11 = add i32 %bandEdgeIndex, -1 - %t12 = icmp sgt i32 %t11, %hiPart.0 - br i1 %t12, label %bb, label %bb3 - -bb3: ; preds = %bb2, %bb1 - %t13 = fdiv float %peakCount.0, %distERBhi.0 - ret float %t13 -} diff --git a/llvm/test/Transforms/LoopSimplify/notify-scev.ll b/llvm/test/Transforms/LoopSimplify/notify-scev.ll deleted file mode 100644 index 059b589abef..00000000000 --- a/llvm/test/Transforms/LoopSimplify/notify-scev.ll +++ /dev/null @@ -1,110 +0,0 @@ -; RUN: opt -indvars -S %s | FileCheck %s -; -; PR18384: ValueHandleBase::ValueIsDeleted. -; -; Ensure that LoopSimplify calls ScalarEvolution::forgetLoop before -; deleting a block, regardless of whether any values were hoisted out -; of the block. - -target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-darwin" - -%struct.Params = type { [2 x [4 x [16 x i16]]] } - -; Verify that the loop tail is deleted, and we don't crash! -; -; CHECK-LABEL: @t -; CHECK-LABEL: for.cond127.preheader: -; CHECK-NOT: for.cond127: -; CHECK-LABEL: for.body129: -define void @t() { -entry: - br label %for.body102 - -for.body102: - br i1 undef, label %for.cond127.preheader, label %for.inc203 - -for.cond127.preheader: - br label %for.body129 - -for.cond127: - %cmp128 = icmp slt i32 %inc191, 2 - br i1 %cmp128, label %for.body129, label %for.end192 - -for.body129: - %uv.013 = phi i32 [ 0, %for.cond127.preheader ], [ %inc191, %for.cond127 ] - %idxprom130 = sext i32 %uv.013 to i64 - br i1 undef, label %for.cond135.preheader.lr.ph, label %for.end185 - -for.cond135.preheader.lr.ph: - br i1 undef, label %for.cond135.preheader.lr.ph.split.us, label %for.cond135.preheader.lr.ph.split_crit_edge - -for.cond135.preheader.lr.ph.split_crit_edge: - br label %for.cond135.preheader.lr.ph.split - -for.cond135.preheader.lr.ph.split.us: - br label %for.cond135.preheader.us - -for.cond135.preheader.us: - %block_y.09.us = phi i32 [ 0, %for.cond135.preheader.lr.ph.split.us ], [ %add184.us, %for.cond132.us ] - br i1 true, label %for.cond138.preheader.lr.ph.us, label %for.end178.us - -for.end178.us: - %add184.us = add nsw i32 %block_y.09.us, 4 - br i1 undef, label %for.end185split.us-lcssa.us, label %for.cond132.us - -for.end174.us: - br i1 undef, label %for.cond138.preheader.us, label %for.cond135.for.end178_crit_edge.us - -for.inc172.us: - br i1 undef, label %for.cond142.preheader.us, label %for.end174.us - -for.body145.us: - %arrayidx163.us = getelementptr inbounds %struct.Params, %struct.Params* undef, i64 0, i32 0, i64 %idxprom130, i64 %idxprom146.us - br i1 undef, label %for.body145.us, label %for.inc172.us - -for.cond142.preheader.us: - %j.04.us = phi i32 [ %block_y.09.us, %for.cond138.preheader.us ], [ undef, %for.inc172.us ] - %idxprom146.us = sext i32 %j.04.us to i64 - br label %for.body145.us - -for.cond138.preheader.us: - br label %for.cond142.preheader.us - -for.cond132.us: - br i1 undef, label %for.cond135.preheader.us, label %for.cond132.for.end185_crit_edge.us-lcssa.us - -for.cond138.preheader.lr.ph.us: - br label %for.cond138.preheader.us - -for.cond135.for.end178_crit_edge.us: - br label %for.end178.us - -for.end185split.us-lcssa.us: - br label %for.end185split - -for.cond132.for.end185_crit_edge.us-lcssa.us: - br label %for.cond132.for.end185_crit_edge - -for.cond135.preheader.lr.ph.split: - br label %for.end185split - -for.end185split: - br label %for.end185 - -for.cond132.for.end185_crit_edge: - br label %for.end185 - -for.end185: - %inc191 = add nsw i32 %uv.013, 1 - br i1 false, label %for.end192, label %for.cond127 - -for.end192: - br label %for.inc203 - -for.inc203: - br label %for.end205 - -for.end205: - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/phi-node-simplify.ll b/llvm/test/Transforms/LoopSimplify/phi-node-simplify.ll deleted file mode 100644 index 6536acb7b03..00000000000 --- a/llvm/test/Transforms/LoopSimplify/phi-node-simplify.ll +++ /dev/null @@ -1,55 +0,0 @@ -; Loop Simplify should turn phi nodes like X = phi [X, Y] into just Y, eliminating them. -; RUN: opt < %s -loop-simplify -S | grep phi | count 6 - -@A = weak global [3000000 x i32] zeroinitializer ; <[3000000 x i32]*> [#uses=1] -@B = weak global [20000 x i32] zeroinitializer ; <[20000 x i32]*> [#uses=1] -@C = weak global [100 x i32] zeroinitializer ; <[100 x i32]*> [#uses=1] -@Z = weak global i32 0 ; <i32*> [#uses=2] - -define i32 @main() { -entry: - tail call void @__main( ) - br label %loopentry.1 -loopentry.1: ; preds = %loopexit.1, %entry - %indvar20 = phi i32 [ 0, %entry ], [ %indvar.next21, %loopexit.1 ] ; <i32> [#uses=1] - %a.1 = phi i32* [ getelementptr ([3000000 x i32], [3000000 x i32]* @A, i32 0, i32 0), %entry ], [ %inc.0, %loopexit.1 ] ; <i32*> [#uses=1] - br label %no_exit.2 -no_exit.2: ; preds = %loopexit.2, %no_exit.2, %loopentry.1 - %a.0.4.ph = phi i32* [ %a.1, %loopentry.1 ], [ %inc.0, %loopexit.2 ], [ %a.0.4.ph, %no_exit.2 ] ; <i32*> [#uses=3] - %b.1.4.ph = phi i32* [ getelementptr ([20000 x i32], [20000 x i32]* @B, i32 0, i32 0), %loopentry.1 ], [ %inc.1, %loopexit.2 ], [ %b.1.4.ph, %no_exit.2 ] ; <i32*> [#uses=3] - %indvar17 = phi i32 [ 0, %loopentry.1 ], [ %indvar.next18, %loopexit.2 ], [ %indvar17, %no_exit.2 ] ; <i32> [#uses=2] - %indvar = phi i32 [ %indvar.next, %no_exit.2 ], [ 0, %loopexit.2 ], [ 0, %loopentry.1 ] ; <i32> [#uses=5] - %b.1.4.rec = bitcast i32 %indvar to i32 ; <i32> [#uses=1] - %gep.upgrd.1 = zext i32 %indvar to i64 ; <i64> [#uses=1] - %c.2.4 = getelementptr [100 x i32], [100 x i32]* @C, i32 0, i64 %gep.upgrd.1 ; <i32*> [#uses=1] - %gep.upgrd.2 = zext i32 %indvar to i64 ; <i64> [#uses=1] - %a.0.4 = getelementptr i32, i32* %a.0.4.ph, i64 %gep.upgrd.2 ; <i32*> [#uses=1] - %gep.upgrd.3 = zext i32 %indvar to i64 ; <i64> [#uses=1] - %b.1.4 = getelementptr i32, i32* %b.1.4.ph, i64 %gep.upgrd.3 ; <i32*> [#uses=1] - %inc.0.rec = add i32 %b.1.4.rec, 1 ; <i32> [#uses=2] - %inc.0 = getelementptr i32, i32* %a.0.4.ph, i32 %inc.0.rec ; <i32*> [#uses=2] - %tmp.13 = load i32, i32* %a.0.4 ; <i32> [#uses=1] - %inc.1 = getelementptr i32, i32* %b.1.4.ph, i32 %inc.0.rec ; <i32*> [#uses=1] - %tmp.15 = load i32, i32* %b.1.4 ; <i32> [#uses=1] - %tmp.18 = load i32, i32* %c.2.4 ; <i32> [#uses=1] - %tmp.16 = mul i32 %tmp.15, %tmp.13 ; <i32> [#uses=1] - %tmp.19 = mul i32 %tmp.16, %tmp.18 ; <i32> [#uses=1] - %tmp.20 = load i32, i32* @Z ; <i32> [#uses=1] - %tmp.21 = add i32 %tmp.19, %tmp.20 ; <i32> [#uses=1] - store i32 %tmp.21, i32* @Z - %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=2] - %exitcond = icmp eq i32 %indvar.next, 100 ; <i1> [#uses=1] - br i1 %exitcond, label %loopexit.2, label %no_exit.2 -loopexit.2: ; preds = %no_exit.2 - %indvar.next18 = add i32 %indvar17, 1 ; <i32> [#uses=2] - %exitcond19 = icmp eq i32 %indvar.next18, 200 ; <i1> [#uses=1] - br i1 %exitcond19, label %loopexit.1, label %no_exit.2 -loopexit.1: ; preds = %loopexit.2 - %indvar.next21 = add i32 %indvar20, 1 ; <i32> [#uses=2] - %exitcond22 = icmp eq i32 %indvar.next21, 300 ; <i1> [#uses=1] - br i1 %exitcond22, label %return, label %loopentry.1 -return: ; preds = %loopexit.1 - ret i32 undef -} - -declare void @__main() diff --git a/llvm/test/Transforms/LoopSimplify/pr26682.ll b/llvm/test/Transforms/LoopSimplify/pr26682.ll deleted file mode 100644 index 092c0c3f0b0..00000000000 --- a/llvm/test/Transforms/LoopSimplify/pr26682.ll +++ /dev/null @@ -1,32 +0,0 @@ -; RUN: opt < %s -lcssa -loop-simplify -indvars -S | FileCheck %s -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-unknown" - -@a = external global i32, align 4 - -; Check that loop-simplify merges two loop exits, but preserves LCSSA form. -; CHECK-LABEL: @foo -; CHECK: for: -; CHECK: %or.cond = and i1 %cmp1, %cmp2 -; CHECK-NOT: for.cond: -; CHECK: for.end: -; CHECK: %a.lcssa = phi i32 [ %a, %for ] -define i32 @foo(i32 %x) { -entry: - br label %for - -for: - %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.cond ] - %cmp1 = icmp eq i32 %x, 0 - %iv.next = add nuw nsw i32 %iv, 1 - %a = load i32, i32* @a - br i1 %cmp1, label %for.cond, label %for.end - -for.cond: - %cmp2 = icmp slt i32 %iv.next, 4 - br i1 %cmp2, label %for, label %for.end - -for.end: - %a.lcssa = phi i32 [ %a, %for ], [ %a, %for.cond ] - ret i32 %a.lcssa -} diff --git a/llvm/test/Transforms/LoopSimplify/pr28272.ll b/llvm/test/Transforms/LoopSimplify/pr28272.ll deleted file mode 100644 index d4025dbd44c..00000000000 --- a/llvm/test/Transforms/LoopSimplify/pr28272.ll +++ /dev/null @@ -1,139 +0,0 @@ -; RUN: opt < %s -lcssa -loop-simplify -indvars -S | FileCheck %s -target triple = "x86_64-unknown-linux-gnu" - -; PR28272, PR28825 -; When LoopSimplify separates nested loops, it might break LCSSA form: values -; from the original loop might be used in the outer loop. This test invokes -; loop-unroll, which calls loop-simplify before itself. If LCSSA is broken -; after loop-simplify, we crash on assertion. - -; CHECK-LABEL: @foo -define void @foo() { -entry: - br label %header - -header: - br label %loop1 - -loop1: - br i1 true, label %loop1, label %bb43 - -bb43: - %a = phi i32 [ undef, %loop1 ], [ 0, %bb45 ], [ %a, %bb54 ] - %b = phi i32 [ 0, %loop1 ], [ 1, %bb54 ], [ %c, %bb45 ] - br i1 true, label %bb114, label %header - -bb114: - %c = add i32 0, 1 - %d = add i32 0, 1 - br i1 true, label %bb45, label %bb54 - -bb45: - %x = add i32 %d, 0 - br label %bb43 - -bb54: - br label %bb43 -} - -; CHECK-LABEL: @foo2 -define void @foo2() { -entry: - br label %outer - -outer.loopexit: - br label %outer - -outer: - br label %loop1 - -loop1: - br i1 true, label %loop1, label %loop2.preheader - -loop2.preheader: - %a.ph = phi i32 [ undef, %loop1 ] - %b.ph = phi i32 [ 0, %loop1 ] - br label %loop2 - -loop2: - %a = phi i32 [ 0, %loop2.if.true ], [ %a, %loop2.if.false ], [ %a.ph, %loop2.preheader ], [0, %bb] - %b = phi i32 [ 1, %loop2.if.false ], [ %c, %loop2.if.true ], [ %b.ph, %loop2.preheader ], [%c, %bb] - br i1 true, label %loop2.if, label %outer.loopexit - -loop2.if: - %c = add i32 0, 1 - switch i32 undef, label %loop2.if.false [i32 0, label %loop2.if.true - i32 1, label %bb] - -loop2.if.true: - br i1 undef, label %loop2, label %bb - -loop2.if.false: - br label %loop2 - -bb: - br label %loop2 -} - -; When LoopSimplify separates nested loops, it might break LCSSA form: values -; from the original loop might be used in exit blocks of the outer loop. -; CHECK-LABEL: @foo3 -define void @foo3() { -entry: - br label %bb1 - -bb1: - br i1 undef, label %bb2, label %bb1 - -bb2: - %a = phi i32 [ undef, %bb1 ], [ %a, %bb3 ], [ undef, %bb5 ] - br i1 undef, label %bb3, label %bb1 - -bb3: - %b = load i32*, i32** undef - br i1 undef, label %bb2, label %bb4 - -bb4: - br i1 undef, label %bb5, label %bb6 - -bb5: - br i1 undef, label %bb2, label %bb4 - -bb6: - br i1 undef, label %bb_end, label %bb1 - -bb_end: - %x = getelementptr i32, i32* %b - br label %bb_end -} - -; When LoopSimplify separates nested loops, it might break LCSSA form: values -; from the original loop might occur in a loop, which is now a sibling of the -; original loop (before separating it was a subloop of the original loop, and -; thus didn't require an lcssa phi nodes). -; CHECK-LABEL: @foo4 -define void @foo4() { -bb1: - br label %bb2 - -; CHECK: bb2.loopexit: -bb2.loopexit: ; preds = %bb3 - %i.ph = phi i32 [ 0, %bb3 ] - br label %bb2 - -; CHECK: bb2.outer: -; CHECK: bb2: -bb2: ; preds = %bb2.loopexit, %bb2, %bb1 - %i = phi i32 [ 0, %bb1 ], [ %i, %bb2 ], [ %i.ph, %bb2.loopexit ] - %x = load i32, i32* undef, align 8 - br i1 undef, label %bb2, label %bb3.preheader - -; CHECK: bb3.preheader: -bb3.preheader: ; preds = %bb2 -; CHECK: %x.lcssa = phi i32 [ %x, %bb2 ] - br label %bb3 - -bb3: ; preds = %bb3.preheader, %bb3 - %y = add i32 2, %x - br i1 true, label %bb2.loopexit, label %bb3 -} diff --git a/llvm/test/Transforms/LoopSimplify/pr30454.ll b/llvm/test/Transforms/LoopSimplify/pr30454.ll deleted file mode 100644 index 3dcc393aa81..00000000000 --- a/llvm/test/Transforms/LoopSimplify/pr30454.ll +++ /dev/null @@ -1,32 +0,0 @@ -; RUN: opt < %s -lcssa -licm -S | FileCheck %s -; PR30454 -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -declare i8 @bar() - -; Test that we preserve LCSSA form when removing edges from unreachable blocks. -; CHECK-LABEL: @foo -define void @foo() { -entry: - br label %for.cond - -for.cond: - %x = phi i8 [ undef, %entry ], [ %y, %for.latch ] - br i1 undef, label %for.latch, label %exit - -; CHECK: unreachable.bb: -; CHECK-NEXT: unreachable -unreachable.bb: - br i1 undef, label %exit, label %for.latch - -for.latch: - %y = call i8 @bar() - br label %for.cond - -; CHECK: exit: -; CHECK-NEXT: %x.lcssa = phi i8 [ %x, %for.cond ] -exit: - %z = zext i8 %x to i32 - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/pr33494.ll b/llvm/test/Transforms/LoopSimplify/pr33494.ll deleted file mode 100644 index 5d3b4e80941..00000000000 --- a/llvm/test/Transforms/LoopSimplify/pr33494.ll +++ /dev/null @@ -1,75 +0,0 @@ -; RUN: opt -loop-unroll -loop-simplify -S < %s | FileCheck %s - -; This test is one of the tests of PR33494. Its compilation takes -; excessive time if we don't mark visited nodes while looking for -; constants in SCEV expression trees. - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @test_01(i32* nocapture %a) local_unnamed_addr { - -; CHECK-LABEL: @test_01( - -entry: - %arrayidx = getelementptr inbounds i32, i32* %a, i64 96 - %arrayidx.promoted51 = load i32, i32* %arrayidx, align 1 - br label %while.body - -while.body: ; preds = %entry, %while.end29 - %0 = phi i32 [ %arrayidx.promoted51, %entry ], [ %7, %while.end29 ] - %cmp46 = icmp eq i32 %0, 1 - %conv47 = zext i1 %cmp46 to i32 - %1 = add i32 %0, 1 - %2 = icmp ult i32 %1, 3 - %div48 = select i1 %2, i32 %0, i32 0 - %cmp349 = icmp sgt i32 %div48, %conv47 - br i1 %cmp349, label %while.body4.lr.ph, label %while.end29 - -while.body4.lr.ph: ; preds = %while.body - br label %while.body4 - -while.body4: ; preds = %while.body4.lr.ph, %while.end28 - %3 = phi i32 [ %0, %while.body4.lr.ph ], [ %mul17.lcssa, %while.end28 ] - br label %while.body13 - -while.body13: ; preds = %while.body4, %while.end.split - %mul1745 = phi i32 [ %3, %while.body4 ], [ %mul17, %while.end.split ] - %4 = phi i32 [ 15872, %while.body4 ], [ %add, %while.end.split ] - %mul = mul nsw i32 %mul1745, %mul1745 - %mul17 = mul nsw i32 %mul, %mul1745 - %cmp22 = icmp eq i32 %4, %mul17 - br i1 %cmp22, label %while.body13.split, label %while.end.split - -while.body13.split: ; preds = %while.body13 - br label %while.cond19 - -while.cond19: ; preds = %while.cond19, %while.body13.split - br label %while.cond19 - -while.end.split: ; preds = %while.body13 - %add = shl nsw i32 %4, 1 - %tobool12 = icmp eq i32 %add, 0 - br i1 %tobool12, label %while.end28, label %while.body13 - -while.end28: ; preds = %while.end.split - %add.lcssa = phi i32 [ %add, %while.end.split ] - %mul17.lcssa = phi i32 [ %mul17, %while.end.split ] - %cmp = icmp eq i32 %mul17.lcssa, 1 - %conv = zext i1 %cmp to i32 - %5 = add i32 %mul17.lcssa, 1 - %6 = icmp ult i32 %5, 3 - %div = select i1 %6, i32 %mul17.lcssa, i32 0 - %cmp3 = icmp sgt i32 %div, %conv - br i1 %cmp3, label %while.body4, label %while.cond1.while.end29_crit_edge - -while.cond1.while.end29_crit_edge: ; preds = %while.end28 - %.lcssa = phi i32 [ %mul17.lcssa, %while.end28 ] - %add.lcssa50.lcssa = phi i32 [ %add.lcssa, %while.end28 ] - store i32 %add.lcssa50.lcssa, i32* %a, align 4 - br label %while.end29 - -while.end29: ; preds = %while.cond1.while.end29_crit_edge, %while.body - %7 = phi i32 [ %.lcssa, %while.cond1.while.end29_crit_edge ], [ %0, %while.body ] - br label %while.body -} diff --git a/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata.ll b/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata.ll deleted file mode 100644 index c1397606487..00000000000 --- a/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata.ll +++ /dev/null @@ -1,70 +0,0 @@ -; RUN: opt -loop-simplify -S < %s | FileCheck %s - -; CHECK-LABEL: @test1 -define void @test1(i32 %n) { -entry: - br label %while.cond - -while.cond: ; preds = %if.then, %if.else, %entry - %count.0 = phi i32 [ 0, %entry ], [ %add, %if.then ], [ %add2, %if.else ] - %cmp = icmp ugt i32 %count.0, %n - br i1 %cmp, label %while.end, label %while.body - -while.body: ; preds = %while.cond - %rem = and i32 %count.0, 1 - %cmp1 = icmp eq i32 %rem, 0 - br i1 %cmp1, label %if.then, label %if.else - -if.then: ; preds = %while.body - %add = add i32 %count.0, 1 - br label %while.cond, !llvm.loop !0 - -if.else: ; preds = %while.body - %add2 = add i32 %count.0, 2 - br label %while.cond, !llvm.loop !0 - -while.end: ; preds = %while.cond - ret void -} - -; CHECK: if.then -; CHECK-NOT: br {{.*}}!llvm.loop{{.*}} - -; CHECK: while.cond.backedge: -; CHECK: br label %while.cond, !llvm.loop !0 - -; CHECK: if.else -; CHECK-NOT: br {{.*}}!llvm.loop{{.*}} - -; CHECK-LABEL: @test2 -; CHECK: for.body: -; CHECK: br i1 %{{.*}}, label %for.body, label %cleanup.loopexit, !llvm.loop !0 -define void @test2(i32 %k) { -entry: - %cmp9 = icmp sgt i32 %k, 0 - br i1 %cmp9, label %for.body.preheader, label %cleanup - -for.body.preheader: ; preds = %entry - br label %for.body - -for.cond: ; preds = %for.body - %cmp = icmp slt i32 %inc, %k - br i1 %cmp, label %for.body, label %cleanup.loopexit, !llvm.loop !0 - -for.body: ; preds = %for.body.preheader, %for.cond - %i.010 = phi i32 [ %inc, %for.cond ], [ 0, %for.body.preheader ] - %cmp3 = icmp sgt i32 %i.010, 3 - %inc = add nsw i32 %i.010, 1 - br i1 %cmp3, label %cleanup.loopexit, label %for.cond - -cleanup.loopexit: ; preds = %for.body, %for.cond - br label %cleanup - -cleanup: ; preds = %cleanup.loopexit, %entry - ret void -} - -!0 = distinct !{!0, !1} -!1 = !{!"llvm.loop.distribute.enable", i1 true} -; CHECK: !0 = distinct !{!0, !1} -; CHECK: !1 = !{!"llvm.loop.distribute.enable", i1 true} diff --git a/llvm/test/Transforms/LoopSimplify/preserve-scev.ll b/llvm/test/Transforms/LoopSimplify/preserve-scev.ll deleted file mode 100644 index 07486ef2468..00000000000 --- a/llvm/test/Transforms/LoopSimplify/preserve-scev.ll +++ /dev/null @@ -1,180 +0,0 @@ -; RUN: opt -S < %s -analyze -scalar-evolution -loop-simplify -scalar-evolution | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - -@maxStat = external global i32 - -; LoopSimplify should invalidate SCEV when splitting out the -; inner loop. -; -; First SCEV print: -; CHECK-LABEL: Classifying expressions for: @test -; CHECK: %[[PHI:.*]] = phi i32 [ 0, %entry ], [ %{{.*}}, %if.then5 ], [ %[[PHI]], %if.end ] -; CHECK-LABEL: Determining loop execution counts for: @test -; CHECK: Loop %for.body18: Unpredictable backedge-taken count. -; CHECK: Loop %for.body18: max backedge-taken count is 2147483646 -; CHECK: Loop %for.body18: Unpredictable predicated backedge-taken count. -; CHECK: Loop %for.cond: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %for.cond: Unpredictable max backedge-taken count. -; CHECK: Loop %for.cond: Unpredictable predicated backedge-taken count. -; -; Now simplify the loop, which should cause SCEV to re-compute more precise -; info here in addition to having preheader PHIs. Second SCEV print: -; CHECK-LABEL: Classifying expressions for: @test -; CHECK: phi i32 [ %{{.*}}, %if.then5 ], [ 0, %entry ] -; CHECK-LABEL: Determining loop execution counts for: @test -; CHECK: Loop %for.body18: Unpredictable backedge-taken count. -; CHECK: Loop %for.body18: max backedge-taken count is 2147483646 -; CHECK: Loop %for.body18: Unpredictable predicated backedge-taken count. -; CHECK: Loop %for.cond: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %for.cond: max backedge-taken count is -2147483647 -; CHECK: Loop %for.cond: Unpredictable predicated backedge-taken count. -; CHECK: Loop %for.cond.outer: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %for.cond.outer: Unpredictable max backedge-taken count. -; CHECK: Loop %for.cond.outer: Unpredictable predicated backedge-taken count. -define i32 @test() nounwind { -entry: - br label %for.cond - -for.cond: ; preds = %if.then5, %if.end, %entry - %cuts.1 = phi i32 [ 0, %entry ], [ %inc, %if.then5 ], [ %cuts.1, %if.end ] - %0 = phi i32 [ 0, %entry ], [ %add, %if.end ], [ %add, %if.then5 ] - %add = add i32 %0, 1 - %cmp = icmp slt i32 %0, 1 - %tmp1 = load i32, i32* @maxStat, align 4 - br i1 %cmp, label %for.body, label %for.cond14.preheader - -for.cond14.preheader: ; preds = %for.cond - %cmp1726 = icmp sgt i32 %tmp1, 0 - br i1 %cmp1726, label %for.body18, label %return - -for.body: ; preds = %for.cond - %cmp2 = icmp sgt i32 %tmp1, 100 - br i1 %cmp2, label %return, label %if.end - -if.end: ; preds = %for.body - %cmp4 = icmp sgt i32 %tmp1, -1 - br i1 %cmp4, label %if.then5, label %for.cond - -if.then5: ; preds = %if.end - call void @foo() nounwind - %inc = add i32 %cuts.1, 1 - br label %for.cond - -for.body18: ; preds = %for.body18, %for.cond14.preheader - %i13.027 = phi i32 [ %1, %for.body18 ], [ 0, %for.cond14.preheader ] - call void @foo() nounwind - %1 = add nsw i32 %i13.027, 1 - %tmp16 = load i32, i32* @maxStat, align 4 - %cmp17 = icmp slt i32 %1, %tmp16 - br i1 %cmp17, label %for.body18, label %return - -return: ; preds = %for.body18, %for.body, %for.cond14.preheader - ret i32 0 -} - -declare void @foo() nounwind - -; Notify SCEV when removing an ExitingBlock. This only changes the -; backedge-taken information. -; -; First SCEV print: -; CHECK-LABEL: Determining loop execution counts for: @mergeExit -; CHECK: Loop %while.cond191: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %while.cond191: max backedge-taken count is -1 -; CHECK: Loop %while.cond191: Unpredictable predicated backedge-taken count. -; CHECK: Loop %while.cond191.outer: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %while.cond191.outer: Unpredictable max backedge-taken count. -; CHECK: Loop %while.cond191.outer: Unpredictable predicated backedge-taken count. -; -; After simplifying, the max backedge count is refined. -; Second SCEV print: -; CHECK-LABEL: Determining loop execution counts for: @mergeExit -; CHECK: Loop %while.cond191: <multiple exits> backedge-taken count is 0 -; CHECK: Loop %while.cond191: max backedge-taken count is 0 -; CHECK: Loop %while.cond191: Predicated backedge-taken count is 0 -; CHECK: Loop %while.cond191.outer: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %while.cond191.outer: max backedge-taken count is false -; CHECK: Loop %while.cond191.outer: Unpredictable predicated backedge-taken count. -define void @mergeExit(i32 %MapAttrCount) nounwind uwtable ssp { -entry: - br i1 undef, label %if.then124, label %if.end126 - -if.then124: ; preds = %entry - unreachable - -if.end126: ; preds = %entry - br i1 undef, label %while.body.lr.ph, label %if.end591 - -while.body.lr.ph: ; preds = %if.end126 - br i1 undef, label %if.end140, label %if.then137 - -if.then137: ; preds = %while.body.lr.ph - unreachable - -if.end140: ; preds = %while.body.lr.ph - br i1 undef, label %while.cond191.outer, label %if.then148 - -if.then148: ; preds = %if.end140 - unreachable - -while.cond191.outer: ; preds = %if.then205, %if.end140 - br label %while.cond191 - -while.cond191: ; preds = %while.body197, %while.cond191.outer - %CppIndex.0 = phi i32 [ %inc, %while.body197 ], [ undef, %while.cond191.outer ] - br i1 undef, label %land.rhs, label %if.then216 - -land.rhs: ; preds = %while.cond191 - %inc = add i32 %CppIndex.0, 1 - %cmp196 = icmp ult i32 %inc, %MapAttrCount - br i1 %cmp196, label %while.body197, label %if.then216 - -while.body197: ; preds = %land.rhs - br i1 undef, label %if.then205, label %while.cond191 - -if.then205: ; preds = %while.body197 - br label %while.cond191.outer - -if.then216: ; preds = %land.rhs, %while.cond191 - br i1 undef, label %if.else, label %if.then221 - -if.then221: ; preds = %if.then216 - unreachable - -if.else: ; preds = %if.then216 - br i1 undef, label %if.then266, label %if.end340 - -if.then266: ; preds = %if.else - switch i32 undef, label %if.else329 [ - i32 17, label %if.then285 - i32 19, label %if.then285 - i32 18, label %if.then285 - i32 15, label %if.then285 - ] - -if.then285: ; preds = %if.then266, %if.then266, %if.then266, %if.then266 - br i1 undef, label %if.then317, label %if.else324 - -if.then317: ; preds = %if.then285 - br label %if.end340 - -if.else324: ; preds = %if.then285 - unreachable - -if.else329: ; preds = %if.then266 - unreachable - -if.end340: ; preds = %if.then317, %if.else - unreachable - -if.end591: ; preds = %if.end126 - br i1 undef, label %cond.end, label %cond.false - -cond.false: ; preds = %if.end591 - unreachable - -cond.end: ; preds = %if.end591 - ret void -} diff --git a/llvm/test/Transforms/LoopSimplify/single-backedge.ll b/llvm/test/Transforms/LoopSimplify/single-backedge.ll deleted file mode 100644 index 7739b33d0de..00000000000 --- a/llvm/test/Transforms/LoopSimplify/single-backedge.ll +++ /dev/null @@ -1,44 +0,0 @@ -; The loop canonicalization pass should guarantee that there is one backedge -; for all loops. This allows the -indvars pass to recognize the %IV -; induction variable in this testcase. - -; RUN: opt < %s -indvars -S | FileCheck %s -; CHECK: Loop.backedge: -; CHECK-NOT: br -; CHECK: br label %Loop, !dbg [[BACKEDGE_LOC:![0-9]+]] - -; CHECK: [[BACKEDGE_LOC]] = !DILocation(line: 101, column: 1, scope: !{{.*}}) - -define i32 @test(i1 %C) { -; <label>:0 - br label %Loop, !dbg !6 -Loop: ; preds = %BE2, %BE1, %0 - %IV = phi i32 [ 1, %0 ], [ %IV2, %BE1 ], [ %IV2, %BE2 ] ; <i32> [#uses=2] - store i32 %IV, i32* null, !dbg !7 - %IV2 = add i32 %IV, 2, !dbg !8 ; <i32> [#uses=2] - br i1 %C, label %BE1, label %BE2, !dbg !9 -BE1: ; preds = %Loop - br label %Loop, !dbg !10 -BE2: ; preds = %n br label %Loop - br label %Loop, !dbg !11 -} - -!llvm.module.flags = !{!0, !1} -!llvm.dbg.cu = !{!12} -!0 = !{i32 2, !"Dwarf Version", i32 4} -!1 = !{i32 2, !"Debug Info Version", i32 3} - -!2 = !{} -!3 = !DISubroutineType(types: !2) -!4 = !DIFile(filename: "atomic.cpp", directory: "/tmp") -!5 = distinct !DISubprogram(name: "test", scope: !4, file: !4, line: 99, type: !3, isLocal: false, isDefinition: true, scopeLine: 100, flags: DIFlagPrototyped, isOptimized: false, unit: !12, retainedNodes: !2) -!6 = !DILocation(line: 100, column: 1, scope: !5) -!7 = !DILocation(line: 101, column: 1, scope: !5) -!8 = !DILocation(line: 102, column: 1, scope: !5) -!9 = !DILocation(line: 103, column: 1, scope: !5) -!10 = !DILocation(line: 104, column: 1, scope: !5) -!11 = !DILocation(line: 105, column: 1, scope: !5) -!12 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", - file: !4, - isOptimized: true, flags: "-O2", - splitDebugFilename: "abc.debug", emissionKind: 2) diff --git a/llvm/test/Transforms/LoopSimplify/unreachable-loop-pred.ll b/llvm/test/Transforms/LoopSimplify/unreachable-loop-pred.ll deleted file mode 100644 index 1e92ee4ee3b..00000000000 --- a/llvm/test/Transforms/LoopSimplify/unreachable-loop-pred.ll +++ /dev/null @@ -1,69 +0,0 @@ -; RUN: opt -S -loop-simplify -disable-output -verify-loop-info -verify-dom-info < %s -; PR5235 - -; When loopsimplify inserts a preheader for this loop, it should add the new -; block to the enclosing loop and not get confused by the unreachable -; bogus loop entry. - -define void @is_extract_cab() nounwind { -entry: - br label %header - -header: ; preds = %if.end206, %cond.end66, %if.end23 - br label %while.body115 - -while.body115: ; preds = %9, %if.end192, %if.end101 - br i1 undef, label %header, label %while.body115 - -foo: - br label %while.body115 -} - -; When loopsimplify generates dedicated exit block for blocks that are landing -; pads (i.e. innerLoopExit in this test), we should not get confused with the -; unreachable pred (unreachableB) to innerLoopExit. -define align 8 void @baz(i32 %trip) personality i32* ()* @wobble { -entry: - br label %outerHeader - -outerHeader: - invoke void @foo() - to label %innerPreheader unwind label %innerLoopExit - -innerPreheader: - br label %innerH - -innerH: - %tmp50 = invoke i8 * undef() - to label %innerLatch unwind label %innerLoopExit - -innerLatch: - %cmp = icmp slt i32 %trip, 42 - br i1 %cmp, label %innerH, label %retblock - -unreachableB: ; No predecessors! - %tmp62 = invoke i8 * undef() - to label %retblock unwind label %innerLoopExit - -; undedicated exit block (preds from inner and outer loop) -; Also has unreachableB as pred. -innerLoopExit: - %tmp65 = landingpad { i8*, i32 } - cleanup - invoke void @foo() - to label %outerHeader unwind label %unwindblock - -unwindblock: - %tmp67 = landingpad { i8*, i32 } - cleanup - ret void - -retblock: - ret void -} - -; Function Attrs: nounwind -declare i32* @wobble() - -; Function Attrs: uwtable -declare void @foo() |

