diff options
Diffstat (limited to 'llvm/test/Transforms/Reassociate/deadcode.ll')
-rw-r--r-- | llvm/test/Transforms/Reassociate/deadcode.ll | 37 |
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 +} |