summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/Reassociate/deadcode.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/Reassociate/deadcode.ll')
-rw-r--r--llvm/test/Transforms/Reassociate/deadcode.ll37
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Reassociate/deadcode.ll b/llvm/test/Transforms/Reassociate/deadcode.ll
new file mode 100644
index 00000000000..866cf64d2a1
--- /dev/null
+++ b/llvm/test/Transforms/Reassociate/deadcode.ll
@@ -0,0 +1,37 @@
+; RUN: opt < %s -reassociate -disable-output
+
+; It has been detected that dead loops like the one in this test case can be
+; created by -jump-threading (it was detected by a csmith generated program).
+;
+; According to -verify this is valid input (even if it could be discussed if
+; the dead loop really satisfies SSA form).
+;
+; The problem found was that the -reassociate pass ends up in an infinite loop
+; when analysing the 'deadloop1' basic block. See "Bugzilla - Bug 30818".
+define void @deadloop1() {
+ br label %endlabel
+
+deadloop1:
+ %1 = xor i32 %2, 7
+ %2 = xor i32 %1, 8
+ br label %deadloop1
+
+endlabel:
+ ret void
+}
+
+
+; Another example showing that dead code could result in infinite loops in
+; reassociate pass. See "Bugzilla - Bug 30818".
+define void @deadloop2() {
+ br label %endlabel
+
+deadloop2:
+ %1 = and i32 %2, 7
+ %2 = and i32 %3, 8
+ %3 = and i32 %1, 6
+ br label %deadloop2
+
+endlabel:
+ ret void
+}
OpenPOWER on IntegriCloud