| ; RUN: opt < %s -passes=reassociate -S | |
| ; PR28367 | |
| ; Check to make sure this test does not assert or segfault. If we get too | |
| ; aggressive with retrying instructions it's possible to invalidate our | |
| ; iterator. See PR28367 for complete details. | |
| define void @fn1(i32 %a, i1 %c, ptr %ptr) { | |
| entry: | |
| br label %for.cond | |
| for.cond: | |
| %d.0 = phi i32 [ 1, %entry ], [ 2, %for.body ] | |
| br i1 %c, label %for.end, label %for.body | |
| for.body: | |
| %sub1 = sub i32 %a, %d.0 | |
| %dead1 = add i32 %sub1, 1 | |
| %dead2 = mul i32 %dead1, 3 | |
| %dead3 = mul i32 %dead2, %sub1 | |
| %sub2 = sub nsw i32 0, %d.0 | |
| store i32 %sub2, ptr %ptr, align 4 | |
| br label %for.cond | |
| for.end: | |
| ret void | |
| } |