aboutsummaryrefslogtreecommitdiff
path: root/test/Transforms/LoopUnswitch
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2010-11-18 19:59:41 +0000
committerDuncan Sands <baldrick@free.fr>2010-11-18 19:59:41 +0000
commitd0c6f3dafd7c3e9137d4e6415014c94137fcd3fc (patch)
tree99b6f88540f7b3c4a552911c4020f9e8a42ab9eb /test/Transforms/LoopUnswitch
parent707120047e0107cb15dd4bbb31613df129b13c7a (diff)
Factor code for testing whether replacing one value with another
preserves LCSSA form out of ScalarEvolution and into the LoopInfo class. Use it to check that SimplifyInstruction simplifications are not breaking LCSSA form. Fixes PR8622. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119727 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/LoopUnswitch')
-rw-r--r--test/Transforms/LoopUnswitch/2010-11-18-LCSSA.ll28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/Transforms/LoopUnswitch/2010-11-18-LCSSA.ll b/test/Transforms/LoopUnswitch/2010-11-18-LCSSA.ll
new file mode 100644
index 0000000000..a976d18d44
--- /dev/null
+++ b/test/Transforms/LoopUnswitch/2010-11-18-LCSSA.ll
@@ -0,0 +1,28 @@
+; RUN: opt < %s -loop-unswitch
+; PR8622
+@g_38 = external global i32, align 4
+
+define void @func_67(i32 %p_68.coerce) nounwind {
+entry:
+ br i1 true, label %for.end12, label %bb.nph
+
+bb.nph: ; preds = %entry
+ %g_38.promoted = load i32* @g_38
+ br label %for.body
+
+for.body: ; preds = %for.cond, %bb.nph
+ %tobool.i = icmp eq i32 %p_68.coerce, 1
+ %xor4.i = xor i32 %p_68.coerce, 1
+ %call1 = select i1 %tobool.i, i32 0, i32 %xor4.i
+ br label %for.cond
+
+for.cond: ; preds = %for.body
+ br i1 true, label %for.cond.for.end12_crit_edge, label %for.body
+
+for.cond.for.end12_crit_edge: ; preds = %for.cond
+ store i32 %call1, i32* @g_38
+ br label %for.end12
+
+for.end12: ; preds = %for.cond.for.end12_crit_edge, %entry
+ ret void
+}