[PowerPC] Make AddrSpaceCast noop
[llvm-core.git] / test / Transforms / EarlyCSE / memoryssa.ll
blob1c10efe22937705c858f65b30600f1f841b1451c
1 ; RUN: opt < %s -S -early-cse | FileCheck %s --check-prefix=CHECK-NOMEMSSA
2 ; RUN: opt < %s -S -basicaa -early-cse-memssa | FileCheck %s
3 ; RUN: opt < %s -S -passes='early-cse' | FileCheck %s --check-prefix=CHECK-NOMEMSSA
4 ; RUN: opt < %s -S -aa-pipeline=basic-aa -passes='early-cse-memssa' | FileCheck %s
6 @G1 = global i32 zeroinitializer
7 @G2 = global i32 zeroinitializer
8 @G3 = global i32 zeroinitializer
10 ;; Simple load value numbering across non-clobbering store.
11 ; CHECK-LABEL: @test1(
12 ; CHECK-NOMEMSSA-LABEL: @test1(
13 define i32 @test1() {
14   %V1 = load i32, i32* @G1
15   store i32 0, i32* @G2
16   %V2 = load i32, i32* @G1
17   ; CHECK-NOMEMSSA: sub i32 %V1, %V2
18   %Diff = sub i32 %V1, %V2
19   ret i32 %Diff
20   ; CHECK: ret i32 0
23 ;; Simple dead store elimination across non-clobbering store.
24 ; CHECK-LABEL: @test2(
25 ; CHECK-NOMEMSSA-LABEL: @test2(
26 define void @test2() {
27 entry:
28   %V1 = load i32, i32* @G1
29   ; CHECK: store i32 0, i32* @G2
30   store i32 0, i32* @G2
31   ; CHECK-NOT: store
32   ; CHECK-NOMEMSSA: store i32 %V1, i32* @G1
33   store i32 %V1, i32* @G1
34   ret void
37 ;; Check that memoryphi optimization happens during EarlyCSE, enabling
38 ;; more load CSE opportunities.
39 ; CHECK-LABEL: @test_memphiopt(
40 ; CHECK-NOMEMSSA-LABEL: @test_memphiopt(
41 define void @test_memphiopt(i1 %c, i32* %p) {
42 ; CHECK-LABEL: entry:
43 ; CHECK-NOMEMSSA-LABEL: entry:
44 entry:
45 ; CHECK: load
46 ; CHECK-NOMEMSSA: load
47   %v1 = load i32, i32* @G1
48   br i1 %c, label %then, label %end
50 ; CHECK-LABEL: then:
51 ; CHECK-NOMEMSSA-LABEL: then:
52 then:
53 ; CHECK: load
54 ; CHECK-NOMEMSSA: load
55   %pv = load i32, i32* %p
56 ; CHECK-NOT: store
57 ; CHECK-NOMEMSSA-NOT: store
58   store i32 %pv, i32* %p
59   br label %end
61 ; CHECK-LABEL: end:
62 ; CHECK-NOMEMSSA-LABEL: end:
63 end:
64 ; CHECK-NOT: load
65 ; CHECK-NOMEMSSA: load
66   %v2 = load i32, i32* @G1
67   %sum = add i32 %v1, %v2
68   store i32 %sum, i32* @G2
69   ret void
73 ;; Check that MemoryPhi optimization and MemoryUse re-optimization
74 ;; happens during EarlyCSE, enabling more load CSE opportunities.
75 ; CHECK-LABEL: @test_memphiopt2(
76 ; CHECK-NOMEMSSA-LABEL: @test_memphiopt2(
77 define void @test_memphiopt2(i1 %c, i32* %p) {
78 ; CHECK-LABEL: entry:
79 ; CHECK-NOMEMSSA-LABEL: entry:
80 entry:
81 ; CHECK: load
82 ; CHECK-NOMEMSSA: load
83   %v1 = load i32, i32* @G1
84 ; CHECK: store
85 ; CHECK-NOMEMSSA: store
86   store i32 %v1, i32* @G2
87   br i1 %c, label %then, label %end
89 ; CHECK-LABEL: then:
90 ; CHECK-NOMEMSSA-LABEL: then:
91 then:
92 ; CHECK: load
93 ; CHECK-NOMEMSSA: load
94   %pv = load i32, i32* %p
95 ; CHECK-NOT: store
96 ; CHECK-NOMEMSSA-NOT: store
97   store i32 %pv, i32* %p
98   br label %end
100 ; CHECK-LABEL: end:
101 ; CHECK-NOMEMSSA-LABEL: end:
102 end:
103 ; CHECK-NOT: load
104 ; CHECK-NOMEMSSA: load
105   %v2 = load i32, i32* @G1
106   store i32 %v2, i32* @G3
107   ret void