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