1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefixes=X64,SSE
3; RUN: llc < %s -mtriple=x86_64-linux -mattr=avx | FileCheck %s --check-prefixes=X64,AVX,AVX1
4; RUN: llc < %s -mtriple=x86_64-linux -mattr=avx2 | FileCheck %s --check-prefixes=X64,AVX,AVX2
5; RUN: llc < %s -mtriple=i686 -mattr=cmov | FileCheck %s --check-prefix=X86
6
7; The i1 parameter is not codegen-relevant right now.
8
9declare i8 @llvm.abs.i8(i8, i1)
10declare i16 @llvm.abs.i16(i16, i1)
11declare i24 @llvm.abs.i24(i24, i1)
12declare i32 @llvm.abs.i32(i32, i1)
13declare i64 @llvm.abs.i64(i64, i1)
14declare i128 @llvm.abs.i128(i128, i1)
15
16declare <1 x i32> @llvm.abs.v1i32(<1 x i32>, i1)
17declare <2 x i32> @llvm.abs.v2i32(<2 x i32>, i1)
18declare <3 x i32> @llvm.abs.v3i32(<3 x i32>, i1)
19declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1)
20declare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1)
21
22declare <8 x i16> @llvm.abs.v8i16(<8 x i16>, i1)
23declare <16 x i8> @llvm.abs.v16i8(<16 x i8>, i1)
24
25define i8 @test_i8(i8 %a) nounwind {
26; X64-LABEL: test_i8:
27; X64:       # %bb.0:
28; X64-NEXT:    # kill: def $edi killed $edi def $rdi
29; X64-NEXT:    movl %edi, %ecx
30; X64-NEXT:    sarb $7, %cl
31; X64-NEXT:    leal (%rdi,%rcx), %eax
32; X64-NEXT:    xorb %cl, %al
33; X64-NEXT:    # kill: def $al killed $al killed $eax
34; X64-NEXT:    retq
35;
36; X86-LABEL: test_i8:
37; X86:       # %bb.0:
38; X86-NEXT:    movb {{[0-9]+}}(%esp), %al
39; X86-NEXT:    movl %eax, %ecx
40; X86-NEXT:    sarb $7, %cl
41; X86-NEXT:    addb %cl, %al
42; X86-NEXT:    xorb %cl, %al
43; X86-NEXT:    retl
44  %r = call i8 @llvm.abs.i8(i8 %a, i1 false)
45  ret i8 %r
46}
47
48define i16 @test_i16(i16 %a) nounwind {
49; X64-LABEL: test_i16:
50; X64:       # %bb.0:
51; X64-NEXT:    movl %edi, %eax
52; X64-NEXT:    negw %ax
53; X64-NEXT:    cmovlw %di, %ax
54; X64-NEXT:    retq
55;
56; X86-LABEL: test_i16:
57; X86:       # %bb.0:
58; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
59; X86-NEXT:    movl %ecx, %eax
60; X86-NEXT:    negw %ax
61; X86-NEXT:    cmovlw %cx, %ax
62; X86-NEXT:    retl
63  %r = call i16 @llvm.abs.i16(i16 %a, i1 false)
64  ret i16 %r
65}
66
67define i24 @test_i24(i24 %a) nounwind {
68; X64-LABEL: test_i24:
69; X64:       # %bb.0:
70; X64-NEXT:    shll $8, %edi
71; X64-NEXT:    sarl $8, %edi
72; X64-NEXT:    movl %edi, %eax
73; X64-NEXT:    negl %eax
74; X64-NEXT:    cmovll %edi, %eax
75; X64-NEXT:    retq
76;
77; X86-LABEL: test_i24:
78; X86:       # %bb.0:
79; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
80; X86-NEXT:    shll $8, %ecx
81; X86-NEXT:    sarl $8, %ecx
82; X86-NEXT:    movl %ecx, %eax
83; X86-NEXT:    negl %eax
84; X86-NEXT:    cmovll %ecx, %eax
85; X86-NEXT:    retl
86  %r = call i24 @llvm.abs.i24(i24 %a, i1 false)
87  ret i24 %r
88}
89
90define i32 @test_i32(i32 %a) nounwind {
91; X64-LABEL: test_i32:
92; X64:       # %bb.0:
93; X64-NEXT:    movl %edi, %eax
94; X64-NEXT:    negl %eax
95; X64-NEXT:    cmovll %edi, %eax
96; X64-NEXT:    retq
97;
98; X86-LABEL: test_i32:
99; X86:       # %bb.0:
100; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
101; X86-NEXT:    movl %ecx, %eax
102; X86-NEXT:    negl %eax
103; X86-NEXT:    cmovll %ecx, %eax
104; X86-NEXT:    retl
105  %r = call i32 @llvm.abs.i32(i32 %a, i1 false)
106  ret i32 %r
107}
108
109define i64 @test_i64(i64 %a) nounwind {
110; X64-LABEL: test_i64:
111; X64:       # %bb.0:
112; X64-NEXT:    movq %rdi, %rax
113; X64-NEXT:    negq %rax
114; X64-NEXT:    cmovlq %rdi, %rax
115; X64-NEXT:    retq
116;
117; X86-LABEL: test_i64:
118; X86:       # %bb.0:
119; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
120; X86-NEXT:    movl %edx, %ecx
121; X86-NEXT:    sarl $31, %ecx
122; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
123; X86-NEXT:    addl %ecx, %eax
124; X86-NEXT:    adcl %ecx, %edx
125; X86-NEXT:    xorl %ecx, %edx
126; X86-NEXT:    xorl %ecx, %eax
127; X86-NEXT:    retl
128  %r = call i64 @llvm.abs.i64(i64 %a, i1 false)
129  ret i64 %r
130}
131
132define i128 @test_i128(i128 %a) nounwind {
133; X64-LABEL: test_i128:
134; X64:       # %bb.0:
135; X64-NEXT:    movq %rsi, %rdx
136; X64-NEXT:    movq %rdi, %rax
137; X64-NEXT:    movq %rsi, %rcx
138; X64-NEXT:    sarq $63, %rcx
139; X64-NEXT:    addq %rcx, %rax
140; X64-NEXT:    adcq %rcx, %rdx
141; X64-NEXT:    xorq %rcx, %rax
142; X64-NEXT:    xorq %rcx, %rdx
143; X64-NEXT:    retq
144;
145; X86-LABEL: test_i128:
146; X86:       # %bb.0:
147; X86-NEXT:    pushl %ebx
148; X86-NEXT:    pushl %edi
149; X86-NEXT:    pushl %esi
150; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
151; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
152; X86-NEXT:    movl %ecx, %edx
153; X86-NEXT:    sarl $31, %edx
154; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
155; X86-NEXT:    addl %edx, %esi
156; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
157; X86-NEXT:    adcl %edx, %edi
158; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
159; X86-NEXT:    adcl %edx, %ebx
160; X86-NEXT:    adcl %edx, %ecx
161; X86-NEXT:    xorl %edx, %ecx
162; X86-NEXT:    xorl %edx, %ebx
163; X86-NEXT:    xorl %edx, %edi
164; X86-NEXT:    xorl %edx, %esi
165; X86-NEXT:    movl %esi, (%eax)
166; X86-NEXT:    movl %edi, 4(%eax)
167; X86-NEXT:    movl %ebx, 8(%eax)
168; X86-NEXT:    movl %ecx, 12(%eax)
169; X86-NEXT:    popl %esi
170; X86-NEXT:    popl %edi
171; X86-NEXT:    popl %ebx
172; X86-NEXT:    retl $4
173  %r = call i128 @llvm.abs.i128(i128 %a, i1 false)
174  ret i128 %r
175}
176
177define <1 x i32> @test_v1i32(<1 x i32> %a) nounwind {
178; X64-LABEL: test_v1i32:
179; X64:       # %bb.0:
180; X64-NEXT:    movl %edi, %eax
181; X64-NEXT:    negl %eax
182; X64-NEXT:    cmovll %edi, %eax
183; X64-NEXT:    retq
184;
185; X86-LABEL: test_v1i32:
186; X86:       # %bb.0:
187; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
188; X86-NEXT:    movl %ecx, %eax
189; X86-NEXT:    negl %eax
190; X86-NEXT:    cmovll %ecx, %eax
191; X86-NEXT:    retl
192  %r = call <1 x i32> @llvm.abs.v1i32(<1 x i32> %a, i1 false)
193  ret <1 x i32> %r
194}
195
196define <2 x i32> @test_v2i32(<2 x i32> %a) nounwind {
197; SSE-LABEL: test_v2i32:
198; SSE:       # %bb.0:
199; SSE-NEXT:    movdqa %xmm0, %xmm1
200; SSE-NEXT:    psrad $31, %xmm1
201; SSE-NEXT:    paddd %xmm1, %xmm0
202; SSE-NEXT:    pxor %xmm1, %xmm0
203; SSE-NEXT:    retq
204;
205; AVX-LABEL: test_v2i32:
206; AVX:       # %bb.0:
207; AVX-NEXT:    vpabsd %xmm0, %xmm0
208; AVX-NEXT:    retq
209;
210; X86-LABEL: test_v2i32:
211; X86:       # %bb.0:
212; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
213; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
214; X86-NEXT:    movl %edx, %eax
215; X86-NEXT:    negl %eax
216; X86-NEXT:    cmovll %edx, %eax
217; X86-NEXT:    movl %ecx, %edx
218; X86-NEXT:    negl %edx
219; X86-NEXT:    cmovll %ecx, %edx
220; X86-NEXT:    retl
221  %r = call <2 x i32> @llvm.abs.v2i32(<2 x i32> %a, i1 false)
222  ret <2 x i32> %r
223}
224
225define <3 x i32> @test_v3i32(<3 x i32> %a) nounwind {
226; SSE-LABEL: test_v3i32:
227; SSE:       # %bb.0:
228; SSE-NEXT:    movdqa %xmm0, %xmm1
229; SSE-NEXT:    psrad $31, %xmm1
230; SSE-NEXT:    paddd %xmm1, %xmm0
231; SSE-NEXT:    pxor %xmm1, %xmm0
232; SSE-NEXT:    retq
233;
234; AVX-LABEL: test_v3i32:
235; AVX:       # %bb.0:
236; AVX-NEXT:    vpabsd %xmm0, %xmm0
237; AVX-NEXT:    retq
238;
239; X86-LABEL: test_v3i32:
240; X86:       # %bb.0:
241; X86-NEXT:    pushl %esi
242; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
243; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
244; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
245; X86-NEXT:    movl %edx, %eax
246; X86-NEXT:    negl %eax
247; X86-NEXT:    cmovll %edx, %eax
248; X86-NEXT:    movl %ecx, %edx
249; X86-NEXT:    negl %edx
250; X86-NEXT:    cmovll %ecx, %edx
251; X86-NEXT:    movl %esi, %ecx
252; X86-NEXT:    negl %ecx
253; X86-NEXT:    cmovll %esi, %ecx
254; X86-NEXT:    popl %esi
255; X86-NEXT:    retl
256  %r = call <3 x i32> @llvm.abs.v3i32(<3 x i32> %a, i1 false)
257  ret <3 x i32> %r
258}
259
260define <4 x i32> @test_v4i32(<4 x i32> %a) nounwind {
261; SSE-LABEL: test_v4i32:
262; SSE:       # %bb.0:
263; SSE-NEXT:    movdqa %xmm0, %xmm1
264; SSE-NEXT:    psrad $31, %xmm1
265; SSE-NEXT:    paddd %xmm1, %xmm0
266; SSE-NEXT:    pxor %xmm1, %xmm0
267; SSE-NEXT:    retq
268;
269; AVX-LABEL: test_v4i32:
270; AVX:       # %bb.0:
271; AVX-NEXT:    vpabsd %xmm0, %xmm0
272; AVX-NEXT:    retq
273;
274; X86-LABEL: test_v4i32:
275; X86:       # %bb.0:
276; X86-NEXT:    pushl %ebx
277; X86-NEXT:    pushl %edi
278; X86-NEXT:    pushl %esi
279; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
280; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
281; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
282; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
283; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
284; X86-NEXT:    movl %edi, %ebx
285; X86-NEXT:    negl %ebx
286; X86-NEXT:    cmovll %edi, %ebx
287; X86-NEXT:    movl %esi, %edi
288; X86-NEXT:    negl %edi
289; X86-NEXT:    cmovll %esi, %edi
290; X86-NEXT:    movl %edx, %esi
291; X86-NEXT:    negl %esi
292; X86-NEXT:    cmovll %edx, %esi
293; X86-NEXT:    movl %ecx, %edx
294; X86-NEXT:    negl %edx
295; X86-NEXT:    cmovll %ecx, %edx
296; X86-NEXT:    movl %edx, 12(%eax)
297; X86-NEXT:    movl %esi, 8(%eax)
298; X86-NEXT:    movl %edi, 4(%eax)
299; X86-NEXT:    movl %ebx, (%eax)
300; X86-NEXT:    popl %esi
301; X86-NEXT:    popl %edi
302; X86-NEXT:    popl %ebx
303; X86-NEXT:    retl $4
304  %r = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %a, i1 false)
305  ret <4 x i32> %r
306}
307
308define <8 x i32> @test_v8i32(<8 x i32> %a) nounwind {
309; SSE-LABEL: test_v8i32:
310; SSE:       # %bb.0:
311; SSE-NEXT:    movdqa %xmm0, %xmm2
312; SSE-NEXT:    psrad $31, %xmm2
313; SSE-NEXT:    paddd %xmm2, %xmm0
314; SSE-NEXT:    pxor %xmm2, %xmm0
315; SSE-NEXT:    movdqa %xmm1, %xmm2
316; SSE-NEXT:    psrad $31, %xmm2
317; SSE-NEXT:    paddd %xmm2, %xmm1
318; SSE-NEXT:    pxor %xmm2, %xmm1
319; SSE-NEXT:    retq
320;
321; AVX1-LABEL: test_v8i32:
322; AVX1:       # %bb.0:
323; AVX1-NEXT:    vpabsd %xmm0, %xmm1
324; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
325; AVX1-NEXT:    vpabsd %xmm0, %xmm0
326; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
327; AVX1-NEXT:    retq
328;
329; AVX2-LABEL: test_v8i32:
330; AVX2:       # %bb.0:
331; AVX2-NEXT:    vpabsd %ymm0, %ymm0
332; AVX2-NEXT:    retq
333;
334; X86-LABEL: test_v8i32:
335; X86:       # %bb.0:
336; X86-NEXT:    pushl %ebp
337; X86-NEXT:    pushl %ebx
338; X86-NEXT:    pushl %edi
339; X86-NEXT:    pushl %esi
340; X86-NEXT:    subl $8, %esp
341; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
342; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
343; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
344; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
345; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
346; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
347; X86-NEXT:    movl %edx, %ecx
348; X86-NEXT:    negl %ecx
349; X86-NEXT:    cmovll %edx, %ecx
350; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
351; X86-NEXT:    movl %ebp, %ecx
352; X86-NEXT:    negl %ecx
353; X86-NEXT:    cmovll %ebp, %ecx
354; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill
355; X86-NEXT:    movl %ebx, %ebp
356; X86-NEXT:    negl %ebp
357; X86-NEXT:    cmovll %ebx, %ebp
358; X86-NEXT:    movl %edi, %ebx
359; X86-NEXT:    negl %ebx
360; X86-NEXT:    cmovll %edi, %ebx
361; X86-NEXT:    movl %esi, %edi
362; X86-NEXT:    negl %edi
363; X86-NEXT:    cmovll %esi, %edi
364; X86-NEXT:    movl %eax, %esi
365; X86-NEXT:    negl %esi
366; X86-NEXT:    cmovll %eax, %esi
367; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
368; X86-NEXT:    movl %ecx, %eax
369; X86-NEXT:    negl %eax
370; X86-NEXT:    cmovll %ecx, %eax
371; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
372; X86-NEXT:    movl %edx, %ecx
373; X86-NEXT:    negl %ecx
374; X86-NEXT:    cmovll %edx, %ecx
375; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
376; X86-NEXT:    movl %ecx, 28(%edx)
377; X86-NEXT:    movl %eax, 24(%edx)
378; X86-NEXT:    movl %esi, 20(%edx)
379; X86-NEXT:    movl %edi, 16(%edx)
380; X86-NEXT:    movl %ebx, 12(%edx)
381; X86-NEXT:    movl %ebp, 8(%edx)
382; X86-NEXT:    movl (%esp), %eax # 4-byte Reload
383; X86-NEXT:    movl %eax, 4(%edx)
384; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
385; X86-NEXT:    movl %eax, (%edx)
386; X86-NEXT:    movl %edx, %eax
387; X86-NEXT:    addl $8, %esp
388; X86-NEXT:    popl %esi
389; X86-NEXT:    popl %edi
390; X86-NEXT:    popl %ebx
391; X86-NEXT:    popl %ebp
392; X86-NEXT:    retl $4
393  %r = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %a, i1 false)
394  ret <8 x i32> %r
395}
396
397define <8 x i16> @test_v8i16(<8 x i16> %a) nounwind {
398; SSE-LABEL: test_v8i16:
399; SSE:       # %bb.0:
400; SSE-NEXT:    pxor %xmm1, %xmm1
401; SSE-NEXT:    psubw %xmm0, %xmm1
402; SSE-NEXT:    pmaxsw %xmm1, %xmm0
403; SSE-NEXT:    retq
404;
405; AVX-LABEL: test_v8i16:
406; AVX:       # %bb.0:
407; AVX-NEXT:    vpabsw %xmm0, %xmm0
408; AVX-NEXT:    retq
409;
410; X86-LABEL: test_v8i16:
411; X86:       # %bb.0:
412; X86-NEXT:    pushl %ebp
413; X86-NEXT:    pushl %ebx
414; X86-NEXT:    pushl %edi
415; X86-NEXT:    pushl %esi
416; X86-NEXT:    pushl %eax
417; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
418; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %esi
419; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %edi
420; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ebx
421; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ebp
422; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
423; X86-NEXT:    movl %edx, %ecx
424; X86-NEXT:    negw %cx
425; X86-NEXT:    cmovlw %dx, %cx
426; X86-NEXT:    movw %cx, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill
427; X86-NEXT:    movl %ebp, %ecx
428; X86-NEXT:    negw %cx
429; X86-NEXT:    cmovlw %bp, %cx
430; X86-NEXT:    movw %cx, (%esp) # 2-byte Spill
431; X86-NEXT:    movl %ebx, %ebp
432; X86-NEXT:    negw %bp
433; X86-NEXT:    cmovlw %bx, %bp
434; X86-NEXT:    movl %edi, %ebx
435; X86-NEXT:    negw %bx
436; X86-NEXT:    cmovlw %di, %bx
437; X86-NEXT:    movl %esi, %edi
438; X86-NEXT:    negw %di
439; X86-NEXT:    cmovlw %si, %di
440; X86-NEXT:    movl %eax, %esi
441; X86-NEXT:    negw %si
442; X86-NEXT:    cmovlw %ax, %si
443; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
444; X86-NEXT:    movl %ecx, %eax
445; X86-NEXT:    negw %ax
446; X86-NEXT:    cmovlw %cx, %ax
447; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %edx
448; X86-NEXT:    movl %edx, %ecx
449; X86-NEXT:    negw %cx
450; X86-NEXT:    cmovlw %dx, %cx
451; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
452; X86-NEXT:    movw %cx, 14(%edx)
453; X86-NEXT:    movw %ax, 12(%edx)
454; X86-NEXT:    movw %si, 10(%edx)
455; X86-NEXT:    movw %di, 8(%edx)
456; X86-NEXT:    movw %bx, 6(%edx)
457; X86-NEXT:    movw %bp, 4(%edx)
458; X86-NEXT:    movzwl (%esp), %eax # 2-byte Folded Reload
459; X86-NEXT:    movw %ax, 2(%edx)
460; X86-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload
461; X86-NEXT:    movw %ax, (%edx)
462; X86-NEXT:    movl %edx, %eax
463; X86-NEXT:    addl $4, %esp
464; X86-NEXT:    popl %esi
465; X86-NEXT:    popl %edi
466; X86-NEXT:    popl %ebx
467; X86-NEXT:    popl %ebp
468; X86-NEXT:    retl $4
469  %r = call <8 x i16> @llvm.abs.v8i16(<8 x i16> %a, i1 false)
470  ret <8 x i16> %r
471}
472
473define <16 x i8> @test_v16i8(<16 x i8> %a) nounwind {
474; SSE-LABEL: test_v16i8:
475; SSE:       # %bb.0:
476; SSE-NEXT:    pxor %xmm1, %xmm1
477; SSE-NEXT:    psubb %xmm0, %xmm1
478; SSE-NEXT:    pminub %xmm1, %xmm0
479; SSE-NEXT:    retq
480;
481; AVX-LABEL: test_v16i8:
482; AVX:       # %bb.0:
483; AVX-NEXT:    vpabsb %xmm0, %xmm0
484; AVX-NEXT:    retq
485;
486; X86-LABEL: test_v16i8:
487; X86:       # %bb.0:
488; X86-NEXT:    pushl %ebx
489; X86-NEXT:    pushl %esi
490; X86-NEXT:    subl $12, %esp
491; X86-NEXT:    movb {{[0-9]+}}(%esp), %bh
492; X86-NEXT:    movb {{[0-9]+}}(%esp), %bl
493; X86-NEXT:    movb {{[0-9]+}}(%esp), %dh
494; X86-NEXT:    movb {{[0-9]+}}(%esp), %ch
495; X86-NEXT:    movb {{[0-9]+}}(%esp), %ah
496; X86-NEXT:    movb {{[0-9]+}}(%esp), %dl
497; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl
498; X86-NEXT:    movb %cl, %al
499; X86-NEXT:    sarb $7, %al
500; X86-NEXT:    addb %al, %cl
501; X86-NEXT:    xorb %al, %cl
502; X86-NEXT:    movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
503; X86-NEXT:    movb %dl, %al
504; X86-NEXT:    sarb $7, %al
505; X86-NEXT:    addb %al, %dl
506; X86-NEXT:    xorb %al, %dl
507; X86-NEXT:    movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
508; X86-NEXT:    movb %ah, %al
509; X86-NEXT:    sarb $7, %al
510; X86-NEXT:    addb %al, %ah
511; X86-NEXT:    xorb %al, %ah
512; X86-NEXT:    movb %ah, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
513; X86-NEXT:    movb %ch, %al
514; X86-NEXT:    sarb $7, %al
515; X86-NEXT:    addb %al, %ch
516; X86-NEXT:    xorb %al, %ch
517; X86-NEXT:    movb %ch, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
518; X86-NEXT:    movb %dh, %al
519; X86-NEXT:    sarb $7, %al
520; X86-NEXT:    addb %al, %dh
521; X86-NEXT:    xorb %al, %dh
522; X86-NEXT:    movb %dh, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
523; X86-NEXT:    movl %ebx, %eax
524; X86-NEXT:    sarb $7, %al
525; X86-NEXT:    addb %al, %bl
526; X86-NEXT:    xorb %al, %bl
527; X86-NEXT:    movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
528; X86-NEXT:    movb %bh, %al
529; X86-NEXT:    sarb $7, %al
530; X86-NEXT:    addb %al, %bh
531; X86-NEXT:    xorb %al, %bh
532; X86-NEXT:    movb %bh, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
533; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl
534; X86-NEXT:    movl %ecx, %eax
535; X86-NEXT:    sarb $7, %al
536; X86-NEXT:    addb %al, %cl
537; X86-NEXT:    xorb %al, %cl
538; X86-NEXT:    movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
539; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl
540; X86-NEXT:    movl %ecx, %eax
541; X86-NEXT:    sarb $7, %al
542; X86-NEXT:    addb %al, %cl
543; X86-NEXT:    xorb %al, %cl
544; X86-NEXT:    movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
545; X86-NEXT:    movb {{[0-9]+}}(%esp), %bh
546; X86-NEXT:    movb %bh, %al
547; X86-NEXT:    sarb $7, %al
548; X86-NEXT:    addb %al, %bh
549; X86-NEXT:    xorb %al, %bh
550; X86-NEXT:    movb {{[0-9]+}}(%esp), %bl
551; X86-NEXT:    movl %ebx, %eax
552; X86-NEXT:    sarb $7, %al
553; X86-NEXT:    addb %al, %bl
554; X86-NEXT:    xorb %al, %bl
555; X86-NEXT:    movb {{[0-9]+}}(%esp), %dh
556; X86-NEXT:    movb %dh, %al
557; X86-NEXT:    sarb $7, %al
558; X86-NEXT:    addb %al, %dh
559; X86-NEXT:    xorb %al, %dh
560; X86-NEXT:    movb {{[0-9]+}}(%esp), %ch
561; X86-NEXT:    movb %ch, %al
562; X86-NEXT:    sarb $7, %al
563; X86-NEXT:    addb %al, %ch
564; X86-NEXT:    xorb %al, %ch
565; X86-NEXT:    movb {{[0-9]+}}(%esp), %dl
566; X86-NEXT:    movl %edx, %eax
567; X86-NEXT:    sarb $7, %al
568; X86-NEXT:    addb %al, %dl
569; X86-NEXT:    xorb %al, %dl
570; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl
571; X86-NEXT:    movl %ecx, %eax
572; X86-NEXT:    sarb $7, %al
573; X86-NEXT:    addb %al, %cl
574; X86-NEXT:    xorb %al, %cl
575; X86-NEXT:    movb {{[0-9]+}}(%esp), %al
576; X86-NEXT:    movb %al, %ah
577; X86-NEXT:    sarb $7, %ah
578; X86-NEXT:    addb %ah, %al
579; X86-NEXT:    xorb %ah, %al
580; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
581; X86-NEXT:    movb %al, 15(%esi)
582; X86-NEXT:    movb %cl, 14(%esi)
583; X86-NEXT:    movb %dl, 13(%esi)
584; X86-NEXT:    movb %ch, 12(%esi)
585; X86-NEXT:    movb %dh, 11(%esi)
586; X86-NEXT:    movb %bl, 10(%esi)
587; X86-NEXT:    movb %bh, 9(%esi)
588; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
589; X86-NEXT:    movb %al, 8(%esi)
590; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
591; X86-NEXT:    movb %al, 7(%esi)
592; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
593; X86-NEXT:    movb %al, 6(%esi)
594; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
595; X86-NEXT:    movb %al, 5(%esi)
596; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
597; X86-NEXT:    movb %al, 4(%esi)
598; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
599; X86-NEXT:    movb %al, 3(%esi)
600; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
601; X86-NEXT:    movb %al, 2(%esi)
602; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
603; X86-NEXT:    movb %al, 1(%esi)
604; X86-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Reload
605; X86-NEXT:    movb %al, (%esi)
606; X86-NEXT:    movl %esi, %eax
607; X86-NEXT:    addl $12, %esp
608; X86-NEXT:    popl %esi
609; X86-NEXT:    popl %ebx
610; X86-NEXT:    retl $4
611  %r = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %a, i1 false)
612  ret <16 x i8> %r
613}
614