1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
2 ; RUN: opt -passes=globalopt -S %s | FileCheck %s
4 %struct.20ptr = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
6 @global.20ptr = internal global %struct.20ptr zeroinitializer
11 ; CHECK: @[[C:[a-zA-Z0-9_$"\\.-]+]] = global ptr null
12 ; CHECK: @[[GLOBAL_20PTR_3:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global [[STRUCT_20PTR:%.*]] { ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr null, ptr null, ptr null, ptr @c }
13 ; CHECK: @[[GLOBAL_20PTR_4_16:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null
15 define void @store_initializer() {
16 ; CHECK-LABEL: @store_initializer(
18 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
19 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
20 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
21 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
22 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
23 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
24 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
25 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
26 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
27 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
28 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
29 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
30 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
31 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
32 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
33 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
34 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
35 ; CHECK-NEXT: ret void
38 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 0), align 8
39 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 1), align 8
40 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 2), align 8
41 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 3), align 8
42 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 4), align 8
43 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 5), align 8
44 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 6), align 8
45 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 7), align 8
46 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 8), align 8
47 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 9), align 8
48 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 10), align 8
49 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 11), align 8
50 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 12), align 8
51 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 13), align 8
52 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 14), align 8
53 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 15), align 8
54 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 16), align 8
56 %l0 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 0), align 8
57 store volatile ptr %l0, ptr @c
58 %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 1), align 8
59 store volatile ptr %l1, ptr @c
60 %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 2), align 8
61 store volatile ptr %l2, ptr @c
62 %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 3), align 8
63 store volatile ptr %l3, ptr @c
64 %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 4), align 8
65 store volatile ptr %l4, ptr @c
66 %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 5), align 8
67 store volatile ptr %l5, ptr @c
68 %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 6), align 8
69 store volatile ptr %l6, ptr @c
70 %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 7), align 8
71 store volatile ptr %l7, ptr @c
72 %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 8), align 8
73 store volatile ptr %l8, ptr @c
74 %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 9), align 8
75 store volatile ptr %l9, ptr @c
76 %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 10), align 8
77 store volatile ptr %l10, ptr @c
78 %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 11), align 8
79 store volatile ptr %l11, ptr @c
80 %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 12), align 8
81 store volatile ptr %l12, ptr @c
82 %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 13), align 8
83 store volatile ptr %l13, ptr @c
84 %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 14), align 8
85 store volatile ptr %l14, ptr @c
86 %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 15), align 8
87 store volatile ptr %l15, ptr @c
88 %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 16), align 8
89 store volatile ptr %l16, ptr @c
94 ; Global with initializer where some elements in the initializer are not null.
96 @global.20ptr.2 = internal global %struct.20ptr { ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr @c }
98 define void @store_null_initializer_2() {
99 ; CHECK-LABEL: @store_null_initializer_2(
101 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
102 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
103 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
104 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
105 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
106 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
107 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
108 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
109 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
110 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
111 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
112 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
113 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
114 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
115 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
116 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
117 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
118 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
119 ; CHECK-NEXT: ret void
122 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 0), align 8
123 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 1), align 8
124 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 2), align 8
125 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 3), align 8
126 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 4), align 8
127 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 5), align 8
128 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 6), align 8
129 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 7), align 8
130 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 8), align 8
131 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 9), align 8
132 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 10), align 8
133 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 11), align 8
134 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 12), align 8
135 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 13), align 8
136 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 14), align 8
137 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 15), align 8
138 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 16), align 8
139 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 19), align 8
141 %l0 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 0), align 8
142 store volatile ptr %l0, ptr @c
143 %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 1), align 8
144 store volatile ptr %l1, ptr @c
145 %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 2), align 8
146 store volatile ptr %l2, ptr @c
147 %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 3), align 8
148 store volatile ptr %l3, ptr @c
149 %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 4), align 8
150 store volatile ptr %l4, ptr @c
151 %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 5), align 8
152 store volatile ptr %l5, ptr @c
153 %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 6), align 8
154 store volatile ptr %l6, ptr @c
155 %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 7), align 8
156 store volatile ptr %l7, ptr @c
157 %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 8), align 8
158 store volatile ptr %l8, ptr @c
159 %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 9), align 8
160 store volatile ptr %l9, ptr @c
161 %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 10), align 8
162 store volatile ptr %l10, ptr @c
163 %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 11), align 8
164 store volatile ptr %l11, ptr @c
165 %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 12), align 8
166 store volatile ptr %l12, ptr @c
167 %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 13), align 8
168 store volatile ptr %l13, ptr @c
169 %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 14), align 8
170 store volatile ptr %l14, ptr @c
171 %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 15), align 8
172 store volatile ptr %l15, ptr @c
173 %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 16), align 8
174 store volatile ptr %l16, ptr @c
175 %l19 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 19), align 8
176 store volatile ptr %l19, ptr @c
182 @global.20ptr.3 = internal global %struct.20ptr { ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr null, ptr null, ptr null, ptr @c }
184 ; Stores writing a different value than the initializer.
185 define void @store_mixed_initializer_negative() {
186 ; CHECK-LABEL: @store_mixed_initializer_negative(
188 ; CHECK-NEXT: store ptr null, ptr @global.20ptr.3, align 8
189 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR:%.*]], ptr @global.20ptr.3, i64 0, i32 1), align 8
190 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 2), align 8
191 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 3), align 8
192 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 4), align 8
193 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 5), align 8
194 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 6), align 8
195 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 7), align 8
196 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 8), align 8
197 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 9), align 8
198 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 10), align 8
199 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 11), align 8
200 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 12), align 8
201 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 13), align 8
202 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 14), align 8
203 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 15), align 8
204 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 16), align 8
205 ; CHECK-NEXT: store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 19), align 8
206 ; CHECK-NEXT: [[L0:%.*]] = load ptr, ptr @global.20ptr.3, align 8
207 ; CHECK-NEXT: store volatile ptr [[L0]], ptr @c, align 8
208 ; CHECK-NEXT: [[L1:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 1), align 8
209 ; CHECK-NEXT: store volatile ptr [[L1]], ptr @c, align 8
210 ; CHECK-NEXT: [[L2:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 2), align 8
211 ; CHECK-NEXT: store volatile ptr [[L2]], ptr @c, align 8
212 ; CHECK-NEXT: [[L3:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 3), align 8
213 ; CHECK-NEXT: store volatile ptr [[L3]], ptr @c, align 8
214 ; CHECK-NEXT: [[L4:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 4), align 8
215 ; CHECK-NEXT: store volatile ptr [[L4]], ptr @c, align 8
216 ; CHECK-NEXT: [[L5:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 5), align 8
217 ; CHECK-NEXT: store volatile ptr [[L5]], ptr @c, align 8
218 ; CHECK-NEXT: [[L6:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 6), align 8
219 ; CHECK-NEXT: store volatile ptr [[L6]], ptr @c, align 8
220 ; CHECK-NEXT: [[L7:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 7), align 8
221 ; CHECK-NEXT: store volatile ptr [[L7]], ptr @c, align 8
222 ; CHECK-NEXT: [[L8:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 8), align 8
223 ; CHECK-NEXT: store volatile ptr [[L8]], ptr @c, align 8
224 ; CHECK-NEXT: [[L9:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 9), align 8
225 ; CHECK-NEXT: store volatile ptr [[L9]], ptr @c, align 8
226 ; CHECK-NEXT: [[L10:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 10), align 8
227 ; CHECK-NEXT: store volatile ptr [[L10]], ptr @c, align 8
228 ; CHECK-NEXT: [[L11:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 11), align 8
229 ; CHECK-NEXT: store volatile ptr [[L11]], ptr @c, align 8
230 ; CHECK-NEXT: [[L12:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 12), align 8
231 ; CHECK-NEXT: store volatile ptr [[L12]], ptr @c, align 8
232 ; CHECK-NEXT: [[L13:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 13), align 8
233 ; CHECK-NEXT: store volatile ptr [[L13]], ptr @c, align 8
234 ; CHECK-NEXT: [[L14:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 14), align 8
235 ; CHECK-NEXT: store volatile ptr [[L14]], ptr @c, align 8
236 ; CHECK-NEXT: [[L15:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 15), align 8
237 ; CHECK-NEXT: store volatile ptr [[L15]], ptr @c, align 8
238 ; CHECK-NEXT: [[L16:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 16), align 8
239 ; CHECK-NEXT: store volatile ptr [[L16]], ptr @c, align 8
240 ; CHECK-NEXT: [[L19:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 19), align 8
241 ; CHECK-NEXT: store volatile ptr [[L19]], ptr @c, align 8
242 ; CHECK-NEXT: ret void
245 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 0), align 8
246 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 1), align 8
247 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 2), align 8
248 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 3), align 8
249 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 4), align 8
250 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 5), align 8
251 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 6), align 8
252 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 7), align 8
253 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 8), align 8
254 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 9), align 8
255 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 10), align 8
256 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 11), align 8
257 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 12), align 8
258 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 13), align 8
259 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 14), align 8
260 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 15), align 8
261 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 16), align 8
262 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 19), align 8
264 %l0 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 0), align 8
265 store volatile ptr %l0, ptr @c
266 %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 1), align 8
267 store volatile ptr %l1, ptr @c
268 %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 2), align 8
269 store volatile ptr %l2, ptr @c
270 %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 3), align 8
271 store volatile ptr %l3, ptr @c
272 %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 4), align 8
273 store volatile ptr %l4, ptr @c
274 %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 5), align 8
275 store volatile ptr %l5, ptr @c
276 %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 6), align 8
277 store volatile ptr %l6, ptr @c
278 %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 7), align 8
279 store volatile ptr %l7, ptr @c
280 %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 8), align 8
281 store volatile ptr %l8, ptr @c
282 %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 9), align 8
283 store volatile ptr %l9, ptr @c
284 %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 10), align 8
285 store volatile ptr %l10, ptr @c
286 %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 11), align 8
287 store volatile ptr %l11, ptr @c
288 %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 12), align 8
289 store volatile ptr %l12, ptr @c
290 %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 13), align 8
291 store volatile ptr %l13, ptr @c
292 %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 14), align 8
293 store volatile ptr %l14, ptr @c
294 %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 15), align 8
295 store volatile ptr %l15, ptr @c
296 %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 16), align 8
297 store volatile ptr %l16, ptr @c
298 %l19 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 19), align 8
299 store volatile ptr %l19, ptr @c
305 @global.20ptr.4 = internal global %struct.20ptr { ptr null, ptr null, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr null, ptr null, ptr null, ptr @c }
307 ; Stores writing a different value than the initializer.
308 define void @store_mixed_initializer() {
309 ; CHECK-LABEL: @store_mixed_initializer(
311 ; CHECK-NEXT: store ptr @c, ptr @global.20ptr.4.16, align 8
312 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
313 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
314 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
315 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
316 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
317 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
318 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
319 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
320 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
321 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
322 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
323 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
324 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
325 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
326 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
327 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
328 ; CHECK-NEXT: [[L16:%.*]] = load ptr, ptr @global.20ptr.4.16, align 8
329 ; CHECK-NEXT: store volatile ptr [[L16]], ptr @c, align 8
330 ; CHECK-NEXT: ret void
333 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 0), align 8
334 store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8
335 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8
336 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8
337 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8
338 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8
339 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8
340 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8
341 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8
342 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8
343 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8
344 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8
345 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8
346 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8
347 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8
348 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8
349 store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8
351 %l0 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 0), align 8
352 store volatile ptr %l0, ptr @c
353 %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8
354 store volatile ptr %l1, ptr @c
355 %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8
356 store volatile ptr %l2, ptr @c
357 %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8
358 store volatile ptr %l3, ptr @c
359 %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8
360 store volatile ptr %l4, ptr @c
361 %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8
362 store volatile ptr %l5, ptr @c
363 %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8
364 store volatile ptr %l6, ptr @c
365 %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8
366 store volatile ptr %l7, ptr @c
367 %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8
368 store volatile ptr %l8, ptr @c
369 %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8
370 store volatile ptr %l9, ptr @c
371 %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8
372 store volatile ptr %l10, ptr @c
373 %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8
374 store volatile ptr %l11, ptr @c
375 %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8
376 store volatile ptr %l12, ptr @c
377 %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8
378 store volatile ptr %l13, ptr @c
379 %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8
380 store volatile ptr %l14, ptr @c
381 %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8
382 store volatile ptr %l15, ptr @c
383 %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8
384 store volatile ptr %l16, ptr @c
389 ; Same as @store_mixed_initializer, but the GEP constant expressions are not
391 define void @store_mixed_initializer_geps_without_inbounds() {
392 ; CHECK-LABEL: @store_mixed_initializer_geps_without_inbounds(
394 ; CHECK-NEXT: store ptr @c, ptr @global.20ptr.4.16, align 8
395 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
396 ; CHECK-NEXT: store volatile ptr null, ptr @c, align 8
397 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
398 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
399 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
400 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
401 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
402 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
403 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
404 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
405 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
406 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
407 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
408 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
409 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
410 ; CHECK-NEXT: store volatile ptr @c, ptr @c, align 8
411 ; CHECK-NEXT: [[L16:%.*]] = load ptr, ptr @global.20ptr.4.16, align 8
412 ; CHECK-NEXT: store volatile ptr [[L16]], ptr @c, align 8
413 ; CHECK-NEXT: ret void
416 store ptr null, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 0), align 8
417 store ptr null, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8
418 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8
419 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8
420 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8
421 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8
422 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8
423 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8
424 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8
425 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8
426 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8
427 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8
428 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8
429 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8
430 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8
431 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8
432 store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8
434 %l0 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 0), align 8
435 store volatile ptr %l0, ptr @c
436 %l1 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8
437 store volatile ptr %l1, ptr @c
438 %l2 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8
439 store volatile ptr %l2, ptr @c
440 %l3 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8
441 store volatile ptr %l3, ptr @c
442 %l4 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8
443 store volatile ptr %l4, ptr @c
444 %l5 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8
445 store volatile ptr %l5, ptr @c
446 %l6 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8
447 store volatile ptr %l6, ptr @c
448 %l7 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8
449 store volatile ptr %l7, ptr @c
450 %l8 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8
451 store volatile ptr %l8, ptr @c
452 %l9 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8
453 store volatile ptr %l9, ptr @c
454 %l10 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8
455 store volatile ptr %l10, ptr @c
456 %l11 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8
457 store volatile ptr %l11, ptr @c
458 %l12 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8
459 store volatile ptr %l12, ptr @c
460 %l13 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8
461 store volatile ptr %l13, ptr @c
462 %l14 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8
463 store volatile ptr %l14, ptr @c
464 %l15 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8
465 store volatile ptr %l15, ptr @c
466 %l16 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8
467 store volatile ptr %l16, ptr @c