diff options
Diffstat (limited to 'llvm/test/Transforms/SCCP/apint-ipsccp4.ll')
-rw-r--r-- | llvm/test/Transforms/SCCP/apint-ipsccp4.ll | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SCCP/apint-ipsccp4.ll b/llvm/test/Transforms/SCCP/apint-ipsccp4.ll new file mode 100644 index 00000000000..67d99e4c34d --- /dev/null +++ b/llvm/test/Transforms/SCCP/apint-ipsccp4.ll @@ -0,0 +1,51 @@ +; This test makes sure that these instructions are properly constant propagated. +; + +; RUN: llvm-as < %s | opt -ipsccp | llvm-dis -o /dev/null -f && +; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep load +; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep add +; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep phi + + +@Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 }, + { i212, float } { i212 37, float 2.0 } ] + +define internal float @test2() { + %A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 1, i32 1 + %B = load float* %A + ret float %B +} + +define internal float @test3() { + %A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 0, i32 1 + %B = load float* %A + ret float %B +} + +define internal float @test() +{ + %A = call float @test2() + %B = call float @test3() + + %E = fdiv float %B, %A + ret float %E +} + +define float @All() +{ + %A = call float @test() + %B = fcmp oge float %A, 1.0 + br i1 %B, label %T, label %F +T: + %C = add float %A, 1.0 + br label %exit +F: + %D = add float %A, 2.0 + br label %exit +exit: + %E = phi float [%C, %T], [%D, %F] + ret float %E +} + + + |