| ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep {phi i32} |
| ; PR1777 |
| |
| declare i1 @rrr() |
| |
| define i1 @zxcv() { |
| entry: |
| %a = alloca i32 |
| %i = ptrtoint i32* %a to i32 |
| %b = call i1 @rrr() |
| br i1 %b, label %one, label %two |
| |
| one: |
| %x = phi i32 [%i, %entry], [%y, %two] |
| %c = call i1 @rrr() |
| br i1 %c, label %two, label %end |
| |
| two: |
| %y = phi i32 [%i, %entry], [%x, %one] |
| %d = call i1 @rrr() |
| br i1 %d, label %one, label %end |
| |
| end: |
| %f = phi i32 [ %x, %one], [%y, %two] |
| ; Change the %f to %i, and the optimizer suddenly becomes a lot smarter |
| ; even though %f must equal %i at this point |
| %g = inttoptr i32 %f to i32* |
| store i32 10, i32* %g |
| %z = call i1 @rrr() |
| ret i1 %z |
| } |