Mercurial > hg > CbC > CbC_llvm
comparison test/Analysis/BasicAA/store-promote.ll @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | 95c75e76d11b |
children |
comparison
equal
deleted
inserted
replaced
84:f3e34b893a5f | 95:afa8332a0e37 |
---|---|
8 @A = global i32 7 ; <i32*> [#uses=3] | 8 @A = global i32 7 ; <i32*> [#uses=3] |
9 @B = global i32 8 ; <i32*> [#uses=2] | 9 @B = global i32 8 ; <i32*> [#uses=2] |
10 @C = global [2 x i32] [ i32 4, i32 8 ] ; <[2 x i32]*> [#uses=2] | 10 @C = global [2 x i32] [ i32 4, i32 8 ] ; <[2 x i32]*> [#uses=2] |
11 | 11 |
12 define i32 @test1(i1 %c) { | 12 define i32 @test1(i1 %c) { |
13 %Atmp = load i32* @A ; <i32> [#uses=2] | 13 %Atmp = load i32, i32* @A ; <i32> [#uses=2] |
14 br label %Loop | 14 br label %Loop |
15 | 15 |
16 Loop: ; preds = %Loop, %0 | 16 Loop: ; preds = %Loop, %0 |
17 %ToRemove = load i32* @A ; <i32> [#uses=1] | 17 %ToRemove = load i32, i32* @A ; <i32> [#uses=1] |
18 store i32 %Atmp, i32* @B | 18 store i32 %Atmp, i32* @B |
19 br i1 %c, label %Out, label %Loop | 19 br i1 %c, label %Out, label %Loop |
20 | 20 |
21 Out: ; preds = %Loop | 21 Out: ; preds = %Loop |
22 %X = sub i32 %ToRemove, %Atmp ; <i32> [#uses=1] | 22 %X = sub i32 %ToRemove, %Atmp ; <i32> [#uses=1] |
23 ret i32 %X | 23 ret i32 %X |
24 | 24 |
25 ; The Loop block should be empty after the load/store are promoted. | 25 ; The Loop block should be empty after the load/store are promoted. |
26 ; CHECK: @test1 | 26 ; CHECK: @test1 |
27 ; CHECK: load i32* @A | 27 ; CHECK: load i32, i32* @A |
28 ; CHECK: Loop: | 28 ; CHECK: Loop: |
29 ; CHECK-NEXT: br i1 %c, label %Out, label %Loop | 29 ; CHECK-NEXT: br i1 %c, label %Out, label %Loop |
30 ; CHECK: Out: | 30 ; CHECK: Out: |
31 ; CHECK: store i32 %Atmp, i32* @B | 31 ; CHECK: store i32 %Atmp, i32* @B |
32 } | 32 } |
33 | 33 |
34 define i32 @test2(i1 %c) { | 34 define i32 @test2(i1 %c) { |
35 br label %Loop | 35 br label %Loop |
36 | 36 |
37 Loop: ; preds = %Loop, %0 | 37 Loop: ; preds = %Loop, %0 |
38 %AVal = load i32* @A ; <i32> [#uses=2] | 38 %AVal = load i32, i32* @A ; <i32> [#uses=2] |
39 %C0 = getelementptr [2 x i32]* @C, i64 0, i64 0 ; <i32*> [#uses=1] | 39 %C0 = getelementptr [2 x i32], [2 x i32]* @C, i64 0, i64 0 ; <i32*> [#uses=1] |
40 store i32 %AVal, i32* %C0 | 40 store i32 %AVal, i32* %C0 |
41 %BVal = load i32* @B ; <i32> [#uses=2] | 41 %BVal = load i32, i32* @B ; <i32> [#uses=2] |
42 %C1 = getelementptr [2 x i32]* @C, i64 0, i64 1 ; <i32*> [#uses=1] | 42 %C1 = getelementptr [2 x i32], [2 x i32]* @C, i64 0, i64 1 ; <i32*> [#uses=1] |
43 store i32 %BVal, i32* %C1 | 43 store i32 %BVal, i32* %C1 |
44 br i1 %c, label %Out, label %Loop | 44 br i1 %c, label %Out, label %Loop |
45 | 45 |
46 Out: ; preds = %Loop | 46 Out: ; preds = %Loop |
47 %X = sub i32 %AVal, %BVal ; <i32> [#uses=1] | 47 %X = sub i32 %AVal, %BVal ; <i32> [#uses=1] |