diff options
Diffstat (limited to 'test/Transforms/ArgumentPromotion/chained.ll')
-rw-r--r-- | test/Transforms/ArgumentPromotion/chained.ll | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/test/Transforms/ArgumentPromotion/chained.ll b/test/Transforms/ArgumentPromotion/chained.ll index 6ba2e8d486940..028c6c426e523 100644 --- a/test/Transforms/ArgumentPromotion/chained.ll +++ b/test/Transforms/ArgumentPromotion/chained.ll @@ -1,17 +1,27 @@ -; RUN: opt < %s -argpromotion -instcombine -S | not grep load -target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" +; RUN: opt < %s -argpromotion -S | FileCheck %s +; RUN: opt < %s -passes=argpromotion -S | FileCheck %s -@G1 = constant i32 0 ; <i32*> [#uses=1] -@G2 = constant i32* @G1 ; <i32**> [#uses=1] +@G1 = constant i32 0 +@G2 = constant i32* @G1 -define internal i32 @test(i32** %X) { - %Y = load i32*, i32** %X ; <i32*> [#uses=1] - %X.upgrd.1 = load i32, i32* %Y ; <i32> [#uses=1] - ret i32 %X.upgrd.1 +define internal i32 @test(i32** %x) { +; CHECK-LABEL: define internal i32 @test( +; CHECK: i32 %{{.*}}) +entry: + %y = load i32*, i32** %x + %z = load i32, i32* %y +; CHECK-NOT: load + ret i32 %z +; CHECK: ret i32 } -define i32 @caller(i32** %P) { - %X = call i32 @test( i32** @G2 ) ; <i32> [#uses=1] - ret i32 %X +define i32 @caller() { +; CHECK-LABEL: define i32 @caller() +entry: + %x = call i32 @test(i32** @G2) +; CHECK: %[[Y:.*]] = load i32*, i32** @G2 +; CHECK: %[[Z:.*]] = load i32, i32* %[[Y]] +; CHECK: call i32 @test(i32 %[[Z]]) + ret i32 %x } |