diff options
Diffstat (limited to 'llvm/test/Transforms/InstCombine/phi.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/phi.ll | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/phi.ll b/llvm/test/Transforms/InstCombine/phi.ll new file mode 100644 index 00000000000..44841b76431 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/phi.ll @@ -0,0 +1,79 @@ +; This test makes sure that these instructions are properly eliminated. +; + +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -disable-output && +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep phi + +implementation + +int %test1(int %A, bool %b) { +BB0: br bool %b, label %BB1, label %BB2 +BB1: + %B = phi int [%A, %BB0] ; Combine away one argument PHI nodes + ret int %B +BB2: + ret int %A +} + +int %test2(int %A, bool %b) { +BB0: br bool %b, label %BB1, label %BB2 +BB1: + br label %BB2 +BB2: + %B = phi int [%A, %BB0], [%A, %BB1] ; Combine away PHI nodes with same values + ret int %B +} + +int %test3(int %A, bool %b) { +BB0: br label %Loop + +Loop: + %B = phi int [%A, %BB0], [%B, %Loop] ; PHI has same value always. + br bool %b, label %Loop, label %Exit +Exit: + ret int %B +} + +int %test4(bool %b) { +BB0: ret int 7 ; Loop is unreachable + +Loop: + %B = phi int [%B, %L2], [%B, %Loop] ; PHI has same value always. + br bool %b, label %L2, label %Loop +L2: + br label %Loop +} + +int %test5(int %A, bool %b) { +BB0: br label %Loop + +Loop: + %B = phi int [%A, %BB0], [undef, %Loop] ; PHI has same value always. + br bool %b, label %Loop, label %Exit +Exit: + ret int %B +} + +uint %test6(int %A, bool %b) { +BB0: + %X = cast int %A to uint + br bool %b, label %BB1, label %BB2 +BB1: + %Y = cast int %A to uint + br label %BB2 +BB2: + %B = phi uint [%X, %BB0], [%Y, %BB1] ;; Suck casts into phi + ret uint %B +} + +int %test7(int %A, bool %b) { +BB0: br label %Loop + +Loop: + %B = phi int [%A, %BB0], [%C, %Loop] ; PHI is dead. + %C = add int %B, 123 + br bool %b, label %Loop, label %Exit +Exit: + ret int 0 +} + |