1 ; RUN: llc < %s -march=x86-64 > %t.x86-64
2 ; RUN: llc < %s -march=x86 -mattr=cx16 > %t.x86
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
4 target triple = "x86_64-apple-darwin8"
6 @sc = common global i8 0
7 @uc = common global i8 0
8 @ss = common global i16 0
9 @us = common global i16 0
10 @si = common global i32 0
11 @ui = common global i32 0
12 @sl = common global i64 0
13 @ul = common global i64 0
14 @sll = common global i64 0
15 @ull = common global i64 0
17 define void @test_op_ignore() nounwind {
19 %0 = atomicrmw add i8* @sc, i8 1 monotonic
20 %1 = atomicrmw add i8* @uc, i8 1 monotonic
21 %2 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
22 %3 = atomicrmw add i16* %2, i16 1 monotonic
23 %4 = bitcast i8* bitcast (i16* @us to i8*) to i16*
24 %5 = atomicrmw add i16* %4, i16 1 monotonic
25 %6 = bitcast i8* bitcast (i32* @si to i8*) to i32*
26 %7 = atomicrmw add i32* %6, i32 1 monotonic
27 %8 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
28 %9 = atomicrmw add i32* %8, i32 1 monotonic
29 %10 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
30 %11 = atomicrmw add i64* %10, i64 1 monotonic
31 %12 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
32 %13 = atomicrmw add i64* %12, i64 1 monotonic
33 %14 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
34 %15 = atomicrmw add i64* %14, i64 1 monotonic
35 %16 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
36 %17 = atomicrmw add i64* %16, i64 1 monotonic
37 %18 = atomicrmw sub i8* @sc, i8 1 monotonic
38 %19 = atomicrmw sub i8* @uc, i8 1 monotonic
39 %20 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
40 %21 = atomicrmw sub i16* %20, i16 1 monotonic
41 %22 = bitcast i8* bitcast (i16* @us to i8*) to i16*
42 %23 = atomicrmw sub i16* %22, i16 1 monotonic
43 %24 = bitcast i8* bitcast (i32* @si to i8*) to i32*
44 %25 = atomicrmw sub i32* %24, i32 1 monotonic
45 %26 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
46 %27 = atomicrmw sub i32* %26, i32 1 monotonic
47 %28 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
48 %29 = atomicrmw sub i64* %28, i64 1 monotonic
49 %30 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
50 %31 = atomicrmw sub i64* %30, i64 1 monotonic
51 %32 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
52 %33 = atomicrmw sub i64* %32, i64 1 monotonic
53 %34 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
54 %35 = atomicrmw sub i64* %34, i64 1 monotonic
55 %36 = atomicrmw or i8* @sc, i8 1 monotonic
56 %37 = atomicrmw or i8* @uc, i8 1 monotonic
57 %38 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
58 %39 = atomicrmw or i16* %38, i16 1 monotonic
59 %40 = bitcast i8* bitcast (i16* @us to i8*) to i16*
60 %41 = atomicrmw or i16* %40, i16 1 monotonic
61 %42 = bitcast i8* bitcast (i32* @si to i8*) to i32*
62 %43 = atomicrmw or i32* %42, i32 1 monotonic
63 %44 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
64 %45 = atomicrmw or i32* %44, i32 1 monotonic
65 %46 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
66 %47 = atomicrmw or i64* %46, i64 1 monotonic
67 %48 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
68 %49 = atomicrmw or i64* %48, i64 1 monotonic
69 %50 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
70 %51 = atomicrmw or i64* %50, i64 1 monotonic
71 %52 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
72 %53 = atomicrmw or i64* %52, i64 1 monotonic
73 %54 = atomicrmw xor i8* @sc, i8 1 monotonic
74 %55 = atomicrmw xor i8* @uc, i8 1 monotonic
75 %56 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
76 %57 = atomicrmw xor i16* %56, i16 1 monotonic
77 %58 = bitcast i8* bitcast (i16* @us to i8*) to i16*
78 %59 = atomicrmw xor i16* %58, i16 1 monotonic
79 %60 = bitcast i8* bitcast (i32* @si to i8*) to i32*
80 %61 = atomicrmw xor i32* %60, i32 1 monotonic
81 %62 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
82 %63 = atomicrmw xor i32* %62, i32 1 monotonic
83 %64 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
84 %65 = atomicrmw xor i64* %64, i64 1 monotonic
85 %66 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
86 %67 = atomicrmw xor i64* %66, i64 1 monotonic
87 %68 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
88 %69 = atomicrmw xor i64* %68, i64 1 monotonic
89 %70 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
90 %71 = atomicrmw xor i64* %70, i64 1 monotonic
91 %72 = atomicrmw and i8* @sc, i8 1 monotonic
92 %73 = atomicrmw and i8* @uc, i8 1 monotonic
93 %74 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
94 %75 = atomicrmw and i16* %74, i16 1 monotonic
95 %76 = bitcast i8* bitcast (i16* @us to i8*) to i16*
96 %77 = atomicrmw and i16* %76, i16 1 monotonic
97 %78 = bitcast i8* bitcast (i32* @si to i8*) to i32*
98 %79 = atomicrmw and i32* %78, i32 1 monotonic
99 %80 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
100 %81 = atomicrmw and i32* %80, i32 1 monotonic
101 %82 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
102 %83 = atomicrmw and i64* %82, i64 1 monotonic
103 %84 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
104 %85 = atomicrmw and i64* %84, i64 1 monotonic
105 %86 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
106 %87 = atomicrmw and i64* %86, i64 1 monotonic
107 %88 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
108 %89 = atomicrmw and i64* %88, i64 1 monotonic
109 %90 = atomicrmw nand i8* @sc, i8 1 monotonic
110 %91 = atomicrmw nand i8* @uc, i8 1 monotonic
111 %92 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
112 %93 = atomicrmw nand i16* %92, i16 1 monotonic
113 %94 = bitcast i8* bitcast (i16* @us to i8*) to i16*
114 %95 = atomicrmw nand i16* %94, i16 1 monotonic
115 %96 = bitcast i8* bitcast (i32* @si to i8*) to i32*
116 %97 = atomicrmw nand i32* %96, i32 1 monotonic
117 %98 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
118 %99 = atomicrmw nand i32* %98, i32 1 monotonic
119 %100 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
120 %101 = atomicrmw nand i64* %100, i64 1 monotonic
121 %102 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
122 %103 = atomicrmw nand i64* %102, i64 1 monotonic
123 %104 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
124 %105 = atomicrmw nand i64* %104, i64 1 monotonic
125 %106 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
126 %107 = atomicrmw nand i64* %106, i64 1 monotonic
129 return: ; preds = %entry
133 define void @test_fetch_and_op() nounwind {
135 %0 = atomicrmw add i8* @sc, i8 11 monotonic
136 store i8 %0, i8* @sc, align 1
137 %1 = atomicrmw add i8* @uc, i8 11 monotonic
138 store i8 %1, i8* @uc, align 1
139 %2 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
140 %3 = atomicrmw add i16* %2, i16 11 monotonic
141 store i16 %3, i16* @ss, align 2
142 %4 = bitcast i8* bitcast (i16* @us to i8*) to i16*
143 %5 = atomicrmw add i16* %4, i16 11 monotonic
144 store i16 %5, i16* @us, align 2
145 %6 = bitcast i8* bitcast (i32* @si to i8*) to i32*
146 %7 = atomicrmw add i32* %6, i32 11 monotonic
147 store i32 %7, i32* @si, align 4
148 %8 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
149 %9 = atomicrmw add i32* %8, i32 11 monotonic
150 store i32 %9, i32* @ui, align 4
151 %10 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
152 %11 = atomicrmw add i64* %10, i64 11 monotonic
153 store i64 %11, i64* @sl, align 8
154 %12 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
155 %13 = atomicrmw add i64* %12, i64 11 monotonic
156 store i64 %13, i64* @ul, align 8
157 %14 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
158 %15 = atomicrmw add i64* %14, i64 11 monotonic
159 store i64 %15, i64* @sll, align 8
160 %16 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
161 %17 = atomicrmw add i64* %16, i64 11 monotonic
162 store i64 %17, i64* @ull, align 8
163 %18 = atomicrmw sub i8* @sc, i8 11 monotonic
164 store i8 %18, i8* @sc, align 1
165 %19 = atomicrmw sub i8* @uc, i8 11 monotonic
166 store i8 %19, i8* @uc, align 1
167 %20 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
168 %21 = atomicrmw sub i16* %20, i16 11 monotonic
169 store i16 %21, i16* @ss, align 2
170 %22 = bitcast i8* bitcast (i16* @us to i8*) to i16*
171 %23 = atomicrmw sub i16* %22, i16 11 monotonic
172 store i16 %23, i16* @us, align 2
173 %24 = bitcast i8* bitcast (i32* @si to i8*) to i32*
174 %25 = atomicrmw sub i32* %24, i32 11 monotonic
175 store i32 %25, i32* @si, align 4
176 %26 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
177 %27 = atomicrmw sub i32* %26, i32 11 monotonic
178 store i32 %27, i32* @ui, align 4
179 %28 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
180 %29 = atomicrmw sub i64* %28, i64 11 monotonic
181 store i64 %29, i64* @sl, align 8
182 %30 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
183 %31 = atomicrmw sub i64* %30, i64 11 monotonic
184 store i64 %31, i64* @ul, align 8
185 %32 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
186 %33 = atomicrmw sub i64* %32, i64 11 monotonic
187 store i64 %33, i64* @sll, align 8
188 %34 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
189 %35 = atomicrmw sub i64* %34, i64 11 monotonic
190 store i64 %35, i64* @ull, align 8
191 %36 = atomicrmw or i8* @sc, i8 11 monotonic
192 store i8 %36, i8* @sc, align 1
193 %37 = atomicrmw or i8* @uc, i8 11 monotonic
194 store i8 %37, i8* @uc, align 1
195 %38 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
196 %39 = atomicrmw or i16* %38, i16 11 monotonic
197 store i16 %39, i16* @ss, align 2
198 %40 = bitcast i8* bitcast (i16* @us to i8*) to i16*
199 %41 = atomicrmw or i16* %40, i16 11 monotonic
200 store i16 %41, i16* @us, align 2
201 %42 = bitcast i8* bitcast (i32* @si to i8*) to i32*
202 %43 = atomicrmw or i32* %42, i32 11 monotonic
203 store i32 %43, i32* @si, align 4
204 %44 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
205 %45 = atomicrmw or i32* %44, i32 11 monotonic
206 store i32 %45, i32* @ui, align 4
207 %46 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
208 %47 = atomicrmw or i64* %46, i64 11 monotonic
209 store i64 %47, i64* @sl, align 8
210 %48 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
211 %49 = atomicrmw or i64* %48, i64 11 monotonic
212 store i64 %49, i64* @ul, align 8
213 %50 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
214 %51 = atomicrmw or i64* %50, i64 11 monotonic
215 store i64 %51, i64* @sll, align 8
216 %52 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
217 %53 = atomicrmw or i64* %52, i64 11 monotonic
218 store i64 %53, i64* @ull, align 8
219 %54 = atomicrmw xor i8* @sc, i8 11 monotonic
220 store i8 %54, i8* @sc, align 1
221 %55 = atomicrmw xor i8* @uc, i8 11 monotonic
222 store i8 %55, i8* @uc, align 1
223 %56 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
224 %57 = atomicrmw xor i16* %56, i16 11 monotonic
225 store i16 %57, i16* @ss, align 2
226 %58 = bitcast i8* bitcast (i16* @us to i8*) to i16*
227 %59 = atomicrmw xor i16* %58, i16 11 monotonic
228 store i16 %59, i16* @us, align 2
229 %60 = bitcast i8* bitcast (i32* @si to i8*) to i32*
230 %61 = atomicrmw xor i32* %60, i32 11 monotonic
231 store i32 %61, i32* @si, align 4
232 %62 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
233 %63 = atomicrmw xor i32* %62, i32 11 monotonic
234 store i32 %63, i32* @ui, align 4
235 %64 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
236 %65 = atomicrmw xor i64* %64, i64 11 monotonic
237 store i64 %65, i64* @sl, align 8
238 %66 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
239 %67 = atomicrmw xor i64* %66, i64 11 monotonic
240 store i64 %67, i64* @ul, align 8
241 %68 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
242 %69 = atomicrmw xor i64* %68, i64 11 monotonic
243 store i64 %69, i64* @sll, align 8
244 %70 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
245 %71 = atomicrmw xor i64* %70, i64 11 monotonic
246 store i64 %71, i64* @ull, align 8
247 %72 = atomicrmw and i8* @sc, i8 11 monotonic
248 store i8 %72, i8* @sc, align 1
249 %73 = atomicrmw and i8* @uc, i8 11 monotonic
250 store i8 %73, i8* @uc, align 1
251 %74 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
252 %75 = atomicrmw and i16* %74, i16 11 monotonic
253 store i16 %75, i16* @ss, align 2
254 %76 = bitcast i8* bitcast (i16* @us to i8*) to i16*
255 %77 = atomicrmw and i16* %76, i16 11 monotonic
256 store i16 %77, i16* @us, align 2
257 %78 = bitcast i8* bitcast (i32* @si to i8*) to i32*
258 %79 = atomicrmw and i32* %78, i32 11 monotonic
259 store i32 %79, i32* @si, align 4
260 %80 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
261 %81 = atomicrmw and i32* %80, i32 11 monotonic
262 store i32 %81, i32* @ui, align 4
263 %82 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
264 %83 = atomicrmw and i64* %82, i64 11 monotonic
265 store i64 %83, i64* @sl, align 8
266 %84 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
267 %85 = atomicrmw and i64* %84, i64 11 monotonic
268 store i64 %85, i64* @ul, align 8
269 %86 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
270 %87 = atomicrmw and i64* %86, i64 11 monotonic
271 store i64 %87, i64* @sll, align 8
272 %88 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
273 %89 = atomicrmw and i64* %88, i64 11 monotonic
274 store i64 %89, i64* @ull, align 8
275 %90 = atomicrmw nand i8* @sc, i8 11 monotonic
276 store i8 %90, i8* @sc, align 1
277 %91 = atomicrmw nand i8* @uc, i8 11 monotonic
278 store i8 %91, i8* @uc, align 1
279 %92 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
280 %93 = atomicrmw nand i16* %92, i16 11 monotonic
281 store i16 %93, i16* @ss, align 2
282 %94 = bitcast i8* bitcast (i16* @us to i8*) to i16*
283 %95 = atomicrmw nand i16* %94, i16 11 monotonic
284 store i16 %95, i16* @us, align 2
285 %96 = bitcast i8* bitcast (i32* @si to i8*) to i32*
286 %97 = atomicrmw nand i32* %96, i32 11 monotonic
287 store i32 %97, i32* @si, align 4
288 %98 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
289 %99 = atomicrmw nand i32* %98, i32 11 monotonic
290 store i32 %99, i32* @ui, align 4
291 %100 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
292 %101 = atomicrmw nand i64* %100, i64 11 monotonic
293 store i64 %101, i64* @sl, align 8
294 %102 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
295 %103 = atomicrmw nand i64* %102, i64 11 monotonic
296 store i64 %103, i64* @ul, align 8
297 %104 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
298 %105 = atomicrmw nand i64* %104, i64 11 monotonic
299 store i64 %105, i64* @sll, align 8
300 %106 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
301 %107 = atomicrmw nand i64* %106, i64 11 monotonic
302 store i64 %107, i64* @ull, align 8
305 return: ; preds = %entry
309 define void @test_op_and_fetch() nounwind {
311 %0 = load i8* @uc, align 1
312 %1 = zext i8 %0 to i32
313 %2 = trunc i32 %1 to i8
314 %3 = atomicrmw add i8* @sc, i8 %2 monotonic
316 store i8 %4, i8* @sc, align 1
317 %5 = load i8* @uc, align 1
318 %6 = zext i8 %5 to i32
319 %7 = trunc i32 %6 to i8
320 %8 = atomicrmw add i8* @uc, i8 %7 monotonic
322 store i8 %9, i8* @uc, align 1
323 %10 = load i8* @uc, align 1
324 %11 = zext i8 %10 to i32
325 %12 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
326 %13 = trunc i32 %11 to i16
327 %14 = atomicrmw add i16* %12, i16 %13 monotonic
328 %15 = add i16 %14, %13
329 store i16 %15, i16* @ss, align 2
330 %16 = load i8* @uc, align 1
331 %17 = zext i8 %16 to i32
332 %18 = bitcast i8* bitcast (i16* @us to i8*) to i16*
333 %19 = trunc i32 %17 to i16
334 %20 = atomicrmw add i16* %18, i16 %19 monotonic
335 %21 = add i16 %20, %19
336 store i16 %21, i16* @us, align 2
337 %22 = load i8* @uc, align 1
338 %23 = zext i8 %22 to i32
339 %24 = bitcast i8* bitcast (i32* @si to i8*) to i32*
340 %25 = atomicrmw add i32* %24, i32 %23 monotonic
341 %26 = add i32 %25, %23
342 store i32 %26, i32* @si, align 4
343 %27 = load i8* @uc, align 1
344 %28 = zext i8 %27 to i32
345 %29 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
346 %30 = atomicrmw add i32* %29, i32 %28 monotonic
347 %31 = add i32 %30, %28
348 store i32 %31, i32* @ui, align 4
349 %32 = load i8* @uc, align 1
350 %33 = zext i8 %32 to i64
351 %34 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
352 %35 = atomicrmw add i64* %34, i64 %33 monotonic
353 %36 = add i64 %35, %33
354 store i64 %36, i64* @sl, align 8
355 %37 = load i8* @uc, align 1
356 %38 = zext i8 %37 to i64
357 %39 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
358 %40 = atomicrmw add i64* %39, i64 %38 monotonic
359 %41 = add i64 %40, %38
360 store i64 %41, i64* @ul, align 8
361 %42 = load i8* @uc, align 1
362 %43 = zext i8 %42 to i64
363 %44 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
364 %45 = atomicrmw add i64* %44, i64 %43 monotonic
365 %46 = add i64 %45, %43
366 store i64 %46, i64* @sll, align 8
367 %47 = load i8* @uc, align 1
368 %48 = zext i8 %47 to i64
369 %49 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
370 %50 = atomicrmw add i64* %49, i64 %48 monotonic
371 %51 = add i64 %50, %48
372 store i64 %51, i64* @ull, align 8
373 %52 = load i8* @uc, align 1
374 %53 = zext i8 %52 to i32
375 %54 = trunc i32 %53 to i8
376 %55 = atomicrmw sub i8* @sc, i8 %54 monotonic
377 %56 = sub i8 %55, %54
378 store i8 %56, i8* @sc, align 1
379 %57 = load i8* @uc, align 1
380 %58 = zext i8 %57 to i32
381 %59 = trunc i32 %58 to i8
382 %60 = atomicrmw sub i8* @uc, i8 %59 monotonic
383 %61 = sub i8 %60, %59
384 store i8 %61, i8* @uc, align 1
385 %62 = load i8* @uc, align 1
386 %63 = zext i8 %62 to i32
387 %64 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
388 %65 = trunc i32 %63 to i16
389 %66 = atomicrmw sub i16* %64, i16 %65 monotonic
390 %67 = sub i16 %66, %65
391 store i16 %67, i16* @ss, align 2
392 %68 = load i8* @uc, align 1
393 %69 = zext i8 %68 to i32
394 %70 = bitcast i8* bitcast (i16* @us to i8*) to i16*
395 %71 = trunc i32 %69 to i16
396 %72 = atomicrmw sub i16* %70, i16 %71 monotonic
397 %73 = sub i16 %72, %71
398 store i16 %73, i16* @us, align 2
399 %74 = load i8* @uc, align 1
400 %75 = zext i8 %74 to i32
401 %76 = bitcast i8* bitcast (i32* @si to i8*) to i32*
402 %77 = atomicrmw sub i32* %76, i32 %75 monotonic
403 %78 = sub i32 %77, %75
404 store i32 %78, i32* @si, align 4
405 %79 = load i8* @uc, align 1
406 %80 = zext i8 %79 to i32
407 %81 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
408 %82 = atomicrmw sub i32* %81, i32 %80 monotonic
409 %83 = sub i32 %82, %80
410 store i32 %83, i32* @ui, align 4
411 %84 = load i8* @uc, align 1
412 %85 = zext i8 %84 to i64
413 %86 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
414 %87 = atomicrmw sub i64* %86, i64 %85 monotonic
415 %88 = sub i64 %87, %85
416 store i64 %88, i64* @sl, align 8
417 %89 = load i8* @uc, align 1
418 %90 = zext i8 %89 to i64
419 %91 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
420 %92 = atomicrmw sub i64* %91, i64 %90 monotonic
421 %93 = sub i64 %92, %90
422 store i64 %93, i64* @ul, align 8
423 %94 = load i8* @uc, align 1
424 %95 = zext i8 %94 to i64
425 %96 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
426 %97 = atomicrmw sub i64* %96, i64 %95 monotonic
427 %98 = sub i64 %97, %95
428 store i64 %98, i64* @sll, align 8
429 %99 = load i8* @uc, align 1
430 %100 = zext i8 %99 to i64
431 %101 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
432 %102 = atomicrmw sub i64* %101, i64 %100 monotonic
433 %103 = sub i64 %102, %100
434 store i64 %103, i64* @ull, align 8
435 %104 = load i8* @uc, align 1
436 %105 = zext i8 %104 to i32
437 %106 = trunc i32 %105 to i8
438 %107 = atomicrmw or i8* @sc, i8 %106 monotonic
439 %108 = or i8 %107, %106
440 store i8 %108, i8* @sc, align 1
441 %109 = load i8* @uc, align 1
442 %110 = zext i8 %109 to i32
443 %111 = trunc i32 %110 to i8
444 %112 = atomicrmw or i8* @uc, i8 %111 monotonic
445 %113 = or i8 %112, %111
446 store i8 %113, i8* @uc, align 1
447 %114 = load i8* @uc, align 1
448 %115 = zext i8 %114 to i32
449 %116 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
450 %117 = trunc i32 %115 to i16
451 %118 = atomicrmw or i16* %116, i16 %117 monotonic
452 %119 = or i16 %118, %117
453 store i16 %119, i16* @ss, align 2
454 %120 = load i8* @uc, align 1
455 %121 = zext i8 %120 to i32
456 %122 = bitcast i8* bitcast (i16* @us to i8*) to i16*
457 %123 = trunc i32 %121 to i16
458 %124 = atomicrmw or i16* %122, i16 %123 monotonic
459 %125 = or i16 %124, %123
460 store i16 %125, i16* @us, align 2
461 %126 = load i8* @uc, align 1
462 %127 = zext i8 %126 to i32
463 %128 = bitcast i8* bitcast (i32* @si to i8*) to i32*
464 %129 = atomicrmw or i32* %128, i32 %127 monotonic
465 %130 = or i32 %129, %127
466 store i32 %130, i32* @si, align 4
467 %131 = load i8* @uc, align 1
468 %132 = zext i8 %131 to i32
469 %133 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
470 %134 = atomicrmw or i32* %133, i32 %132 monotonic
471 %135 = or i32 %134, %132
472 store i32 %135, i32* @ui, align 4
473 %136 = load i8* @uc, align 1
474 %137 = zext i8 %136 to i64
475 %138 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
476 %139 = atomicrmw or i64* %138, i64 %137 monotonic
477 %140 = or i64 %139, %137
478 store i64 %140, i64* @sl, align 8
479 %141 = load i8* @uc, align 1
480 %142 = zext i8 %141 to i64
481 %143 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
482 %144 = atomicrmw or i64* %143, i64 %142 monotonic
483 %145 = or i64 %144, %142
484 store i64 %145, i64* @ul, align 8
485 %146 = load i8* @uc, align 1
486 %147 = zext i8 %146 to i64
487 %148 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
488 %149 = atomicrmw or i64* %148, i64 %147 monotonic
489 %150 = or i64 %149, %147
490 store i64 %150, i64* @sll, align 8
491 %151 = load i8* @uc, align 1
492 %152 = zext i8 %151 to i64
493 %153 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
494 %154 = atomicrmw or i64* %153, i64 %152 monotonic
495 %155 = or i64 %154, %152
496 store i64 %155, i64* @ull, align 8
497 %156 = load i8* @uc, align 1
498 %157 = zext i8 %156 to i32
499 %158 = trunc i32 %157 to i8
500 %159 = atomicrmw xor i8* @sc, i8 %158 monotonic
501 %160 = xor i8 %159, %158
502 store i8 %160, i8* @sc, align 1
503 %161 = load i8* @uc, align 1
504 %162 = zext i8 %161 to i32
505 %163 = trunc i32 %162 to i8
506 %164 = atomicrmw xor i8* @uc, i8 %163 monotonic
507 %165 = xor i8 %164, %163
508 store i8 %165, i8* @uc, align 1
509 %166 = load i8* @uc, align 1
510 %167 = zext i8 %166 to i32
511 %168 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
512 %169 = trunc i32 %167 to i16
513 %170 = atomicrmw xor i16* %168, i16 %169 monotonic
514 %171 = xor i16 %170, %169
515 store i16 %171, i16* @ss, align 2
516 %172 = load i8* @uc, align 1
517 %173 = zext i8 %172 to i32
518 %174 = bitcast i8* bitcast (i16* @us to i8*) to i16*
519 %175 = trunc i32 %173 to i16
520 %176 = atomicrmw xor i16* %174, i16 %175 monotonic
521 %177 = xor i16 %176, %175
522 store i16 %177, i16* @us, align 2
523 %178 = load i8* @uc, align 1
524 %179 = zext i8 %178 to i32
525 %180 = bitcast i8* bitcast (i32* @si to i8*) to i32*
526 %181 = atomicrmw xor i32* %180, i32 %179 monotonic
527 %182 = xor i32 %181, %179
528 store i32 %182, i32* @si, align 4
529 %183 = load i8* @uc, align 1
530 %184 = zext i8 %183 to i32
531 %185 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
532 %186 = atomicrmw xor i32* %185, i32 %184 monotonic
533 %187 = xor i32 %186, %184
534 store i32 %187, i32* @ui, align 4
535 %188 = load i8* @uc, align 1
536 %189 = zext i8 %188 to i64
537 %190 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
538 %191 = atomicrmw xor i64* %190, i64 %189 monotonic
539 %192 = xor i64 %191, %189
540 store i64 %192, i64* @sl, align 8
541 %193 = load i8* @uc, align 1
542 %194 = zext i8 %193 to i64
543 %195 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
544 %196 = atomicrmw xor i64* %195, i64 %194 monotonic
545 %197 = xor i64 %196, %194
546 store i64 %197, i64* @ul, align 8
547 %198 = load i8* @uc, align 1
548 %199 = zext i8 %198 to i64
549 %200 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
550 %201 = atomicrmw xor i64* %200, i64 %199 monotonic
551 %202 = xor i64 %201, %199
552 store i64 %202, i64* @sll, align 8
553 %203 = load i8* @uc, align 1
554 %204 = zext i8 %203 to i64
555 %205 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
556 %206 = atomicrmw xor i64* %205, i64 %204 monotonic
557 %207 = xor i64 %206, %204
558 store i64 %207, i64* @ull, align 8
559 %208 = load i8* @uc, align 1
560 %209 = zext i8 %208 to i32
561 %210 = trunc i32 %209 to i8
562 %211 = atomicrmw and i8* @sc, i8 %210 monotonic
563 %212 = and i8 %211, %210
564 store i8 %212, i8* @sc, align 1
565 %213 = load i8* @uc, align 1
566 %214 = zext i8 %213 to i32
567 %215 = trunc i32 %214 to i8
568 %216 = atomicrmw and i8* @uc, i8 %215 monotonic
569 %217 = and i8 %216, %215
570 store i8 %217, i8* @uc, align 1
571 %218 = load i8* @uc, align 1
572 %219 = zext i8 %218 to i32
573 %220 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
574 %221 = trunc i32 %219 to i16
575 %222 = atomicrmw and i16* %220, i16 %221 monotonic
576 %223 = and i16 %222, %221
577 store i16 %223, i16* @ss, align 2
578 %224 = load i8* @uc, align 1
579 %225 = zext i8 %224 to i32
580 %226 = bitcast i8* bitcast (i16* @us to i8*) to i16*
581 %227 = trunc i32 %225 to i16
582 %228 = atomicrmw and i16* %226, i16 %227 monotonic
583 %229 = and i16 %228, %227
584 store i16 %229, i16* @us, align 2
585 %230 = load i8* @uc, align 1
586 %231 = zext i8 %230 to i32
587 %232 = bitcast i8* bitcast (i32* @si to i8*) to i32*
588 %233 = atomicrmw and i32* %232, i32 %231 monotonic
589 %234 = and i32 %233, %231
590 store i32 %234, i32* @si, align 4
591 %235 = load i8* @uc, align 1
592 %236 = zext i8 %235 to i32
593 %237 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
594 %238 = atomicrmw and i32* %237, i32 %236 monotonic
595 %239 = and i32 %238, %236
596 store i32 %239, i32* @ui, align 4
597 %240 = load i8* @uc, align 1
598 %241 = zext i8 %240 to i64
599 %242 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
600 %243 = atomicrmw and i64* %242, i64 %241 monotonic
601 %244 = and i64 %243, %241
602 store i64 %244, i64* @sl, align 8
603 %245 = load i8* @uc, align 1
604 %246 = zext i8 %245 to i64
605 %247 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
606 %248 = atomicrmw and i64* %247, i64 %246 monotonic
607 %249 = and i64 %248, %246
608 store i64 %249, i64* @ul, align 8
609 %250 = load i8* @uc, align 1
610 %251 = zext i8 %250 to i64
611 %252 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
612 %253 = atomicrmw and i64* %252, i64 %251 monotonic
613 %254 = and i64 %253, %251
614 store i64 %254, i64* @sll, align 8
615 %255 = load i8* @uc, align 1
616 %256 = zext i8 %255 to i64
617 %257 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
618 %258 = atomicrmw and i64* %257, i64 %256 monotonic
619 %259 = and i64 %258, %256
620 store i64 %259, i64* @ull, align 8
621 %260 = load i8* @uc, align 1
622 %261 = zext i8 %260 to i32
623 %262 = trunc i32 %261 to i8
624 %263 = atomicrmw nand i8* @sc, i8 %262 monotonic
625 %264 = xor i8 %263, -1
626 %265 = and i8 %264, %262
627 store i8 %265, i8* @sc, align 1
628 %266 = load i8* @uc, align 1
629 %267 = zext i8 %266 to i32
630 %268 = trunc i32 %267 to i8
631 %269 = atomicrmw nand i8* @uc, i8 %268 monotonic
632 %270 = xor i8 %269, -1
633 %271 = and i8 %270, %268
634 store i8 %271, i8* @uc, align 1
635 %272 = load i8* @uc, align 1
636 %273 = zext i8 %272 to i32
637 %274 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
638 %275 = trunc i32 %273 to i16
639 %276 = atomicrmw nand i16* %274, i16 %275 monotonic
640 %277 = xor i16 %276, -1
641 %278 = and i16 %277, %275
642 store i16 %278, i16* @ss, align 2
643 %279 = load i8* @uc, align 1
644 %280 = zext i8 %279 to i32
645 %281 = bitcast i8* bitcast (i16* @us to i8*) to i16*
646 %282 = trunc i32 %280 to i16
647 %283 = atomicrmw nand i16* %281, i16 %282 monotonic
648 %284 = xor i16 %283, -1
649 %285 = and i16 %284, %282
650 store i16 %285, i16* @us, align 2
651 %286 = load i8* @uc, align 1
652 %287 = zext i8 %286 to i32
653 %288 = bitcast i8* bitcast (i32* @si to i8*) to i32*
654 %289 = atomicrmw nand i32* %288, i32 %287 monotonic
655 %290 = xor i32 %289, -1
656 %291 = and i32 %290, %287
657 store i32 %291, i32* @si, align 4
658 %292 = load i8* @uc, align 1
659 %293 = zext i8 %292 to i32
660 %294 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
661 %295 = atomicrmw nand i32* %294, i32 %293 monotonic
662 %296 = xor i32 %295, -1
663 %297 = and i32 %296, %293
664 store i32 %297, i32* @ui, align 4
665 %298 = load i8* @uc, align 1
666 %299 = zext i8 %298 to i64
667 %300 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
668 %301 = atomicrmw nand i64* %300, i64 %299 monotonic
669 %302 = xor i64 %301, -1
670 %303 = and i64 %302, %299
671 store i64 %303, i64* @sl, align 8
672 %304 = load i8* @uc, align 1
673 %305 = zext i8 %304 to i64
674 %306 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
675 %307 = atomicrmw nand i64* %306, i64 %305 monotonic
676 %308 = xor i64 %307, -1
677 %309 = and i64 %308, %305
678 store i64 %309, i64* @ul, align 8
679 %310 = load i8* @uc, align 1
680 %311 = zext i8 %310 to i64
681 %312 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
682 %313 = atomicrmw nand i64* %312, i64 %311 monotonic
683 %314 = xor i64 %313, -1
684 %315 = and i64 %314, %311
685 store i64 %315, i64* @sll, align 8
686 %316 = load i8* @uc, align 1
687 %317 = zext i8 %316 to i64
688 %318 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
689 %319 = atomicrmw nand i64* %318, i64 %317 monotonic
690 %320 = xor i64 %319, -1
691 %321 = and i64 %320, %317
692 store i64 %321, i64* @ull, align 8
695 return: ; preds = %entry
699 define void @test_compare_and_swap() nounwind {
701 %0 = load i8* @sc, align 1
702 %1 = zext i8 %0 to i32
703 %2 = load i8* @uc, align 1
704 %3 = zext i8 %2 to i32
705 %4 = trunc i32 %3 to i8
706 %5 = trunc i32 %1 to i8
707 %pair6 = cmpxchg i8* @sc, i8 %4, i8 %5 monotonic monotonic
708 %6 = extractvalue { i8, i1 } %pair6, 0
709 store i8 %6, i8* @sc, align 1
710 %7 = load i8* @sc, align 1
711 %8 = zext i8 %7 to i32
712 %9 = load i8* @uc, align 1
713 %10 = zext i8 %9 to i32
714 %11 = trunc i32 %10 to i8
715 %12 = trunc i32 %8 to i8
716 %pair13 = cmpxchg i8* @uc, i8 %11, i8 %12 monotonic monotonic
717 %13 = extractvalue { i8, i1 } %pair13, 0
718 store i8 %13, i8* @uc, align 1
719 %14 = load i8* @sc, align 1
720 %15 = sext i8 %14 to i16
721 %16 = zext i16 %15 to i32
722 %17 = load i8* @uc, align 1
723 %18 = zext i8 %17 to i32
724 %19 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
725 %20 = trunc i32 %18 to i16
726 %21 = trunc i32 %16 to i16
727 %pair22 = cmpxchg i16* %19, i16 %20, i16 %21 monotonic monotonic
728 %22 = extractvalue { i16, i1 } %pair22, 0
729 store i16 %22, i16* @ss, align 2
730 %23 = load i8* @sc, align 1
731 %24 = sext i8 %23 to i16
732 %25 = zext i16 %24 to i32
733 %26 = load i8* @uc, align 1
734 %27 = zext i8 %26 to i32
735 %28 = bitcast i8* bitcast (i16* @us to i8*) to i16*
736 %29 = trunc i32 %27 to i16
737 %30 = trunc i32 %25 to i16
738 %pair31 = cmpxchg i16* %28, i16 %29, i16 %30 monotonic monotonic
739 %31 = extractvalue { i16, i1 } %pair31, 0
740 store i16 %31, i16* @us, align 2
741 %32 = load i8* @sc, align 1
742 %33 = sext i8 %32 to i32
743 %34 = load i8* @uc, align 1
744 %35 = zext i8 %34 to i32
745 %36 = bitcast i8* bitcast (i32* @si to i8*) to i32*
746 %pair37 = cmpxchg i32* %36, i32 %35, i32 %33 monotonic monotonic
747 %37 = extractvalue { i32, i1 } %pair37, 0
748 store i32 %37, i32* @si, align 4
749 %38 = load i8* @sc, align 1
750 %39 = sext i8 %38 to i32
751 %40 = load i8* @uc, align 1
752 %41 = zext i8 %40 to i32
753 %42 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
754 %pair43 = cmpxchg i32* %42, i32 %41, i32 %39 monotonic monotonic
755 %43 = extractvalue { i32, i1 } %pair43, 0
756 store i32 %43, i32* @ui, align 4
757 %44 = load i8* @sc, align 1
758 %45 = sext i8 %44 to i64
759 %46 = load i8* @uc, align 1
760 %47 = zext i8 %46 to i64
761 %48 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
762 %pair49 = cmpxchg i64* %48, i64 %47, i64 %45 monotonic monotonic
763 %49 = extractvalue { i64, i1 } %pair49, 0
764 store i64 %49, i64* @sl, align 8
765 %50 = load i8* @sc, align 1
766 %51 = sext i8 %50 to i64
767 %52 = load i8* @uc, align 1
768 %53 = zext i8 %52 to i64
769 %54 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
770 %pair55 = cmpxchg i64* %54, i64 %53, i64 %51 monotonic monotonic
771 %55 = extractvalue { i64, i1 } %pair55, 0
772 store i64 %55, i64* @ul, align 8
773 %56 = load i8* @sc, align 1
774 %57 = sext i8 %56 to i64
775 %58 = load i8* @uc, align 1
776 %59 = zext i8 %58 to i64
777 %60 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
778 %pair61 = cmpxchg i64* %60, i64 %59, i64 %57 monotonic monotonic
779 %61 = extractvalue { i64, i1 } %pair61, 0
780 store i64 %61, i64* @sll, align 8
781 %62 = load i8* @sc, align 1
782 %63 = sext i8 %62 to i64
783 %64 = load i8* @uc, align 1
784 %65 = zext i8 %64 to i64
785 %66 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
786 %pair67 = cmpxchg i64* %66, i64 %65, i64 %63 monotonic monotonic
787 %67 = extractvalue { i64, i1 } %pair67, 0
788 store i64 %67, i64* @ull, align 8
789 %68 = load i8* @sc, align 1
790 %69 = zext i8 %68 to i32
791 %70 = load i8* @uc, align 1
792 %71 = zext i8 %70 to i32
793 %72 = trunc i32 %71 to i8
794 %73 = trunc i32 %69 to i8
795 %pair74 = cmpxchg i8* @sc, i8 %72, i8 %73 monotonic monotonic
796 %74 = extractvalue { i8, i1 } %pair74, 0
797 %75 = icmp eq i8 %74, %72
798 %76 = zext i1 %75 to i8
799 %77 = zext i8 %76 to i32
800 store i32 %77, i32* @ui, align 4
801 %78 = load i8* @sc, align 1
802 %79 = zext i8 %78 to i32
803 %80 = load i8* @uc, align 1
804 %81 = zext i8 %80 to i32
805 %82 = trunc i32 %81 to i8
806 %83 = trunc i32 %79 to i8
807 %pair84 = cmpxchg i8* @uc, i8 %82, i8 %83 monotonic monotonic
808 %84 = extractvalue { i8, i1 } %pair84, 0
809 %85 = icmp eq i8 %84, %82
810 %86 = zext i1 %85 to i8
811 %87 = zext i8 %86 to i32
812 store i32 %87, i32* @ui, align 4
813 %88 = load i8* @sc, align 1
814 %89 = sext i8 %88 to i16
815 %90 = zext i16 %89 to i32
816 %91 = load i8* @uc, align 1
817 %92 = zext i8 %91 to i32
818 %93 = trunc i32 %92 to i8
819 %94 = trunc i32 %90 to i8
820 %pair95 = cmpxchg i8* bitcast (i16* @ss to i8*), i8 %93, i8 %94 monotonic monotonic
821 %95 = extractvalue { i8, i1 } %pair95, 0
822 %96 = icmp eq i8 %95, %93
823 %97 = zext i1 %96 to i8
824 %98 = zext i8 %97 to i32
825 store i32 %98, i32* @ui, align 4
826 %99 = load i8* @sc, align 1
827 %100 = sext i8 %99 to i16
828 %101 = zext i16 %100 to i32
829 %102 = load i8* @uc, align 1
830 %103 = zext i8 %102 to i32
831 %104 = trunc i32 %103 to i8
832 %105 = trunc i32 %101 to i8
833 %pair106 = cmpxchg i8* bitcast (i16* @us to i8*), i8 %104, i8 %105 monotonic monotonic
834 %106 = extractvalue { i8, i1 } %pair106, 0
835 %107 = icmp eq i8 %106, %104
836 %108 = zext i1 %107 to i8
837 %109 = zext i8 %108 to i32
838 store i32 %109, i32* @ui, align 4
839 %110 = load i8* @sc, align 1
840 %111 = sext i8 %110 to i32
841 %112 = load i8* @uc, align 1
842 %113 = zext i8 %112 to i32
843 %114 = trunc i32 %113 to i8
844 %115 = trunc i32 %111 to i8
845 %pair116 = cmpxchg i8* bitcast (i32* @si to i8*), i8 %114, i8 %115 monotonic monotonic
846 %116 = extractvalue { i8, i1 } %pair116, 0
847 %117 = icmp eq i8 %116, %114
848 %118 = zext i1 %117 to i8
849 %119 = zext i8 %118 to i32
850 store i32 %119, i32* @ui, align 4
851 %120 = load i8* @sc, align 1
852 %121 = sext i8 %120 to i32
853 %122 = load i8* @uc, align 1
854 %123 = zext i8 %122 to i32
855 %124 = trunc i32 %123 to i8
856 %125 = trunc i32 %121 to i8
857 %pair126 = cmpxchg i8* bitcast (i32* @ui to i8*), i8 %124, i8 %125 monotonic monotonic
858 %126 = extractvalue { i8, i1 } %pair126, 0
859 %127 = icmp eq i8 %126, %124
860 %128 = zext i1 %127 to i8
861 %129 = zext i8 %128 to i32
862 store i32 %129, i32* @ui, align 4
863 %130 = load i8* @sc, align 1
864 %131 = sext i8 %130 to i64
865 %132 = load i8* @uc, align 1
866 %133 = zext i8 %132 to i64
867 %134 = trunc i64 %133 to i8
868 %135 = trunc i64 %131 to i8
869 %pair136 = cmpxchg i8* bitcast (i64* @sl to i8*), i8 %134, i8 %135 monotonic monotonic
870 %136 = extractvalue { i8, i1 } %pair136, 0
871 %137 = icmp eq i8 %136, %134
872 %138 = zext i1 %137 to i8
873 %139 = zext i8 %138 to i32
874 store i32 %139, i32* @ui, align 4
875 %140 = load i8* @sc, align 1
876 %141 = sext i8 %140 to i64
877 %142 = load i8* @uc, align 1
878 %143 = zext i8 %142 to i64
879 %144 = trunc i64 %143 to i8
880 %145 = trunc i64 %141 to i8
881 %pair146 = cmpxchg i8* bitcast (i64* @ul to i8*), i8 %144, i8 %145 monotonic monotonic
882 %146 = extractvalue { i8, i1 } %pair146, 0
883 %147 = icmp eq i8 %146, %144
884 %148 = zext i1 %147 to i8
885 %149 = zext i8 %148 to i32
886 store i32 %149, i32* @ui, align 4
887 %150 = load i8* @sc, align 1
888 %151 = sext i8 %150 to i64
889 %152 = load i8* @uc, align 1
890 %153 = zext i8 %152 to i64
891 %154 = trunc i64 %153 to i8
892 %155 = trunc i64 %151 to i8
893 %pair156 = cmpxchg i8* bitcast (i64* @sll to i8*), i8 %154, i8 %155 monotonic monotonic
894 %156 = extractvalue { i8, i1 } %pair156, 0
895 %157 = icmp eq i8 %156, %154
896 %158 = zext i1 %157 to i8
897 %159 = zext i8 %158 to i32
898 store i32 %159, i32* @ui, align 4
899 %160 = load i8* @sc, align 1
900 %161 = sext i8 %160 to i64
901 %162 = load i8* @uc, align 1
902 %163 = zext i8 %162 to i64
903 %164 = trunc i64 %163 to i8
904 %165 = trunc i64 %161 to i8
905 %pair166 = cmpxchg i8* bitcast (i64* @ull to i8*), i8 %164, i8 %165 monotonic monotonic
906 %166 = extractvalue { i8, i1 } %pair166, 0
907 %167 = icmp eq i8 %166, %164
908 %168 = zext i1 %167 to i8
909 %169 = zext i8 %168 to i32
910 store i32 %169, i32* @ui, align 4
913 return: ; preds = %entry
917 define void @test_lock() nounwind {
919 %0 = atomicrmw xchg i8* @sc, i8 1 monotonic
920 store i8 %0, i8* @sc, align 1
921 %1 = atomicrmw xchg i8* @uc, i8 1 monotonic
922 store i8 %1, i8* @uc, align 1
923 %2 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
924 %3 = atomicrmw xchg i16* %2, i16 1 monotonic
925 store i16 %3, i16* @ss, align 2
926 %4 = bitcast i8* bitcast (i16* @us to i8*) to i16*
927 %5 = atomicrmw xchg i16* %4, i16 1 monotonic
928 store i16 %5, i16* @us, align 2
929 %6 = bitcast i8* bitcast (i32* @si to i8*) to i32*
930 %7 = atomicrmw xchg i32* %6, i32 1 monotonic
931 store i32 %7, i32* @si, align 4
932 %8 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
933 %9 = atomicrmw xchg i32* %8, i32 1 monotonic
934 store i32 %9, i32* @ui, align 4
935 %10 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
936 %11 = atomicrmw xchg i64* %10, i64 1 monotonic
937 store i64 %11, i64* @sl, align 8
938 %12 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
939 %13 = atomicrmw xchg i64* %12, i64 1 monotonic
940 store i64 %13, i64* @ul, align 8
941 %14 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
942 %15 = atomicrmw xchg i64* %14, i64 1 monotonic
943 store i64 %15, i64* @sll, align 8
944 %16 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
945 %17 = atomicrmw xchg i64* %16, i64 1 monotonic
946 store i64 %17, i64* @ull, align 8
948 store volatile i8 0, i8* @sc, align 1
949 store volatile i8 0, i8* @uc, align 1
950 %18 = bitcast i8* bitcast (i16* @ss to i8*) to i16*
951 store volatile i16 0, i16* %18, align 2
952 %19 = bitcast i8* bitcast (i16* @us to i8*) to i16*
953 store volatile i16 0, i16* %19, align 2
954 %20 = bitcast i8* bitcast (i32* @si to i8*) to i32*
955 store volatile i32 0, i32* %20, align 4
956 %21 = bitcast i8* bitcast (i32* @ui to i8*) to i32*
957 store volatile i32 0, i32* %21, align 4
958 %22 = bitcast i8* bitcast (i64* @sl to i8*) to i64*
959 store volatile i64 0, i64* %22, align 8
960 %23 = bitcast i8* bitcast (i64* @ul to i8*) to i64*
961 store volatile i64 0, i64* %23, align 8
962 %24 = bitcast i8* bitcast (i64* @sll to i8*) to i64*
963 store volatile i64 0, i64* %24, align 8
964 %25 = bitcast i8* bitcast (i64* @ull to i8*) to i64*
965 store volatile i64 0, i64* %25, align 8
968 return: ; preds = %entry