llvm/test/CodeGen/AArch64/tailcall_misched_graph.ll: s/REQUIRE/REQUIRES/
[oota-llvm.git] / test / CodeGen / Hexagon / memops.ll
1 ; RUN: llc -march=hexagon -mcpu=hexagonv5  < %s | FileCheck %s
2 ; Generate MemOps for V4 and above.
3
4 define void @memop_unsigned_char_add5(i8* nocapture %p) nounwind {
5 entry:
6 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
7   %0 = load i8, i8* %p, align 1
8   %conv = zext i8 %0 to i32
9   %add = add nsw i32 %conv, 5
10   %conv1 = trunc i32 %add to i8
11   store i8 %conv1, i8* %p, align 1
12   ret void
13 }
14
15 define void @memop_unsigned_char_add(i8* nocapture %p, i8 zeroext %x) nounwind {
16 entry:
17 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
18   %conv = zext i8 %x to i32
19   %0 = load i8, i8* %p, align 1
20   %conv1 = zext i8 %0 to i32
21   %add = add nsw i32 %conv1, %conv
22   %conv2 = trunc i32 %add to i8
23   store i8 %conv2, i8* %p, align 1
24   ret void
25 }
26
27 define void @memop_unsigned_char_sub(i8* nocapture %p, i8 zeroext %x) nounwind {
28 entry:
29 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
30   %conv = zext i8 %x to i32
31   %0 = load i8, i8* %p, align 1
32   %conv1 = zext i8 %0 to i32
33   %sub = sub nsw i32 %conv1, %conv
34   %conv2 = trunc i32 %sub to i8
35   store i8 %conv2, i8* %p, align 1
36   ret void
37 }
38
39 define void @memop_unsigned_char_or(i8* nocapture %p, i8 zeroext %x) nounwind {
40 entry:
41 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
42   %0 = load i8, i8* %p, align 1
43   %or3 = or i8 %0, %x
44   store i8 %or3, i8* %p, align 1
45   ret void
46 }
47
48 define void @memop_unsigned_char_and(i8* nocapture %p, i8 zeroext %x) nounwind {
49 entry:
50 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
51   %0 = load i8, i8* %p, align 1
52   %and3 = and i8 %0, %x
53   store i8 %and3, i8* %p, align 1
54   ret void
55 }
56
57 define void @memop_unsigned_char_clrbit(i8* nocapture %p) nounwind {
58 entry:
59 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
60   %0 = load i8, i8* %p, align 1
61   %conv = zext i8 %0 to i32
62   %and = and i32 %conv, 223
63   %conv1 = trunc i32 %and to i8
64   store i8 %conv1, i8* %p, align 1
65   ret void
66 }
67
68 define void @memop_unsigned_char_setbit(i8* nocapture %p) nounwind {
69 entry:
70 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
71   %0 = load i8, i8* %p, align 1
72   %conv = zext i8 %0 to i32
73   %or = or i32 %conv, 128
74   %conv1 = trunc i32 %or to i8
75   store i8 %conv1, i8* %p, align 1
76   ret void
77 }
78
79 define void @memop_unsigned_char_add5_index(i8* nocapture %p, i32 %i) nounwind {
80 entry:
81 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
82   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
83   %0 = load i8, i8* %add.ptr, align 1
84   %conv = zext i8 %0 to i32
85   %add = add nsw i32 %conv, 5
86   %conv1 = trunc i32 %add to i8
87   store i8 %conv1, i8* %add.ptr, align 1
88   ret void
89 }
90
91 define void @memop_unsigned_char_add_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind {
92 entry:
93 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
94   %conv = zext i8 %x to i32
95   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
96   %0 = load i8, i8* %add.ptr, align 1
97   %conv1 = zext i8 %0 to i32
98   %add = add nsw i32 %conv1, %conv
99   %conv2 = trunc i32 %add to i8
100   store i8 %conv2, i8* %add.ptr, align 1
101   ret void
102 }
103
104 define void @memop_unsigned_char_sub_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind {
105 entry:
106 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
107   %conv = zext i8 %x to i32
108   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
109   %0 = load i8, i8* %add.ptr, align 1
110   %conv1 = zext i8 %0 to i32
111   %sub = sub nsw i32 %conv1, %conv
112   %conv2 = trunc i32 %sub to i8
113   store i8 %conv2, i8* %add.ptr, align 1
114   ret void
115 }
116
117 define void @memop_unsigned_char_or_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind {
118 entry:
119 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
120   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
121   %0 = load i8, i8* %add.ptr, align 1
122   %or3 = or i8 %0, %x
123   store i8 %or3, i8* %add.ptr, align 1
124   ret void
125 }
126
127 define void @memop_unsigned_char_and_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind {
128 entry:
129 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
130   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
131   %0 = load i8, i8* %add.ptr, align 1
132   %and3 = and i8 %0, %x
133   store i8 %and3, i8* %add.ptr, align 1
134   ret void
135 }
136
137 define void @memop_unsigned_char_clrbit_index(i8* nocapture %p, i32 %i) nounwind {
138 entry:
139 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
140   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
141   %0 = load i8, i8* %add.ptr, align 1
142   %conv = zext i8 %0 to i32
143   %and = and i32 %conv, 223
144   %conv1 = trunc i32 %and to i8
145   store i8 %conv1, i8* %add.ptr, align 1
146   ret void
147 }
148
149 define void @memop_unsigned_char_setbit_index(i8* nocapture %p, i32 %i) nounwind {
150 entry:
151 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
152   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
153   %0 = load i8, i8* %add.ptr, align 1
154   %conv = zext i8 %0 to i32
155   %or = or i32 %conv, 128
156   %conv1 = trunc i32 %or to i8
157   store i8 %conv1, i8* %add.ptr, align 1
158   ret void
159 }
160
161 define void @memop_unsigned_char_add5_index5(i8* nocapture %p) nounwind {
162 entry:
163 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}#5
164   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
165   %0 = load i8, i8* %add.ptr, align 1
166   %conv = zext i8 %0 to i32
167   %add = add nsw i32 %conv, 5
168   %conv1 = trunc i32 %add to i8
169   store i8 %conv1, i8* %add.ptr, align 1
170   ret void
171 }
172
173 define void @memop_unsigned_char_add_index5(i8* nocapture %p, i8 zeroext %x) nounwind {
174 entry:
175 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}r{{[0-9]+}}
176   %conv = zext i8 %x to i32
177   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
178   %0 = load i8, i8* %add.ptr, align 1
179   %conv1 = zext i8 %0 to i32
180   %add = add nsw i32 %conv1, %conv
181   %conv2 = trunc i32 %add to i8
182   store i8 %conv2, i8* %add.ptr, align 1
183   ret void
184 }
185
186 define void @memop_unsigned_char_sub_index5(i8* nocapture %p, i8 zeroext %x) nounwind {
187 entry:
188 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}-={{ *}}r{{[0-9]+}}
189   %conv = zext i8 %x to i32
190   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
191   %0 = load i8, i8* %add.ptr, align 1
192   %conv1 = zext i8 %0 to i32
193   %sub = sub nsw i32 %conv1, %conv
194   %conv2 = trunc i32 %sub to i8
195   store i8 %conv2, i8* %add.ptr, align 1
196   ret void
197 }
198
199 define void @memop_unsigned_char_or_index5(i8* nocapture %p, i8 zeroext %x) nounwind {
200 entry:
201 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}|={{ *}}r{{[0-9]+}}
202   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
203   %0 = load i8, i8* %add.ptr, align 1
204   %or3 = or i8 %0, %x
205   store i8 %or3, i8* %add.ptr, align 1
206   ret void
207 }
208
209 define void @memop_unsigned_char_and_index5(i8* nocapture %p, i8 zeroext %x) nounwind {
210 entry:
211 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}&={{ *}}r{{[0-9]+}}
212   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
213   %0 = load i8, i8* %add.ptr, align 1
214   %and3 = and i8 %0, %x
215   store i8 %and3, i8* %add.ptr, align 1
216   ret void
217 }
218
219 define void @memop_unsigned_char_clrbit_index5(i8* nocapture %p) nounwind {
220 entry:
221 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
222   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
223   %0 = load i8, i8* %add.ptr, align 1
224   %conv = zext i8 %0 to i32
225   %and = and i32 %conv, 223
226   %conv1 = trunc i32 %and to i8
227   store i8 %conv1, i8* %add.ptr, align 1
228   ret void
229 }
230
231 define void @memop_unsigned_char_setbit_index5(i8* nocapture %p) nounwind {
232 entry:
233 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
234   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
235   %0 = load i8, i8* %add.ptr, align 1
236   %conv = zext i8 %0 to i32
237   %or = or i32 %conv, 128
238   %conv1 = trunc i32 %or to i8
239   store i8 %conv1, i8* %add.ptr, align 1
240   ret void
241 }
242
243 define void @memop_signed_char_add5(i8* nocapture %p) nounwind {
244 entry:
245 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
246   %0 = load i8, i8* %p, align 1
247   %conv2 = zext i8 %0 to i32
248   %add = add nsw i32 %conv2, 5
249   %conv1 = trunc i32 %add to i8
250   store i8 %conv1, i8* %p, align 1
251   ret void
252 }
253
254 define void @memop_signed_char_add(i8* nocapture %p, i8 signext %x) nounwind {
255 entry:
256 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
257   %conv4 = zext i8 %x to i32
258   %0 = load i8, i8* %p, align 1
259   %conv13 = zext i8 %0 to i32
260   %add = add nsw i32 %conv13, %conv4
261   %conv2 = trunc i32 %add to i8
262   store i8 %conv2, i8* %p, align 1
263   ret void
264 }
265
266 define void @memop_signed_char_sub(i8* nocapture %p, i8 signext %x) nounwind {
267 entry:
268 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
269   %conv4 = zext i8 %x to i32
270   %0 = load i8, i8* %p, align 1
271   %conv13 = zext i8 %0 to i32
272   %sub = sub nsw i32 %conv13, %conv4
273   %conv2 = trunc i32 %sub to i8
274   store i8 %conv2, i8* %p, align 1
275   ret void
276 }
277
278 define void @memop_signed_char_or(i8* nocapture %p, i8 signext %x) nounwind {
279 entry:
280 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
281   %0 = load i8, i8* %p, align 1
282   %or3 = or i8 %0, %x
283   store i8 %or3, i8* %p, align 1
284   ret void
285 }
286
287 define void @memop_signed_char_and(i8* nocapture %p, i8 signext %x) nounwind {
288 entry:
289 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
290   %0 = load i8, i8* %p, align 1
291   %and3 = and i8 %0, %x
292   store i8 %and3, i8* %p, align 1
293   ret void
294 }
295
296 define void @memop_signed_char_clrbit(i8* nocapture %p) nounwind {
297 entry:
298 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
299   %0 = load i8, i8* %p, align 1
300   %conv2 = zext i8 %0 to i32
301   %and = and i32 %conv2, 223
302   %conv1 = trunc i32 %and to i8
303   store i8 %conv1, i8* %p, align 1
304   ret void
305 }
306
307 define void @memop_signed_char_setbit(i8* nocapture %p) nounwind {
308 entry:
309 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
310   %0 = load i8, i8* %p, align 1
311   %conv2 = zext i8 %0 to i32
312   %or = or i32 %conv2, 128
313   %conv1 = trunc i32 %or to i8
314   store i8 %conv1, i8* %p, align 1
315   ret void
316 }
317
318 define void @memop_signed_char_add5_index(i8* nocapture %p, i32 %i) nounwind {
319 entry:
320 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
321   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
322   %0 = load i8, i8* %add.ptr, align 1
323   %conv2 = zext i8 %0 to i32
324   %add = add nsw i32 %conv2, 5
325   %conv1 = trunc i32 %add to i8
326   store i8 %conv1, i8* %add.ptr, align 1
327   ret void
328 }
329
330 define void @memop_signed_char_add_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind {
331 entry:
332 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
333   %conv4 = zext i8 %x to i32
334   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
335   %0 = load i8, i8* %add.ptr, align 1
336   %conv13 = zext i8 %0 to i32
337   %add = add nsw i32 %conv13, %conv4
338   %conv2 = trunc i32 %add to i8
339   store i8 %conv2, i8* %add.ptr, align 1
340   ret void
341 }
342
343 define void @memop_signed_char_sub_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind {
344 entry:
345 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
346   %conv4 = zext i8 %x to i32
347   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
348   %0 = load i8, i8* %add.ptr, align 1
349   %conv13 = zext i8 %0 to i32
350   %sub = sub nsw i32 %conv13, %conv4
351   %conv2 = trunc i32 %sub to i8
352   store i8 %conv2, i8* %add.ptr, align 1
353   ret void
354 }
355
356 define void @memop_signed_char_or_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind {
357 entry:
358 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
359   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
360   %0 = load i8, i8* %add.ptr, align 1
361   %or3 = or i8 %0, %x
362   store i8 %or3, i8* %add.ptr, align 1
363   ret void
364 }
365
366 define void @memop_signed_char_and_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind {
367 entry:
368 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
369   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
370   %0 = load i8, i8* %add.ptr, align 1
371   %and3 = and i8 %0, %x
372   store i8 %and3, i8* %add.ptr, align 1
373   ret void
374 }
375
376 define void @memop_signed_char_clrbit_index(i8* nocapture %p, i32 %i) nounwind {
377 entry:
378 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
379   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
380   %0 = load i8, i8* %add.ptr, align 1
381   %conv2 = zext i8 %0 to i32
382   %and = and i32 %conv2, 223
383   %conv1 = trunc i32 %and to i8
384   store i8 %conv1, i8* %add.ptr, align 1
385   ret void
386 }
387
388 define void @memop_signed_char_setbit_index(i8* nocapture %p, i32 %i) nounwind {
389 entry:
390 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
391   %add.ptr = getelementptr inbounds i8, i8* %p, i32 %i
392   %0 = load i8, i8* %add.ptr, align 1
393   %conv2 = zext i8 %0 to i32
394   %or = or i32 %conv2, 128
395   %conv1 = trunc i32 %or to i8
396   store i8 %conv1, i8* %add.ptr, align 1
397   ret void
398 }
399
400 define void @memop_signed_char_add5_index5(i8* nocapture %p) nounwind {
401 entry:
402 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}#5
403   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
404   %0 = load i8, i8* %add.ptr, align 1
405   %conv2 = zext i8 %0 to i32
406   %add = add nsw i32 %conv2, 5
407   %conv1 = trunc i32 %add to i8
408   store i8 %conv1, i8* %add.ptr, align 1
409   ret void
410 }
411
412 define void @memop_signed_char_add_index5(i8* nocapture %p, i8 signext %x) nounwind {
413 entry:
414 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}r{{[0-9]+}}
415   %conv4 = zext i8 %x to i32
416   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
417   %0 = load i8, i8* %add.ptr, align 1
418   %conv13 = zext i8 %0 to i32
419   %add = add nsw i32 %conv13, %conv4
420   %conv2 = trunc i32 %add to i8
421   store i8 %conv2, i8* %add.ptr, align 1
422   ret void
423 }
424
425 define void @memop_signed_char_sub_index5(i8* nocapture %p, i8 signext %x) nounwind {
426 entry:
427 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}-={{ *}}r{{[0-9]+}}
428   %conv4 = zext i8 %x to i32
429   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
430   %0 = load i8, i8* %add.ptr, align 1
431   %conv13 = zext i8 %0 to i32
432   %sub = sub nsw i32 %conv13, %conv4
433   %conv2 = trunc i32 %sub to i8
434   store i8 %conv2, i8* %add.ptr, align 1
435   ret void
436 }
437
438 define void @memop_signed_char_or_index5(i8* nocapture %p, i8 signext %x) nounwind {
439 entry:
440 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}|={{ *}}r{{[0-9]+}}
441   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
442   %0 = load i8, i8* %add.ptr, align 1
443   %or3 = or i8 %0, %x
444   store i8 %or3, i8* %add.ptr, align 1
445   ret void
446 }
447
448 define void @memop_signed_char_and_index5(i8* nocapture %p, i8 signext %x) nounwind {
449 entry:
450 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}&={{ *}}r{{[0-9]+}}
451   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
452   %0 = load i8, i8* %add.ptr, align 1
453   %and3 = and i8 %0, %x
454   store i8 %and3, i8* %add.ptr, align 1
455   ret void
456 }
457
458 define void @memop_signed_char_clrbit_index5(i8* nocapture %p) nounwind {
459 entry:
460 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
461   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
462   %0 = load i8, i8* %add.ptr, align 1
463   %conv2 = zext i8 %0 to i32
464   %and = and i32 %conv2, 223
465   %conv1 = trunc i32 %and to i8
466   store i8 %conv1, i8* %add.ptr, align 1
467   ret void
468 }
469
470 define void @memop_signed_char_setbit_index5(i8* nocapture %p) nounwind {
471 entry:
472 ; CHECK:  memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
473   %add.ptr = getelementptr inbounds i8, i8* %p, i32 5
474   %0 = load i8, i8* %add.ptr, align 1
475   %conv2 = zext i8 %0 to i32
476   %or = or i32 %conv2, 128
477   %conv1 = trunc i32 %or to i8
478   store i8 %conv1, i8* %add.ptr, align 1
479   ret void
480 }
481
482 define void @memop_unsigned_short_add5(i16* nocapture %p) nounwind {
483 entry:
484 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
485   %0 = load i16, i16* %p, align 2
486   %conv = zext i16 %0 to i32
487   %add = add nsw i32 %conv, 5
488   %conv1 = trunc i32 %add to i16
489   store i16 %conv1, i16* %p, align 2
490   ret void
491 }
492
493 define void @memop_unsigned_short_add(i16* nocapture %p, i16 zeroext %x) nounwind {
494 entry:
495 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
496   %conv = zext i16 %x to i32
497   %0 = load i16, i16* %p, align 2
498   %conv1 = zext i16 %0 to i32
499   %add = add nsw i32 %conv1, %conv
500   %conv2 = trunc i32 %add to i16
501   store i16 %conv2, i16* %p, align 2
502   ret void
503 }
504
505 define void @memop_unsigned_short_sub(i16* nocapture %p, i16 zeroext %x) nounwind {
506 entry:
507 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
508   %conv = zext i16 %x to i32
509   %0 = load i16, i16* %p, align 2
510   %conv1 = zext i16 %0 to i32
511   %sub = sub nsw i32 %conv1, %conv
512   %conv2 = trunc i32 %sub to i16
513   store i16 %conv2, i16* %p, align 2
514   ret void
515 }
516
517 define void @memop_unsigned_short_or(i16* nocapture %p, i16 zeroext %x) nounwind {
518 entry:
519 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
520   %0 = load i16, i16* %p, align 2
521   %or3 = or i16 %0, %x
522   store i16 %or3, i16* %p, align 2
523   ret void
524 }
525
526 define void @memop_unsigned_short_and(i16* nocapture %p, i16 zeroext %x) nounwind {
527 entry:
528 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
529   %0 = load i16, i16* %p, align 2
530   %and3 = and i16 %0, %x
531   store i16 %and3, i16* %p, align 2
532   ret void
533 }
534
535 define void @memop_unsigned_short_clrbit(i16* nocapture %p) nounwind {
536 entry:
537 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
538   %0 = load i16, i16* %p, align 2
539   %conv = zext i16 %0 to i32
540   %and = and i32 %conv, 65503
541   %conv1 = trunc i32 %and to i16
542   store i16 %conv1, i16* %p, align 2
543   ret void
544 }
545
546 define void @memop_unsigned_short_setbit(i16* nocapture %p) nounwind {
547 entry:
548 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
549   %0 = load i16, i16* %p, align 2
550   %conv = zext i16 %0 to i32
551   %or = or i32 %conv, 128
552   %conv1 = trunc i32 %or to i16
553   store i16 %conv1, i16* %p, align 2
554   ret void
555 }
556
557 define void @memop_unsigned_short_add5_index(i16* nocapture %p, i32 %i) nounwind {
558 entry:
559 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
560   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
561   %0 = load i16, i16* %add.ptr, align 2
562   %conv = zext i16 %0 to i32
563   %add = add nsw i32 %conv, 5
564   %conv1 = trunc i32 %add to i16
565   store i16 %conv1, i16* %add.ptr, align 2
566   ret void
567 }
568
569 define void @memop_unsigned_short_add_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind {
570 entry:
571 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
572   %conv = zext i16 %x to i32
573   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
574   %0 = load i16, i16* %add.ptr, align 2
575   %conv1 = zext i16 %0 to i32
576   %add = add nsw i32 %conv1, %conv
577   %conv2 = trunc i32 %add to i16
578   store i16 %conv2, i16* %add.ptr, align 2
579   ret void
580 }
581
582 define void @memop_unsigned_short_sub_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind {
583 entry:
584 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
585   %conv = zext i16 %x to i32
586   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
587   %0 = load i16, i16* %add.ptr, align 2
588   %conv1 = zext i16 %0 to i32
589   %sub = sub nsw i32 %conv1, %conv
590   %conv2 = trunc i32 %sub to i16
591   store i16 %conv2, i16* %add.ptr, align 2
592   ret void
593 }
594
595 define void @memop_unsigned_short_or_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind {
596 entry:
597 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
598   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
599   %0 = load i16, i16* %add.ptr, align 2
600   %or3 = or i16 %0, %x
601   store i16 %or3, i16* %add.ptr, align 2
602   ret void
603 }
604
605 define void @memop_unsigned_short_and_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind {
606 entry:
607 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
608   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
609   %0 = load i16, i16* %add.ptr, align 2
610   %and3 = and i16 %0, %x
611   store i16 %and3, i16* %add.ptr, align 2
612   ret void
613 }
614
615 define void @memop_unsigned_short_clrbit_index(i16* nocapture %p, i32 %i) nounwind {
616 entry:
617 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
618   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
619   %0 = load i16, i16* %add.ptr, align 2
620   %conv = zext i16 %0 to i32
621   %and = and i32 %conv, 65503
622   %conv1 = trunc i32 %and to i16
623   store i16 %conv1, i16* %add.ptr, align 2
624   ret void
625 }
626
627 define void @memop_unsigned_short_setbit_index(i16* nocapture %p, i32 %i) nounwind {
628 entry:
629 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
630   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
631   %0 = load i16, i16* %add.ptr, align 2
632   %conv = zext i16 %0 to i32
633   %or = or i32 %conv, 128
634   %conv1 = trunc i32 %or to i16
635   store i16 %conv1, i16* %add.ptr, align 2
636   ret void
637 }
638
639 define void @memop_unsigned_short_add5_index5(i16* nocapture %p) nounwind {
640 entry:
641 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}#5
642   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
643   %0 = load i16, i16* %add.ptr, align 2
644   %conv = zext i16 %0 to i32
645   %add = add nsw i32 %conv, 5
646   %conv1 = trunc i32 %add to i16
647   store i16 %conv1, i16* %add.ptr, align 2
648   ret void
649 }
650
651 define void @memop_unsigned_short_add_index5(i16* nocapture %p, i16 zeroext %x) nounwind {
652 entry:
653 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}r{{[0-9]+}}
654   %conv = zext i16 %x to i32
655   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
656   %0 = load i16, i16* %add.ptr, align 2
657   %conv1 = zext i16 %0 to i32
658   %add = add nsw i32 %conv1, %conv
659   %conv2 = trunc i32 %add to i16
660   store i16 %conv2, i16* %add.ptr, align 2
661   ret void
662 }
663
664 define void @memop_unsigned_short_sub_index5(i16* nocapture %p, i16 zeroext %x) nounwind {
665 entry:
666 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}-={{ *}}r{{[0-9]+}}
667   %conv = zext i16 %x to i32
668   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
669   %0 = load i16, i16* %add.ptr, align 2
670   %conv1 = zext i16 %0 to i32
671   %sub = sub nsw i32 %conv1, %conv
672   %conv2 = trunc i32 %sub to i16
673   store i16 %conv2, i16* %add.ptr, align 2
674   ret void
675 }
676
677 define void @memop_unsigned_short_or_index5(i16* nocapture %p, i16 zeroext %x) nounwind {
678 entry:
679 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}|={{ *}}r{{[0-9]+}}
680   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
681   %0 = load i16, i16* %add.ptr, align 2
682   %or3 = or i16 %0, %x
683   store i16 %or3, i16* %add.ptr, align 2
684   ret void
685 }
686
687 define void @memop_unsigned_short_and_index5(i16* nocapture %p, i16 zeroext %x) nounwind {
688 entry:
689 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}&={{ *}}r{{[0-9]+}}
690   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
691   %0 = load i16, i16* %add.ptr, align 2
692   %and3 = and i16 %0, %x
693   store i16 %and3, i16* %add.ptr, align 2
694   ret void
695 }
696
697 define void @memop_unsigned_short_clrbit_index5(i16* nocapture %p) nounwind {
698 entry:
699 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
700   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
701   %0 = load i16, i16* %add.ptr, align 2
702   %conv = zext i16 %0 to i32
703   %and = and i32 %conv, 65503
704   %conv1 = trunc i32 %and to i16
705   store i16 %conv1, i16* %add.ptr, align 2
706   ret void
707 }
708
709 define void @memop_unsigned_short_setbit_index5(i16* nocapture %p) nounwind {
710 entry:
711 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
712   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
713   %0 = load i16, i16* %add.ptr, align 2
714   %conv = zext i16 %0 to i32
715   %or = or i32 %conv, 128
716   %conv1 = trunc i32 %or to i16
717   store i16 %conv1, i16* %add.ptr, align 2
718   ret void
719 }
720
721 define void @memop_signed_short_add5(i16* nocapture %p) nounwind {
722 entry:
723 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
724   %0 = load i16, i16* %p, align 2
725   %conv2 = zext i16 %0 to i32
726   %add = add nsw i32 %conv2, 5
727   %conv1 = trunc i32 %add to i16
728   store i16 %conv1, i16* %p, align 2
729   ret void
730 }
731
732 define void @memop_signed_short_add(i16* nocapture %p, i16 signext %x) nounwind {
733 entry:
734 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
735   %conv4 = zext i16 %x to i32
736   %0 = load i16, i16* %p, align 2
737   %conv13 = zext i16 %0 to i32
738   %add = add nsw i32 %conv13, %conv4
739   %conv2 = trunc i32 %add to i16
740   store i16 %conv2, i16* %p, align 2
741   ret void
742 }
743
744 define void @memop_signed_short_sub(i16* nocapture %p, i16 signext %x) nounwind {
745 entry:
746 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
747   %conv4 = zext i16 %x to i32
748   %0 = load i16, i16* %p, align 2
749   %conv13 = zext i16 %0 to i32
750   %sub = sub nsw i32 %conv13, %conv4
751   %conv2 = trunc i32 %sub to i16
752   store i16 %conv2, i16* %p, align 2
753   ret void
754 }
755
756 define void @memop_signed_short_or(i16* nocapture %p, i16 signext %x) nounwind {
757 entry:
758 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
759   %0 = load i16, i16* %p, align 2
760   %or3 = or i16 %0, %x
761   store i16 %or3, i16* %p, align 2
762   ret void
763 }
764
765 define void @memop_signed_short_and(i16* nocapture %p, i16 signext %x) nounwind {
766 entry:
767 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
768   %0 = load i16, i16* %p, align 2
769   %and3 = and i16 %0, %x
770   store i16 %and3, i16* %p, align 2
771   ret void
772 }
773
774 define void @memop_signed_short_clrbit(i16* nocapture %p) nounwind {
775 entry:
776 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
777   %0 = load i16, i16* %p, align 2
778   %conv2 = zext i16 %0 to i32
779   %and = and i32 %conv2, 65503
780   %conv1 = trunc i32 %and to i16
781   store i16 %conv1, i16* %p, align 2
782   ret void
783 }
784
785 define void @memop_signed_short_setbit(i16* nocapture %p) nounwind {
786 entry:
787 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
788   %0 = load i16, i16* %p, align 2
789   %conv2 = zext i16 %0 to i32
790   %or = or i32 %conv2, 128
791   %conv1 = trunc i32 %or to i16
792   store i16 %conv1, i16* %p, align 2
793   ret void
794 }
795
796 define void @memop_signed_short_add5_index(i16* nocapture %p, i32 %i) nounwind {
797 entry:
798 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
799   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
800   %0 = load i16, i16* %add.ptr, align 2
801   %conv2 = zext i16 %0 to i32
802   %add = add nsw i32 %conv2, 5
803   %conv1 = trunc i32 %add to i16
804   store i16 %conv1, i16* %add.ptr, align 2
805   ret void
806 }
807
808 define void @memop_signed_short_add_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind {
809 entry:
810 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
811   %conv4 = zext i16 %x to i32
812   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
813   %0 = load i16, i16* %add.ptr, align 2
814   %conv13 = zext i16 %0 to i32
815   %add = add nsw i32 %conv13, %conv4
816   %conv2 = trunc i32 %add to i16
817   store i16 %conv2, i16* %add.ptr, align 2
818   ret void
819 }
820
821 define void @memop_signed_short_sub_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind {
822 entry:
823 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
824   %conv4 = zext i16 %x to i32
825   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
826   %0 = load i16, i16* %add.ptr, align 2
827   %conv13 = zext i16 %0 to i32
828   %sub = sub nsw i32 %conv13, %conv4
829   %conv2 = trunc i32 %sub to i16
830   store i16 %conv2, i16* %add.ptr, align 2
831   ret void
832 }
833
834 define void @memop_signed_short_or_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind {
835 entry:
836 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
837   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
838   %0 = load i16, i16* %add.ptr, align 2
839   %or3 = or i16 %0, %x
840   store i16 %or3, i16* %add.ptr, align 2
841   ret void
842 }
843
844 define void @memop_signed_short_and_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind {
845 entry:
846 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
847   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
848   %0 = load i16, i16* %add.ptr, align 2
849   %and3 = and i16 %0, %x
850   store i16 %and3, i16* %add.ptr, align 2
851   ret void
852 }
853
854 define void @memop_signed_short_clrbit_index(i16* nocapture %p, i32 %i) nounwind {
855 entry:
856 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
857   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
858   %0 = load i16, i16* %add.ptr, align 2
859   %conv2 = zext i16 %0 to i32
860   %and = and i32 %conv2, 65503
861   %conv1 = trunc i32 %and to i16
862   store i16 %conv1, i16* %add.ptr, align 2
863   ret void
864 }
865
866 define void @memop_signed_short_setbit_index(i16* nocapture %p, i32 %i) nounwind {
867 entry:
868 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
869   %add.ptr = getelementptr inbounds i16, i16* %p, i32 %i
870   %0 = load i16, i16* %add.ptr, align 2
871   %conv2 = zext i16 %0 to i32
872   %or = or i32 %conv2, 128
873   %conv1 = trunc i32 %or to i16
874   store i16 %conv1, i16* %add.ptr, align 2
875   ret void
876 }
877
878 define void @memop_signed_short_add5_index5(i16* nocapture %p) nounwind {
879 entry:
880 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}#5
881   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
882   %0 = load i16, i16* %add.ptr, align 2
883   %conv2 = zext i16 %0 to i32
884   %add = add nsw i32 %conv2, 5
885   %conv1 = trunc i32 %add to i16
886   store i16 %conv1, i16* %add.ptr, align 2
887   ret void
888 }
889
890 define void @memop_signed_short_add_index5(i16* nocapture %p, i16 signext %x) nounwind {
891 entry:
892 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}r{{[0-9]+}}
893   %conv4 = zext i16 %x to i32
894   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
895   %0 = load i16, i16* %add.ptr, align 2
896   %conv13 = zext i16 %0 to i32
897   %add = add nsw i32 %conv13, %conv4
898   %conv2 = trunc i32 %add to i16
899   store i16 %conv2, i16* %add.ptr, align 2
900   ret void
901 }
902
903 define void @memop_signed_short_sub_index5(i16* nocapture %p, i16 signext %x) nounwind {
904 entry:
905 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}-={{ *}}r{{[0-9]+}}
906   %conv4 = zext i16 %x to i32
907   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
908   %0 = load i16, i16* %add.ptr, align 2
909   %conv13 = zext i16 %0 to i32
910   %sub = sub nsw i32 %conv13, %conv4
911   %conv2 = trunc i32 %sub to i16
912   store i16 %conv2, i16* %add.ptr, align 2
913   ret void
914 }
915
916 define void @memop_signed_short_or_index5(i16* nocapture %p, i16 signext %x) nounwind {
917 entry:
918 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}|={{ *}}r{{[0-9]+}}
919   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
920   %0 = load i16, i16* %add.ptr, align 2
921   %or3 = or i16 %0, %x
922   store i16 %or3, i16* %add.ptr, align 2
923   ret void
924 }
925
926 define void @memop_signed_short_and_index5(i16* nocapture %p, i16 signext %x) nounwind {
927 entry:
928 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}&={{ *}}r{{[0-9]+}}
929   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
930   %0 = load i16, i16* %add.ptr, align 2
931   %and3 = and i16 %0, %x
932   store i16 %and3, i16* %add.ptr, align 2
933   ret void
934 }
935
936 define void @memop_signed_short_clrbit_index5(i16* nocapture %p) nounwind {
937 entry:
938 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
939   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
940   %0 = load i16, i16* %add.ptr, align 2
941   %conv2 = zext i16 %0 to i32
942   %and = and i32 %conv2, 65503
943   %conv1 = trunc i32 %and to i16
944   store i16 %conv1, i16* %add.ptr, align 2
945   ret void
946 }
947
948 define void @memop_signed_short_setbit_index5(i16* nocapture %p) nounwind {
949 entry:
950 ; CHECK:  memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
951   %add.ptr = getelementptr inbounds i16, i16* %p, i32 5
952   %0 = load i16, i16* %add.ptr, align 2
953   %conv2 = zext i16 %0 to i32
954   %or = or i32 %conv2, 128
955   %conv1 = trunc i32 %or to i16
956   store i16 %conv1, i16* %add.ptr, align 2
957   ret void
958 }
959
960 define void @memop_signed_int_add5(i32* nocapture %p) nounwind {
961 entry:
962 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
963   %0 = load i32, i32* %p, align 4
964   %add = add i32 %0, 5
965   store i32 %add, i32* %p, align 4
966   ret void
967 }
968
969 define void @memop_signed_int_add(i32* nocapture %p, i32 %x) nounwind {
970 entry:
971 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
972   %0 = load i32, i32* %p, align 4
973   %add = add i32 %0, %x
974   store i32 %add, i32* %p, align 4
975   ret void
976 }
977
978 define void @memop_signed_int_sub(i32* nocapture %p, i32 %x) nounwind {
979 entry:
980 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
981   %0 = load i32, i32* %p, align 4
982   %sub = sub i32 %0, %x
983   store i32 %sub, i32* %p, align 4
984   ret void
985 }
986
987 define void @memop_signed_int_or(i32* nocapture %p, i32 %x) nounwind {
988 entry:
989 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
990   %0 = load i32, i32* %p, align 4
991   %or = or i32 %0, %x
992   store i32 %or, i32* %p, align 4
993   ret void
994 }
995
996 define void @memop_signed_int_and(i32* nocapture %p, i32 %x) nounwind {
997 entry:
998 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
999   %0 = load i32, i32* %p, align 4
1000   %and = and i32 %0, %x
1001   store i32 %and, i32* %p, align 4
1002   ret void
1003 }
1004
1005 define void @memop_signed_int_clrbit(i32* nocapture %p) nounwind {
1006 entry:
1007 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
1008   %0 = load i32, i32* %p, align 4
1009   %and = and i32 %0, -33
1010   store i32 %and, i32* %p, align 4
1011   ret void
1012 }
1013
1014 define void @memop_signed_int_setbit(i32* nocapture %p) nounwind {
1015 entry:
1016 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
1017   %0 = load i32, i32* %p, align 4
1018   %or = or i32 %0, 128
1019   store i32 %or, i32* %p, align 4
1020   ret void
1021 }
1022
1023 define void @memop_signed_int_add5_index(i32* nocapture %p, i32 %i) nounwind {
1024 entry:
1025 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
1026   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1027   %0 = load i32, i32* %add.ptr, align 4
1028   %add = add i32 %0, 5
1029   store i32 %add, i32* %add.ptr, align 4
1030   ret void
1031 }
1032
1033 define void @memop_signed_int_add_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1034 entry:
1035 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
1036   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1037   %0 = load i32, i32* %add.ptr, align 4
1038   %add = add i32 %0, %x
1039   store i32 %add, i32* %add.ptr, align 4
1040   ret void
1041 }
1042
1043 define void @memop_signed_int_sub_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1044 entry:
1045 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
1046   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1047   %0 = load i32, i32* %add.ptr, align 4
1048   %sub = sub i32 %0, %x
1049   store i32 %sub, i32* %add.ptr, align 4
1050   ret void
1051 }
1052
1053 define void @memop_signed_int_or_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1054 entry:
1055 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
1056   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1057   %0 = load i32, i32* %add.ptr, align 4
1058   %or = or i32 %0, %x
1059   store i32 %or, i32* %add.ptr, align 4
1060   ret void
1061 }
1062
1063 define void @memop_signed_int_and_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1064 entry:
1065 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
1066   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1067   %0 = load i32, i32* %add.ptr, align 4
1068   %and = and i32 %0, %x
1069   store i32 %and, i32* %add.ptr, align 4
1070   ret void
1071 }
1072
1073 define void @memop_signed_int_clrbit_index(i32* nocapture %p, i32 %i) nounwind {
1074 entry:
1075 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
1076   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1077   %0 = load i32, i32* %add.ptr, align 4
1078   %and = and i32 %0, -33
1079   store i32 %and, i32* %add.ptr, align 4
1080   ret void
1081 }
1082
1083 define void @memop_signed_int_setbit_index(i32* nocapture %p, i32 %i) nounwind {
1084 entry:
1085 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
1086   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1087   %0 = load i32, i32* %add.ptr, align 4
1088   %or = or i32 %0, 128
1089   store i32 %or, i32* %add.ptr, align 4
1090   ret void
1091 }
1092
1093 define void @memop_signed_int_add5_index5(i32* nocapture %p) nounwind {
1094 entry:
1095 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}#5
1096   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1097   %0 = load i32, i32* %add.ptr, align 4
1098   %add = add i32 %0, 5
1099   store i32 %add, i32* %add.ptr, align 4
1100   ret void
1101 }
1102
1103 define void @memop_signed_int_add_index5(i32* nocapture %p, i32 %x) nounwind {
1104 entry:
1105 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}r{{[0-9]+}}
1106   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1107   %0 = load i32, i32* %add.ptr, align 4
1108   %add = add i32 %0, %x
1109   store i32 %add, i32* %add.ptr, align 4
1110   ret void
1111 }
1112
1113 define void @memop_signed_int_sub_index5(i32* nocapture %p, i32 %x) nounwind {
1114 entry:
1115 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}-={{ *}}r{{[0-9]+}}
1116   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1117   %0 = load i32, i32* %add.ptr, align 4
1118   %sub = sub i32 %0, %x
1119   store i32 %sub, i32* %add.ptr, align 4
1120   ret void
1121 }
1122
1123 define void @memop_signed_int_or_index5(i32* nocapture %p, i32 %x) nounwind {
1124 entry:
1125 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}|={{ *}}r{{[0-9]+}}
1126   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1127   %0 = load i32, i32* %add.ptr, align 4
1128   %or = or i32 %0, %x
1129   store i32 %or, i32* %add.ptr, align 4
1130   ret void
1131 }
1132
1133 define void @memop_signed_int_and_index5(i32* nocapture %p, i32 %x) nounwind {
1134 entry:
1135 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}&={{ *}}r{{[0-9]+}}
1136   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1137   %0 = load i32, i32* %add.ptr, align 4
1138   %and = and i32 %0, %x
1139   store i32 %and, i32* %add.ptr, align 4
1140   ret void
1141 }
1142
1143 define void @memop_signed_int_clrbit_index5(i32* nocapture %p) nounwind {
1144 entry:
1145 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
1146   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1147   %0 = load i32, i32* %add.ptr, align 4
1148   %and = and i32 %0, -33
1149   store i32 %and, i32* %add.ptr, align 4
1150   ret void
1151 }
1152
1153 define void @memop_signed_int_setbit_index5(i32* nocapture %p) nounwind {
1154 entry:
1155 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
1156   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1157   %0 = load i32, i32* %add.ptr, align 4
1158   %or = or i32 %0, 128
1159   store i32 %or, i32* %add.ptr, align 4
1160   ret void
1161 }
1162
1163 define void @memop_unsigned_int_add5(i32* nocapture %p) nounwind {
1164 entry:
1165 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
1166   %0 = load i32, i32* %p, align 4
1167   %add = add nsw i32 %0, 5
1168   store i32 %add, i32* %p, align 4
1169   ret void
1170 }
1171
1172 define void @memop_unsigned_int_add(i32* nocapture %p, i32 %x) nounwind {
1173 entry:
1174 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
1175   %0 = load i32, i32* %p, align 4
1176   %add = add nsw i32 %0, %x
1177   store i32 %add, i32* %p, align 4
1178   ret void
1179 }
1180
1181 define void @memop_unsigned_int_sub(i32* nocapture %p, i32 %x) nounwind {
1182 entry:
1183 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
1184   %0 = load i32, i32* %p, align 4
1185   %sub = sub nsw i32 %0, %x
1186   store i32 %sub, i32* %p, align 4
1187   ret void
1188 }
1189
1190 define void @memop_unsigned_int_or(i32* nocapture %p, i32 %x) nounwind {
1191 entry:
1192 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
1193   %0 = load i32, i32* %p, align 4
1194   %or = or i32 %0, %x
1195   store i32 %or, i32* %p, align 4
1196   ret void
1197 }
1198
1199 define void @memop_unsigned_int_and(i32* nocapture %p, i32 %x) nounwind {
1200 entry:
1201 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
1202   %0 = load i32, i32* %p, align 4
1203   %and = and i32 %0, %x
1204   store i32 %and, i32* %p, align 4
1205   ret void
1206 }
1207
1208 define void @memop_unsigned_int_clrbit(i32* nocapture %p) nounwind {
1209 entry:
1210 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
1211   %0 = load i32, i32* %p, align 4
1212   %and = and i32 %0, -33
1213   store i32 %and, i32* %p, align 4
1214   ret void
1215 }
1216
1217 define void @memop_unsigned_int_setbit(i32* nocapture %p) nounwind {
1218 entry:
1219 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
1220   %0 = load i32, i32* %p, align 4
1221   %or = or i32 %0, 128
1222   store i32 %or, i32* %p, align 4
1223   ret void
1224 }
1225
1226 define void @memop_unsigned_int_add5_index(i32* nocapture %p, i32 %i) nounwind {
1227 entry:
1228 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5
1229   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1230   %0 = load i32, i32* %add.ptr, align 4
1231   %add = add nsw i32 %0, 5
1232   store i32 %add, i32* %add.ptr, align 4
1233   ret void
1234 }
1235
1236 define void @memop_unsigned_int_add_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1237 entry:
1238 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}}
1239   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1240   %0 = load i32, i32* %add.ptr, align 4
1241   %add = add nsw i32 %0, %x
1242   store i32 %add, i32* %add.ptr, align 4
1243   ret void
1244 }
1245
1246 define void @memop_unsigned_int_sub_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1247 entry:
1248 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}}
1249   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1250   %0 = load i32, i32* %add.ptr, align 4
1251   %sub = sub nsw i32 %0, %x
1252   store i32 %sub, i32* %add.ptr, align 4
1253   ret void
1254 }
1255
1256 define void @memop_unsigned_int_or_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1257 entry:
1258 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}}
1259   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1260   %0 = load i32, i32* %add.ptr, align 4
1261   %or = or i32 %0, %x
1262   store i32 %or, i32* %add.ptr, align 4
1263   ret void
1264 }
1265
1266 define void @memop_unsigned_int_and_index(i32* nocapture %p, i32 %i, i32 %x) nounwind {
1267 entry:
1268 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}}
1269   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1270   %0 = load i32, i32* %add.ptr, align 4
1271   %and = and i32 %0, %x
1272   store i32 %and, i32* %add.ptr, align 4
1273   ret void
1274 }
1275
1276 define void @memop_unsigned_int_clrbit_index(i32* nocapture %p, i32 %i) nounwind {
1277 entry:
1278 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
1279   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1280   %0 = load i32, i32* %add.ptr, align 4
1281   %and = and i32 %0, -33
1282   store i32 %and, i32* %add.ptr, align 4
1283   ret void
1284 }
1285
1286 define void @memop_unsigned_int_setbit_index(i32* nocapture %p, i32 %i) nounwind {
1287 entry:
1288 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
1289   %add.ptr = getelementptr inbounds i32, i32* %p, i32 %i
1290   %0 = load i32, i32* %add.ptr, align 4
1291   %or = or i32 %0, 128
1292   store i32 %or, i32* %add.ptr, align 4
1293   ret void
1294 }
1295
1296 define void @memop_unsigned_int_add5_index5(i32* nocapture %p) nounwind {
1297 entry:
1298 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}#5
1299   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1300   %0 = load i32, i32* %add.ptr, align 4
1301   %add = add nsw i32 %0, 5
1302   store i32 %add, i32* %add.ptr, align 4
1303   ret void
1304 }
1305
1306 define void @memop_unsigned_int_add_index5(i32* nocapture %p, i32 %x) nounwind {
1307 entry:
1308 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}r{{[0-9]+}}
1309   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1310   %0 = load i32, i32* %add.ptr, align 4
1311   %add = add nsw i32 %0, %x
1312   store i32 %add, i32* %add.ptr, align 4
1313   ret void
1314 }
1315
1316 define void @memop_unsigned_int_sub_index5(i32* nocapture %p, i32 %x) nounwind {
1317 entry:
1318 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}-={{ *}}r{{[0-9]+}}
1319   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1320   %0 = load i32, i32* %add.ptr, align 4
1321   %sub = sub nsw i32 %0, %x
1322   store i32 %sub, i32* %add.ptr, align 4
1323   ret void
1324 }
1325
1326 define void @memop_unsigned_int_or_index5(i32* nocapture %p, i32 %x) nounwind {
1327 entry:
1328 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}|={{ *}}r{{[0-9]+}}
1329   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1330   %0 = load i32, i32* %add.ptr, align 4
1331   %or = or i32 %0, %x
1332   store i32 %or, i32* %add.ptr, align 4
1333   ret void
1334 }
1335
1336 define void @memop_unsigned_int_and_index5(i32* nocapture %p, i32 %x) nounwind {
1337 entry:
1338 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}&={{ *}}r{{[0-9]+}}
1339   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1340   %0 = load i32, i32* %add.ptr, align 4
1341   %and = and i32 %0, %x
1342   store i32 %and, i32* %add.ptr, align 4
1343   ret void
1344 }
1345
1346 define void @memop_unsigned_int_clrbit_index5(i32* nocapture %p) nounwind {
1347 entry:
1348 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}clrbit({{ *}}#5{{ *}})
1349   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1350   %0 = load i32, i32* %add.ptr, align 4
1351   %and = and i32 %0, -33
1352   store i32 %and, i32* %add.ptr, align 4
1353   ret void
1354 }
1355
1356 define void @memop_unsigned_int_setbit_index5(i32* nocapture %p) nounwind {
1357 entry:
1358 ; CHECK:  memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}setbit({{ *}}#7{{ *}})
1359   %add.ptr = getelementptr inbounds i32, i32* %p, i32 5
1360   %0 = load i32, i32* %add.ptr, align 4
1361   %or = or i32 %0, 128
1362   store i32 %or, i32* %add.ptr, align 4
1363   ret void
1364 }