|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
1 | 2 | ; RUN: opt -instcombine -early-cse -earlycse-debug-hash -S < %s | FileCheck %s
|
2 | 3 |
|
3 |
| - |
4 |
| -; CHECK-LABEL: define i8* @simplifyNullLaunder() |
5 | 4 | define i8* @simplifyNullLaunder() {
|
6 |
| -; CHECK-NEXT: ret i8* null |
| 5 | +; CHECK-LABEL: @simplifyNullLaunder( |
| 6 | +; CHECK-NEXT: ret i8* null |
| 7 | +; |
7 | 8 | %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* null)
|
8 | 9 | ret i8* %b2
|
9 | 10 | }
|
10 | 11 |
|
11 |
| -; CHECK-LABEL: define i8* @dontSimplifyNullLaunderNoNullOpt() |
12 | 12 | define i8* @dontSimplifyNullLaunderNoNullOpt() #0 {
|
13 |
| -; CHECK-NEXT: call i8* @llvm.launder.invariant.group.p0i8(i8* null) |
| 13 | +; CHECK-LABEL: @dontSimplifyNullLaunderNoNullOpt( |
| 14 | +; CHECK-NEXT: [[B2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* null) |
| 15 | +; CHECK-NEXT: ret i8* [[B2]] |
| 16 | +; |
14 | 17 | %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* null)
|
15 | 18 | ret i8* %b2
|
16 | 19 | }
|
17 | 20 |
|
18 |
| -; CHECK-LABEL: define i8 addrspace(42)* @dontsimplifyNullLaunderForDifferentAddrspace() |
19 | 21 | define i8 addrspace(42)* @dontsimplifyNullLaunderForDifferentAddrspace() {
|
20 |
| -; CHECK: %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null) |
21 |
| -; CHECK: ret i8 addrspace(42)* %b2 |
| 22 | +; CHECK-LABEL: @dontsimplifyNullLaunderForDifferentAddrspace( |
| 23 | +; CHECK-NEXT: [[B2:%.*]] = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null) |
| 24 | +; CHECK-NEXT: ret i8 addrspace(42)* [[B2]] |
| 25 | +; |
22 | 26 | %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null)
|
23 | 27 | ret i8 addrspace(42)* %b2
|
24 | 28 | }
|
25 | 29 |
|
26 |
| -; CHECK-LABEL: define i8* @simplifyUndefLaunder() |
27 | 30 | define i8* @simplifyUndefLaunder() {
|
28 |
| -; CHECK-NEXT: ret i8* undef |
| 31 | +; CHECK-LABEL: @simplifyUndefLaunder( |
| 32 | +; CHECK-NEXT: ret i8* undef |
| 33 | +; |
29 | 34 | %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* undef)
|
30 | 35 | ret i8* %b2
|
31 | 36 | }
|
32 | 37 |
|
33 |
| -; CHECK-LABEL: define i8 addrspace(42)* @simplifyUndefLaunder2() |
34 | 38 | define i8 addrspace(42)* @simplifyUndefLaunder2() {
|
35 |
| -; CHECK-NEXT: ret i8 addrspace(42)* undef |
| 39 | +; CHECK-LABEL: @simplifyUndefLaunder2( |
| 40 | +; CHECK-NEXT: ret i8 addrspace(42)* undef |
| 41 | +; |
36 | 42 | %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* undef)
|
37 | 43 | ret i8 addrspace(42)* %b2
|
38 | 44 | }
|
39 | 45 |
|
40 |
| -; CHECK-LABEL: define i8* @simplifyNullStrip() |
41 | 46 | define i8* @simplifyNullStrip() {
|
42 |
| -; CHECK-NEXT: ret i8* null |
| 47 | +; CHECK-LABEL: @simplifyNullStrip( |
| 48 | +; CHECK-NEXT: ret i8* null |
| 49 | +; |
43 | 50 | %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* null)
|
44 | 51 | ret i8* %b2
|
45 | 52 | }
|
46 | 53 |
|
47 |
| -; CHECK-LABEL: define i8* @dontSimplifyNullStripNonNullOpt() |
48 | 54 | define i8* @dontSimplifyNullStripNonNullOpt() #0 {
|
49 |
| -; CHECK-NEXT: call i8* @llvm.strip.invariant.group.p0i8(i8* null) |
| 55 | +; CHECK-LABEL: @dontSimplifyNullStripNonNullOpt( |
| 56 | +; CHECK-NEXT: [[B2:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* null) |
| 57 | +; CHECK-NEXT: ret i8* [[B2]] |
| 58 | +; |
50 | 59 | %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* null)
|
51 | 60 | ret i8* %b2
|
52 | 61 | }
|
53 | 62 |
|
54 |
| -; CHECK-LABEL: define i8 addrspace(42)* @dontsimplifyNullStripForDifferentAddrspace() |
55 | 63 | define i8 addrspace(42)* @dontsimplifyNullStripForDifferentAddrspace() {
|
56 |
| -; CHECK: %b2 = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* null) |
57 |
| -; CHECK: ret i8 addrspace(42)* %b2 |
| 64 | +; CHECK-LABEL: @dontsimplifyNullStripForDifferentAddrspace( |
| 65 | +; CHECK-NEXT: [[B2:%.*]] = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* null) |
| 66 | +; CHECK-NEXT: ret i8 addrspace(42)* [[B2]] |
| 67 | +; |
58 | 68 | %b2 = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* null)
|
59 | 69 | ret i8 addrspace(42)* %b2
|
60 | 70 | }
|
61 | 71 |
|
62 |
| -; CHECK-LABEL: define i8* @simplifyUndefStrip() |
63 | 72 | define i8* @simplifyUndefStrip() {
|
64 |
| -; CHECK-NEXT: ret i8* undef |
| 73 | +; CHECK-LABEL: @simplifyUndefStrip( |
| 74 | +; CHECK-NEXT: ret i8* undef |
| 75 | +; |
65 | 76 | %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* undef)
|
66 | 77 | ret i8* %b2
|
67 | 78 | }
|
68 | 79 |
|
69 |
| -; CHECK-LABEL: define i8 addrspace(42)* @simplifyUndefStrip2() |
70 | 80 | define i8 addrspace(42)* @simplifyUndefStrip2() {
|
71 |
| -; CHECK-NEXT: ret i8 addrspace(42)* undef |
| 81 | +; CHECK-LABEL: @simplifyUndefStrip2( |
| 82 | +; CHECK-NEXT: ret i8 addrspace(42)* undef |
| 83 | +; |
72 | 84 | %b2 = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* undef)
|
73 | 85 | ret i8 addrspace(42)* %b2
|
74 | 86 | }
|
75 | 87 |
|
76 |
| -; CHECK-LABEL: define i8* @simplifyLaunderOfLaunder( |
77 | 88 | define i8* @simplifyLaunderOfLaunder(i8* %a) {
|
78 |
| -; CHECK: call i8* @llvm.launder.invariant.group.p0i8(i8* %a) |
79 |
| -; CHECK-NOT: llvm.launder.invariant.group |
| 89 | +; CHECK-LABEL: @simplifyLaunderOfLaunder( |
| 90 | +; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* [[A:%.*]]) |
| 91 | +; CHECK-NEXT: ret i8* [[TMP1]] |
| 92 | +; |
80 | 93 | %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
|
81 | 94 | %a3 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a2)
|
82 | 95 | ret i8* %a3
|
83 | 96 | }
|
84 | 97 |
|
85 |
| -; CHECK-LABEL: define i8* @simplifyStripOfLaunder( |
86 | 98 | define i8* @simplifyStripOfLaunder(i8* %a) {
|
87 |
| -; CHECK-NOT: llvm.launder.invariant.group |
88 |
| -; CHECK: call i8* @llvm.strip.invariant.group.p0i8(i8* %a) |
| 99 | +; CHECK-LABEL: @simplifyStripOfLaunder( |
| 100 | +; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]]) |
| 101 | +; CHECK-NEXT: ret i8* [[TMP1]] |
| 102 | +; |
89 | 103 | %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
|
90 | 104 | %a3 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a2)
|
91 | 105 | ret i8* %a3
|
92 | 106 | }
|
93 | 107 |
|
94 |
| -; CHECK-LABEL: define i1 @simplifyForCompare( |
95 | 108 | define i1 @simplifyForCompare(i8* %a) {
|
| 109 | +; CHECK-LABEL: @simplifyForCompare( |
| 110 | +; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]]) |
| 111 | +; CHECK-NEXT: ret i1 true |
| 112 | +; |
96 | 113 | %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
|
97 | 114 |
|
98 | 115 | %a3 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a2)
|
99 | 116 | %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a)
|
100 | 117 | %c = icmp eq i8* %a3, %b2
|
101 |
| -; CHECK: ret i1 true |
102 | 118 | ret i1 %c
|
103 | 119 | }
|
104 | 120 |
|
105 |
| -; CHECK-LABEL: define i16* @skipWithDifferentTypes( |
106 | 121 | define i16* @skipWithDifferentTypes(i8* %a) {
|
| 122 | +; CHECK-LABEL: @skipWithDifferentTypes( |
| 123 | +; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]]) |
| 124 | +; CHECK-NEXT: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* |
| 125 | +; CHECK-NEXT: ret i16* [[TMP2]] |
| 126 | +; |
107 | 127 | %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
|
108 | 128 | %c1 = bitcast i8* %a2 to i16*
|
109 | 129 |
|
110 |
| - ; CHECK: %[[b:.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* %a) |
111 | 130 | %a3 = call i16* @llvm.strip.invariant.group.p0i16(i16* %c1)
|
112 |
| - ; CHECK-NEXT: %[[r:.*]] = bitcast i8* %[[b]] to i16* |
113 |
| - ; CHECK-NEXT: ret i16* %[[r]] |
114 | 131 | ret i16* %a3
|
115 | 132 | }
|
116 | 133 |
|
117 |
| -; CHECK-LABEL: define i16 addrspace(42)* @skipWithDifferentTypesAddrspace( |
118 | 134 | define i16 addrspace(42)* @skipWithDifferentTypesAddrspace(i8 addrspace(42)* %a) {
|
| 135 | +; CHECK-LABEL: @skipWithDifferentTypesAddrspace( |
| 136 | +; CHECK-NEXT: [[TMP1:%.*]] = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* [[A:%.*]]) |
| 137 | +; CHECK-NEXT: [[TMP2:%.*]] = bitcast i8 addrspace(42)* [[TMP1]] to i16 addrspace(42)* |
| 138 | +; CHECK-NEXT: ret i16 addrspace(42)* [[TMP2]] |
| 139 | +; |
119 | 140 | %a2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* %a)
|
120 | 141 | %c1 = bitcast i8 addrspace(42)* %a2 to i16 addrspace(42)*
|
121 | 142 |
|
122 |
| - ; CHECK: %[[b:.*]] = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* %a) |
123 | 143 | %a3 = call i16 addrspace(42)* @llvm.strip.invariant.group.p42i16(i16 addrspace(42)* %c1)
|
124 |
| - ; CHECK-NEXT: %[[r:.*]] = bitcast i8 addrspace(42)* %[[b]] to i16 addrspace(42)* |
125 |
| - ; CHECK-NEXT: ret i16 addrspace(42)* %[[r]] |
126 | 144 | ret i16 addrspace(42)* %a3
|
127 | 145 | }
|
128 | 146 |
|
129 |
| -; CHECK-LABEL: define i16 addrspace(42)* @skipWithDifferentTypesDifferentAddrspace( |
130 | 147 | define i16 addrspace(42)* @skipWithDifferentTypesDifferentAddrspace(i8* %a) {
|
| 148 | +; CHECK-LABEL: @skipWithDifferentTypesDifferentAddrspace( |
| 149 | +; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]]) |
| 150 | +; CHECK-NEXT: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* |
| 151 | +; CHECK-NEXT: [[TMP3:%.*]] = addrspacecast i16* [[TMP2]] to i16 addrspace(42)* |
| 152 | +; CHECK-NEXT: ret i16 addrspace(42)* [[TMP3]] |
| 153 | +; |
131 | 154 | %cast = addrspacecast i8* %a to i8 addrspace(42)*
|
132 | 155 | %a2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* %cast)
|
133 | 156 | %c1 = bitcast i8 addrspace(42)* %a2 to i16 addrspace(42)*
|
134 | 157 |
|
135 |
| - ; CHECK: %[[b:.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* %a) |
136 | 158 | %a3 = call i16 addrspace(42)* @llvm.strip.invariant.group.p42i16(i16 addrspace(42)* %c1)
|
137 |
| - ; CHECK-NEXT: %[[r:.*]] = bitcast i8* %[[b]] to i16* |
138 |
| - ; CHECK-NEXT: %[[r2:.*]] = addrspacecast i16* %[[r]] to i16 addrspace(42)* |
139 |
| - ; CHECK-NEXT: ret i16 addrspace(42)* %[[r2]] |
140 | 159 | ret i16 addrspace(42)* %a3
|
141 | 160 | }
|
142 | 161 |
|
|
0 commit comments