diff options
Diffstat (limited to 'test/Transforms/SCCP/apint-load.ll')
-rw-r--r-- | test/Transforms/SCCP/apint-load.ll | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/Transforms/SCCP/apint-load.ll b/test/Transforms/SCCP/apint-load.ll new file mode 100644 index 0000000..56fdb35 --- /dev/null +++ b/test/Transforms/SCCP/apint-load.ll @@ -0,0 +1,36 @@ +; This test makes sure that these instructions are properly constant propagated. + +; RUN: opt < %s -ipsccp -S | not grep load +; RUN: opt < %s -ipsccp -S | not grep fdiv + +@X = constant i212 42 +@Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 }, + { i212, float } { i212 37, float 0x3FF3B2FEC0000000 } ] +define i212 @test1() { + %B = load i212* @X + ret i212 %B +} + +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 i212 @test3() { + %A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 0, i32 0 + %B = load i212* %A + ret i212 %B +} + +define float @All() +{ + %A = call float @test2() + %B = call i212 @test3() + %C = mul i212 %B, -1234567 + %D = sitofp i212 %C to float + %E = fdiv float %A, %D + ret float %E +} + + |