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]