[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / sub-of-not.ll
blobd2b55aaf7ac839ccbb80ef05cd0e6233cd9f3875
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=ppc32-unknown-unknown | FileCheck %s --check-prefixes=ALL,PPC32
3 ; RUN: llc < %s -mtriple=powerpc64-unknown-unknown | FileCheck %s --check-prefixes=ALL,PPC64,PPC64BE
4 ; RUN: llc < %s -mtriple=powerpc64le-unknown-unknown | FileCheck %s --check-prefixes=ALL,PPC64,PPC64LE
6 ; These two forms are equivalent:
7 ;   sub %y, (xor %x, -1)
8 ;   add (add %x, 1), %y
9 ; Some targets may prefer one to the other.
11 define i8 @scalar_i8(i8 %x, i8 %y) nounwind {
12 ; ALL-LABEL: scalar_i8:
13 ; ALL:       # %bb.0:
14 ; ALL-NEXT:    add 3, 4, 3
15 ; ALL-NEXT:    addi 3, 3, 1
16 ; ALL-NEXT:    blr
17   %t0 = xor i8 %x, -1
18   %t1 = sub i8 %y, %t0
19   ret i8 %t1
22 define i16 @scalar_i16(i16 %x, i16 %y) nounwind {
23 ; ALL-LABEL: scalar_i16:
24 ; ALL:       # %bb.0:
25 ; ALL-NEXT:    add 3, 4, 3
26 ; ALL-NEXT:    addi 3, 3, 1
27 ; ALL-NEXT:    blr
28   %t0 = xor i16 %x, -1
29   %t1 = sub i16 %y, %t0
30   ret i16 %t1
33 define i32 @scalar_i32(i32 %x, i32 %y) nounwind {
34 ; ALL-LABEL: scalar_i32:
35 ; ALL:       # %bb.0:
36 ; ALL-NEXT:    add 3, 4, 3
37 ; ALL-NEXT:    addi 3, 3, 1
38 ; ALL-NEXT:    blr
39   %t0 = xor i32 %x, -1
40   %t1 = sub i32 %y, %t0
41   ret i32 %t1
44 define i64 @scalar_i64(i64 %x, i64 %y) nounwind {
45 ; PPC32-LABEL: scalar_i64:
46 ; PPC32:       # %bb.0:
47 ; PPC32-NEXT:    addc 4, 6, 4
48 ; PPC32-NEXT:    adde 3, 5, 3
49 ; PPC32-NEXT:    addic 4, 4, 1
50 ; PPC32-NEXT:    addze 3, 3
51 ; PPC32-NEXT:    blr
53 ; PPC64-LABEL: scalar_i64:
54 ; PPC64:       # %bb.0:
55 ; PPC64-NEXT:    add 3, 4, 3
56 ; PPC64-NEXT:    addi 3, 3, 1
57 ; PPC64-NEXT:    blr
58   %t0 = xor i64 %x, -1
59   %t1 = sub i64 %y, %t0
60   ret i64 %t1
63 define <16 x i8> @vector_i128_i8(<16 x i8> %x, <16 x i8> %y) nounwind {
64 ; PPC32-LABEL: vector_i128_i8:
65 ; PPC32:       # %bb.0:
66 ; PPC32-NEXT:    stwu 1, -64(1)
67 ; PPC32-NEXT:    stw 21, 20(1) # 4-byte Folded Spill
68 ; PPC32-NEXT:    lbz 21, 123(1)
69 ; PPC32-NEXT:    stw 22, 24(1) # 4-byte Folded Spill
70 ; PPC32-NEXT:    stw 23, 28(1) # 4-byte Folded Spill
71 ; PPC32-NEXT:    add 7, 21, 7
72 ; PPC32-NEXT:    lbz 23, 115(1)
73 ; PPC32-NEXT:    lbz 22, 119(1)
74 ; PPC32-NEXT:    lbz 21, 135(1)
75 ; PPC32-NEXT:    add 5, 23, 5
76 ; PPC32-NEXT:    lbz 23, 127(1)
77 ; PPC32-NEXT:    add 6, 22, 6
78 ; PPC32-NEXT:    lbz 22, 131(1)
79 ; PPC32-NEXT:    add 10, 21, 10
80 ; PPC32-NEXT:    stw 26, 40(1) # 4-byte Folded Spill
81 ; PPC32-NEXT:    add 8, 23, 8
82 ; PPC32-NEXT:    lbz 26, 83(1)
83 ; PPC32-NEXT:    add 9, 22, 9
84 ; PPC32-NEXT:    lbz 21, 147(1)
85 ; PPC32-NEXT:    stw 24, 32(1) # 4-byte Folded Spill
86 ; PPC32-NEXT:    stw 25, 36(1) # 4-byte Folded Spill
87 ; PPC32-NEXT:    add 26, 21, 26
88 ; PPC32-NEXT:    lbz 25, 79(1)
89 ; PPC32-NEXT:    lbz 24, 75(1)
90 ; PPC32-NEXT:    lbz 23, 139(1)
91 ; PPC32-NEXT:    lbz 22, 143(1)
92 ; PPC32-NEXT:    stw 29, 52(1) # 4-byte Folded Spill
93 ; PPC32-NEXT:    add 24, 23, 24
94 ; PPC32-NEXT:    lbz 29, 95(1)
95 ; PPC32-NEXT:    add 25, 22, 25
96 ; PPC32-NEXT:    lbz 21, 159(1)
97 ; PPC32-NEXT:    stw 27, 44(1) # 4-byte Folded Spill
98 ; PPC32-NEXT:    stw 28, 48(1) # 4-byte Folded Spill
99 ; PPC32-NEXT:    add 29, 21, 29
100 ; PPC32-NEXT:    lbz 28, 91(1)
101 ; PPC32-NEXT:    lbz 27, 87(1)
102 ; PPC32-NEXT:    lbz 23, 151(1)
103 ; PPC32-NEXT:    lbz 22, 155(1)
104 ; PPC32-NEXT:    lbz 4, 111(1)
105 ; PPC32-NEXT:    add 27, 23, 27
106 ; PPC32-NEXT:    lbz 21, 175(1)
107 ; PPC32-NEXT:    add 28, 22, 28
108 ; PPC32-NEXT:    lbz 11, 107(1)
109 ; PPC32-NEXT:    lbz 12, 171(1)
110 ; PPC32-NEXT:    add 4, 21, 4
111 ; PPC32-NEXT:    stw 30, 56(1) # 4-byte Folded Spill
112 ; PPC32-NEXT:    addi 4, 4, 1
113 ; PPC32-NEXT:    lbz 0, 103(1)
114 ; PPC32-NEXT:    add 11, 12, 11
115 ; PPC32-NEXT:    lbz 30, 99(1)
116 ; PPC32-NEXT:    lbz 23, 163(1)
117 ; PPC32-NEXT:    lbz 22, 167(1)
118 ; PPC32-NEXT:    add 30, 23, 30
119 ; PPC32-NEXT:    stb 4, 15(3)
120 ; PPC32-NEXT:    add 23, 22, 0
121 ; PPC32-NEXT:    addi 4, 11, 1
122 ; PPC32-NEXT:    stb 4, 14(3)
123 ; PPC32-NEXT:    addi 4, 23, 1
124 ; PPC32-NEXT:    stb 4, 13(3)
125 ; PPC32-NEXT:    addi 4, 30, 1
126 ; PPC32-NEXT:    stb 4, 12(3)
127 ; PPC32-NEXT:    addi 4, 29, 1
128 ; PPC32-NEXT:    stb 4, 11(3)
129 ; PPC32-NEXT:    addi 4, 28, 1
130 ; PPC32-NEXT:    stb 4, 10(3)
131 ; PPC32-NEXT:    addi 4, 27, 1
132 ; PPC32-NEXT:    stb 4, 9(3)
133 ; PPC32-NEXT:    addi 4, 26, 1
134 ; PPC32-NEXT:    stb 4, 8(3)
135 ; PPC32-NEXT:    addi 4, 25, 1
136 ; PPC32-NEXT:    stb 4, 7(3)
137 ; PPC32-NEXT:    addi 4, 24, 1
138 ; PPC32-NEXT:    stb 4, 6(3)
139 ; PPC32-NEXT:    addi 4, 10, 1
140 ; PPC32-NEXT:    stb 4, 5(3)
141 ; PPC32-NEXT:    addi 4, 9, 1
142 ; PPC32-NEXT:    stb 4, 4(3)
143 ; PPC32-NEXT:    addi 4, 8, 1
144 ; PPC32-NEXT:    stb 4, 3(3)
145 ; PPC32-NEXT:    addi 4, 7, 1
146 ; PPC32-NEXT:    stb 4, 2(3)
147 ; PPC32-NEXT:    addi 4, 6, 1
148 ; PPC32-NEXT:    stb 4, 1(3)
149 ; PPC32-NEXT:    addi 4, 5, 1
150 ; PPC32-NEXT:    stb 4, 0(3)
151 ; PPC32-NEXT:    lwz 30, 56(1) # 4-byte Folded Reload
152 ; PPC32-NEXT:    lwz 29, 52(1) # 4-byte Folded Reload
153 ; PPC32-NEXT:    lwz 28, 48(1) # 4-byte Folded Reload
154 ; PPC32-NEXT:    lwz 27, 44(1) # 4-byte Folded Reload
155 ; PPC32-NEXT:    lwz 26, 40(1) # 4-byte Folded Reload
156 ; PPC32-NEXT:    lwz 25, 36(1) # 4-byte Folded Reload
157 ; PPC32-NEXT:    lwz 24, 32(1) # 4-byte Folded Reload
158 ; PPC32-NEXT:    lwz 23, 28(1) # 4-byte Folded Reload
159 ; PPC32-NEXT:    lwz 22, 24(1) # 4-byte Folded Reload
160 ; PPC32-NEXT:    lwz 21, 20(1) # 4-byte Folded Reload
161 ; PPC32-NEXT:    addi 1, 1, 64
162 ; PPC32-NEXT:    blr
164 ; PPC64BE-LABEL: vector_i128_i8:
165 ; PPC64BE:       # %bb.0:
166 ; PPC64BE-NEXT:    std 21, -88(1) # 8-byte Folded Spill
167 ; PPC64BE-NEXT:    lbz 21, 207(1)
168 ; PPC64BE-NEXT:    std 22, -80(1) # 8-byte Folded Spill
169 ; PPC64BE-NEXT:    std 23, -72(1) # 8-byte Folded Spill
170 ; PPC64BE-NEXT:    std 25, -56(1) # 8-byte Folded Spill
171 ; PPC64BE-NEXT:    std 24, -64(1) # 8-byte Folded Spill
172 ; PPC64BE-NEXT:    std 28, -32(1) # 8-byte Folded Spill
173 ; PPC64BE-NEXT:    std 27, -40(1) # 8-byte Folded Spill
174 ; PPC64BE-NEXT:    std 26, -48(1) # 8-byte Folded Spill
175 ; PPC64BE-NEXT:    std 30, -16(1) # 8-byte Folded Spill
176 ; PPC64BE-NEXT:    std 29, -24(1) # 8-byte Folded Spill
177 ; PPC64BE-NEXT:    lbz 22, 199(1)
178 ; PPC64BE-NEXT:    lbz 23, 191(1)
179 ; PPC64BE-NEXT:    add 6, 21, 6
180 ; PPC64BE-NEXT:    lbz 21, 231(1)
181 ; PPC64BE-NEXT:    add 5, 22, 5
182 ; PPC64BE-NEXT:    lbz 22, 223(1)
183 ; PPC64BE-NEXT:    add 4, 23, 4
184 ; PPC64BE-NEXT:    lbz 23, 215(1)
185 ; PPC64BE-NEXT:    add 9, 21, 9
186 ; PPC64BE-NEXT:    lbz 25, 127(1)
187 ; PPC64BE-NEXT:    add 8, 22, 8
188 ; PPC64BE-NEXT:    lbz 21, 255(1)
189 ; PPC64BE-NEXT:    add 7, 23, 7
190 ; PPC64BE-NEXT:    lbz 24, 119(1)
191 ; PPC64BE-NEXT:    addi 9, 9, 1
192 ; PPC64BE-NEXT:    lbz 22, 247(1)
193 ; PPC64BE-NEXT:    add 25, 21, 25
194 ; PPC64BE-NEXT:    lbz 23, 239(1)
195 ; PPC64BE-NEXT:    addi 8, 8, 1
196 ; PPC64BE-NEXT:    lbz 28, 151(1)
197 ; PPC64BE-NEXT:    add 24, 22, 24
198 ; PPC64BE-NEXT:    lbz 21, 279(1)
199 ; PPC64BE-NEXT:    add 10, 23, 10
200 ; PPC64BE-NEXT:    lbz 27, 143(1)
201 ; PPC64BE-NEXT:    addi 10, 10, 1
202 ; PPC64BE-NEXT:    lbz 22, 271(1)
203 ; PPC64BE-NEXT:    add 28, 21, 28
204 ; PPC64BE-NEXT:    lbz 26, 135(1)
205 ; PPC64BE-NEXT:    addi 7, 7, 1
206 ; PPC64BE-NEXT:    lbz 23, 263(1)
207 ; PPC64BE-NEXT:    add 27, 22, 27
208 ; PPC64BE-NEXT:    lbz 11, 183(1)
209 ; PPC64BE-NEXT:    addi 6, 6, 1
210 ; PPC64BE-NEXT:    lbz 21, 311(1)
211 ; PPC64BE-NEXT:    add 26, 23, 26
212 ; PPC64BE-NEXT:    lbz 12, 175(1)
213 ; PPC64BE-NEXT:    addi 5, 5, 1
214 ; PPC64BE-NEXT:    lbz 0, 303(1)
215 ; PPC64BE-NEXT:    add 11, 21, 11
216 ; PPC64BE-NEXT:    lbz 30, 167(1)
217 ; PPC64BE-NEXT:    addi 11, 11, 1
218 ; PPC64BE-NEXT:    lbz 22, 295(1)
219 ; PPC64BE-NEXT:    add 12, 0, 12
220 ; PPC64BE-NEXT:    lbz 29, 159(1)
221 ; PPC64BE-NEXT:    addi 4, 4, 1
222 ; PPC64BE-NEXT:    lbz 23, 287(1)
223 ; PPC64BE-NEXT:    add 30, 22, 30
224 ; PPC64BE-NEXT:    stb 11, 15(3)
225 ; PPC64BE-NEXT:    addi 11, 12, 1
226 ; PPC64BE-NEXT:    add 29, 23, 29
227 ; PPC64BE-NEXT:    stb 11, 14(3)
228 ; PPC64BE-NEXT:    addi 11, 30, 1
229 ; PPC64BE-NEXT:    stb 11, 13(3)
230 ; PPC64BE-NEXT:    addi 11, 29, 1
231 ; PPC64BE-NEXT:    stb 11, 12(3)
232 ; PPC64BE-NEXT:    addi 11, 28, 1
233 ; PPC64BE-NEXT:    stb 11, 11(3)
234 ; PPC64BE-NEXT:    addi 11, 27, 1
235 ; PPC64BE-NEXT:    stb 11, 10(3)
236 ; PPC64BE-NEXT:    addi 11, 26, 1
237 ; PPC64BE-NEXT:    stb 11, 9(3)
238 ; PPC64BE-NEXT:    addi 11, 25, 1
239 ; PPC64BE-NEXT:    stb 11, 8(3)
240 ; PPC64BE-NEXT:    addi 11, 24, 1
241 ; PPC64BE-NEXT:    stb 11, 7(3)
242 ; PPC64BE-NEXT:    stb 10, 6(3)
243 ; PPC64BE-NEXT:    stb 9, 5(3)
244 ; PPC64BE-NEXT:    stb 8, 4(3)
245 ; PPC64BE-NEXT:    stb 7, 3(3)
246 ; PPC64BE-NEXT:    stb 6, 2(3)
247 ; PPC64BE-NEXT:    stb 5, 1(3)
248 ; PPC64BE-NEXT:    stb 4, 0(3)
249 ; PPC64BE-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
250 ; PPC64BE-NEXT:    ld 29, -24(1) # 8-byte Folded Reload
251 ; PPC64BE-NEXT:    ld 28, -32(1) # 8-byte Folded Reload
252 ; PPC64BE-NEXT:    ld 27, -40(1) # 8-byte Folded Reload
253 ; PPC64BE-NEXT:    ld 26, -48(1) # 8-byte Folded Reload
254 ; PPC64BE-NEXT:    ld 25, -56(1) # 8-byte Folded Reload
255 ; PPC64BE-NEXT:    ld 24, -64(1) # 8-byte Folded Reload
256 ; PPC64BE-NEXT:    ld 23, -72(1) # 8-byte Folded Reload
257 ; PPC64BE-NEXT:    ld 22, -80(1) # 8-byte Folded Reload
258 ; PPC64BE-NEXT:    ld 21, -88(1) # 8-byte Folded Reload
259 ; PPC64BE-NEXT:    blr
261 ; PPC64LE-LABEL: vector_i128_i8:
262 ; PPC64LE:       # %bb.0:
263 ; PPC64LE-NEXT:    xxlnor 34, 34, 34
264 ; PPC64LE-NEXT:    vsububm 2, 3, 2
265 ; PPC64LE-NEXT:    blr
266   %t0 = xor <16 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
267   %t1 = sub <16 x i8> %y, %t0
268   ret <16 x i8> %t1
271 define <8 x i16> @vector_i128_i16(<8 x i16> %x, <8 x i16> %y) nounwind {
272 ; PPC32-LABEL: vector_i128_i16:
273 ; PPC32:       # %bb.0:
274 ; PPC32-NEXT:    stwu 1, -32(1)
275 ; PPC32-NEXT:    stw 26, 8(1) # 4-byte Folded Spill
276 ; PPC32-NEXT:    stw 27, 12(1) # 4-byte Folded Spill
277 ; PPC32-NEXT:    stw 28, 16(1) # 4-byte Folded Spill
278 ; PPC32-NEXT:    stw 29, 20(1) # 4-byte Folded Spill
279 ; PPC32-NEXT:    stw 30, 24(1) # 4-byte Folded Spill
280 ; PPC32-NEXT:    lhz 11, 70(1)
281 ; PPC32-NEXT:    lhz 12, 66(1)
282 ; PPC32-NEXT:    lhz 0, 62(1)
283 ; PPC32-NEXT:    add 10, 11, 10
284 ; PPC32-NEXT:    lhz 30, 58(1)
285 ; PPC32-NEXT:    add 9, 12, 9
286 ; PPC32-NEXT:    lhz 29, 50(1)
287 ; PPC32-NEXT:    add 8, 0, 8
288 ; PPC32-NEXT:    lhz 28, 42(1)
289 ; PPC32-NEXT:    add 7, 30, 7
290 ; PPC32-NEXT:    lhz 27, 46(1)
291 ; PPC32-NEXT:    add 5, 29, 5
292 ; PPC32-NEXT:    lhz 26, 54(1)
293 ; PPC32-NEXT:    add 3, 28, 3
294 ; PPC32-NEXT:    add 4, 27, 4
295 ; PPC32-NEXT:    addi 3, 3, 1
296 ; PPC32-NEXT:    add 6, 26, 6
297 ; PPC32-NEXT:    addi 4, 4, 1
298 ; PPC32-NEXT:    addi 5, 5, 1
299 ; PPC32-NEXT:    addi 6, 6, 1
300 ; PPC32-NEXT:    addi 7, 7, 1
301 ; PPC32-NEXT:    addi 8, 8, 1
302 ; PPC32-NEXT:    addi 9, 9, 1
303 ; PPC32-NEXT:    addi 10, 10, 1
304 ; PPC32-NEXT:    lwz 30, 24(1) # 4-byte Folded Reload
305 ; PPC32-NEXT:    lwz 29, 20(1) # 4-byte Folded Reload
306 ; PPC32-NEXT:    lwz 28, 16(1) # 4-byte Folded Reload
307 ; PPC32-NEXT:    lwz 27, 12(1) # 4-byte Folded Reload
308 ; PPC32-NEXT:    lwz 26, 8(1) # 4-byte Folded Reload
309 ; PPC32-NEXT:    addi 1, 1, 32
310 ; PPC32-NEXT:    blr
312 ; PPC64BE-LABEL: vector_i128_i16:
313 ; PPC64BE:       # %bb.0:
314 ; PPC64BE-NEXT:    std 25, -56(1) # 8-byte Folded Spill
315 ; PPC64BE-NEXT:    std 26, -48(1) # 8-byte Folded Spill
316 ; PPC64BE-NEXT:    std 27, -40(1) # 8-byte Folded Spill
317 ; PPC64BE-NEXT:    std 28, -32(1) # 8-byte Folded Spill
318 ; PPC64BE-NEXT:    std 29, -24(1) # 8-byte Folded Spill
319 ; PPC64BE-NEXT:    std 30, -16(1) # 8-byte Folded Spill
320 ; PPC64BE-NEXT:    lhz 11, 118(1)
321 ; PPC64BE-NEXT:    lhz 12, 182(1)
322 ; PPC64BE-NEXT:    lhz 0, 174(1)
323 ; PPC64BE-NEXT:    lhz 30, 166(1)
324 ; PPC64BE-NEXT:    add 11, 12, 11
325 ; PPC64BE-NEXT:    lhz 29, 158(1)
326 ; PPC64BE-NEXT:    add 10, 0, 10
327 ; PPC64BE-NEXT:    lhz 28, 142(1)
328 ; PPC64BE-NEXT:    add 9, 30, 9
329 ; PPC64BE-NEXT:    lhz 27, 126(1)
330 ; PPC64BE-NEXT:    add 8, 29, 8
331 ; PPC64BE-NEXT:    lhz 26, 134(1)
332 ; PPC64BE-NEXT:    add 6, 28, 6
333 ; PPC64BE-NEXT:    lhz 25, 150(1)
334 ; PPC64BE-NEXT:    add 4, 27, 4
335 ; PPC64BE-NEXT:    add 5, 26, 5
336 ; PPC64BE-NEXT:    addi 11, 11, 1
337 ; PPC64BE-NEXT:    add 7, 25, 7
338 ; PPC64BE-NEXT:    addi 10, 10, 1
339 ; PPC64BE-NEXT:    addi 9, 9, 1
340 ; PPC64BE-NEXT:    addi 8, 8, 1
341 ; PPC64BE-NEXT:    addi 7, 7, 1
342 ; PPC64BE-NEXT:    addi 6, 6, 1
343 ; PPC64BE-NEXT:    addi 5, 5, 1
344 ; PPC64BE-NEXT:    addi 4, 4, 1
345 ; PPC64BE-NEXT:    sth 11, 14(3)
346 ; PPC64BE-NEXT:    sth 10, 12(3)
347 ; PPC64BE-NEXT:    sth 9, 10(3)
348 ; PPC64BE-NEXT:    sth 8, 8(3)
349 ; PPC64BE-NEXT:    sth 7, 6(3)
350 ; PPC64BE-NEXT:    sth 6, 4(3)
351 ; PPC64BE-NEXT:    sth 5, 2(3)
352 ; PPC64BE-NEXT:    sth 4, 0(3)
353 ; PPC64BE-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
354 ; PPC64BE-NEXT:    ld 29, -24(1) # 8-byte Folded Reload
355 ; PPC64BE-NEXT:    ld 28, -32(1) # 8-byte Folded Reload
356 ; PPC64BE-NEXT:    ld 27, -40(1) # 8-byte Folded Reload
357 ; PPC64BE-NEXT:    ld 26, -48(1) # 8-byte Folded Reload
358 ; PPC64BE-NEXT:    ld 25, -56(1) # 8-byte Folded Reload
359 ; PPC64BE-NEXT:    blr
361 ; PPC64LE-LABEL: vector_i128_i16:
362 ; PPC64LE:       # %bb.0:
363 ; PPC64LE-NEXT:    xxlnor 34, 34, 34
364 ; PPC64LE-NEXT:    vsubuhm 2, 3, 2
365 ; PPC64LE-NEXT:    blr
366   %t0 = xor <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
367   %t1 = sub <8 x i16> %y, %t0
368   ret <8 x i16> %t1
371 define <4 x i32> @vector_i128_i32(<4 x i32> %x, <4 x i32> %y) nounwind {
372 ; PPC32-LABEL: vector_i128_i32:
373 ; PPC32:       # %bb.0:
374 ; PPC32-NEXT:    add 3, 7, 3
375 ; PPC32-NEXT:    add 4, 8, 4
376 ; PPC32-NEXT:    add 5, 9, 5
377 ; PPC32-NEXT:    add 6, 10, 6
378 ; PPC32-NEXT:    addi 3, 3, 1
379 ; PPC32-NEXT:    addi 4, 4, 1
380 ; PPC32-NEXT:    addi 5, 5, 1
381 ; PPC32-NEXT:    addi 6, 6, 1
382 ; PPC32-NEXT:    blr
384 ; PPC64BE-LABEL: vector_i128_i32:
385 ; PPC64BE:       # %bb.0:
386 ; PPC64BE-NEXT:    add 6, 10, 6
387 ; PPC64BE-NEXT:    add 5, 9, 5
388 ; PPC64BE-NEXT:    add 4, 8, 4
389 ; PPC64BE-NEXT:    add 3, 7, 3
390 ; PPC64BE-NEXT:    addi 6, 6, 1
391 ; PPC64BE-NEXT:    addi 5, 5, 1
392 ; PPC64BE-NEXT:    addi 4, 4, 1
393 ; PPC64BE-NEXT:    addi 3, 3, 1
394 ; PPC64BE-NEXT:    blr
396 ; PPC64LE-LABEL: vector_i128_i32:
397 ; PPC64LE:       # %bb.0:
398 ; PPC64LE-NEXT:    xxlnor 34, 34, 34
399 ; PPC64LE-NEXT:    vsubuwm 2, 3, 2
400 ; PPC64LE-NEXT:    blr
401   %t0 = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
402   %t1 = sub <4 x i32> %y, %t0
403   ret <4 x i32> %t1
406 define <2 x i64> @vector_i128_i64(<2 x i64> %x, <2 x i64> %y) nounwind {
407 ; PPC32-LABEL: vector_i128_i64:
408 ; PPC32:       # %bb.0:
409 ; PPC32-NEXT:    not 4, 4
410 ; PPC32-NEXT:    not 3, 3
411 ; PPC32-NEXT:    subc 4, 8, 4
412 ; PPC32-NEXT:    not 6, 6
413 ; PPC32-NEXT:    subfe 3, 3, 7
414 ; PPC32-NEXT:    not 5, 5
415 ; PPC32-NEXT:    subc 6, 10, 6
416 ; PPC32-NEXT:    subfe 5, 5, 9
417 ; PPC32-NEXT:    blr
419 ; PPC64BE-LABEL: vector_i128_i64:
420 ; PPC64BE:       # %bb.0:
421 ; PPC64BE-NEXT:    add 3, 5, 3
422 ; PPC64BE-NEXT:    add 4, 6, 4
423 ; PPC64BE-NEXT:    addi 3, 3, 1
424 ; PPC64BE-NEXT:    addi 4, 4, 1
425 ; PPC64BE-NEXT:    blr
427 ; PPC64LE-LABEL: vector_i128_i64:
428 ; PPC64LE:       # %bb.0:
429 ; PPC64LE-NEXT:    xxlnor 34, 34, 34
430 ; PPC64LE-NEXT:    vsubudm 2, 3, 2
431 ; PPC64LE-NEXT:    blr
432   %t0 = xor <2 x i64> %x, <i64 -1, i64 -1>
433   %t1 = sub <2 x i64> %y, %t0
434   ret <2 x i64> %t1