| ; RUN: opt < %s -passes=reassociate -disable-output |
| |
| ; It has been detected that dead loops like the one in this test case can be |
| ; created by -passes=jump-threading (it was detected by a csmith generated program). |
| ; |
| ; According to -passes=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 -passes=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 |
| } |