mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-24 22:32:47 +00:00
32 lines
662 B
LLVM
32 lines
662 B
LLVM
|
; 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
|
||
|
}
|