diff options
Diffstat (limited to 'test/Transforms/InstCombine/load.ll')
-rw-r--r-- | test/Transforms/InstCombine/load.ll | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/load.ll b/test/Transforms/InstCombine/load.ll new file mode 100644 index 0000000..75c62a8 --- /dev/null +++ b/test/Transforms/InstCombine/load.ll @@ -0,0 +1,87 @@ +; This test makes sure that these instructions are properly eliminated. +; +; RUN: opt < %s -instcombine -S | not grep load + +@X = constant i32 42 ; <i32*> [#uses=2] +@X2 = constant i32 47 ; <i32*> [#uses=1] +@Y = constant [2 x { i32, float }] [ { i32, float } { i32 12, float 1.000000e+00 }, { i32, float } { i32 37, float 0x3FF3B2FEC0000000 } ] ; <[2 x { i32, float }]*> [#uses=2] +@Z = constant [2 x { i32, float }] zeroinitializer ; <[2 x { i32, float }]*> [#uses=1] + +define i32 @test1() { + %B = load i32* @X ; <i32> [#uses=1] + ret i32 %B +} + +define float @test2() { + %A = getelementptr [2 x { i32, float }]* @Y, i64 0, i64 1, i32 1 ; <float*> [#uses=1] + %B = load float* %A ; <float> [#uses=1] + ret float %B +} + +define i32 @test3() { + %A = getelementptr [2 x { i32, float }]* @Y, i64 0, i64 0, i32 0 ; <i32*> [#uses=1] + %B = load i32* %A ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @test4() { + %A = getelementptr [2 x { i32, float }]* @Z, i64 0, i64 1, i32 0 ; <i32*> [#uses=1] + %B = load i32* %A ; <i32> [#uses=1] + ret i32 %B +} + +define i32 @test5(i1 %C) { + %Y = select i1 %C, i32* @X, i32* @X2 ; <i32*> [#uses=1] + %Z = load i32* %Y ; <i32> [#uses=1] + ret i32 %Z +} + +define i32 @test7(i32 %X) { + %V = getelementptr i32* null, i32 %X ; <i32*> [#uses=1] + %R = load i32* %V ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @test8(i32* %P) { + store i32 1, i32* %P + %X = load i32* %P ; <i32> [#uses=1] + ret i32 %X +} + +define i32 @test9(i32* %P) { + %X = load i32* %P ; <i32> [#uses=1] + %Y = load i32* %P ; <i32> [#uses=1] + %Z = sub i32 %X, %Y ; <i32> [#uses=1] + ret i32 %Z +} + +define i32 @test10(i1 %C.upgrd.1, i32* %P, i32* %Q) { + br i1 %C.upgrd.1, label %T, label %F +T: ; preds = %0 + store i32 1, i32* %Q + store i32 0, i32* %P + br label %C +F: ; preds = %0 + store i32 0, i32* %P + br label %C +C: ; preds = %F, %T + %V = load i32* %P ; <i32> [#uses=1] + ret i32 %V +} + +define double @test11(double* %p) { + %t0 = getelementptr double* %p, i32 1 + store double 2.0, double* %t0 + %t1 = getelementptr double* %p, i32 1 + %x = load double* %t1 + ret double %x +} + +define i32 @test12(i32* %P) { + %A = alloca i32 + store i32 123, i32* %A + ; Cast the result of the load not the source + %Q = bitcast i32* %A to i32* + %V = load i32* %Q + ret i32 %V +} |