xref: /llvm-project/llvm/test/CodeGen/X86/x86-32-vector-calling-conv.ll (revision 86eff6be686a1e41e13c08ebfc2db4dd4d58e7c6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx512f | FileCheck %s --check-prefix=DARWIN
3; RUN: llc < %s -mtriple=i686-pc-linux -mattr=+avx512f | FileCheck %s --check-prefix=LINUX
4
5define <4 x i32> @test_sse(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) nounwind {
6; DARWIN-LABEL: test_sse:
7; DARWIN:       ## %bb.0:
8; DARWIN-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
9; DARWIN-NEXT:    vpaddd %xmm3, %xmm2, %xmm1
10; DARWIN-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
11; DARWIN-NEXT:    retl
12;
13; LINUX-LABEL: test_sse:
14; LINUX:       # %bb.0:
15; LINUX-NEXT:    subl $12, %esp
16; LINUX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
17; LINUX-NEXT:    vpaddd {{[0-9]+}}(%esp), %xmm2, %xmm1
18; LINUX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
19; LINUX-NEXT:    addl $12, %esp
20; LINUX-NEXT:    retl
21  %r0 = add <4 x i32> %a, %b
22  %r1 = add <4 x i32> %c, %d
23  %ret = add <4 x i32> %r0, %r1
24  ret <4 x i32> %ret
25}
26
27define <8 x i32> @test_avx(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i32> %d) nounwind {
28; DARWIN-LABEL: test_avx:
29; DARWIN:       ## %bb.0:
30; DARWIN-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
31; DARWIN-NEXT:    vpaddd %ymm3, %ymm2, %ymm1
32; DARWIN-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
33; DARWIN-NEXT:    retl
34;
35; LINUX-LABEL: test_avx:
36; LINUX:       # %bb.0:
37; LINUX-NEXT:    pushl %ebp
38; LINUX-NEXT:    movl %esp, %ebp
39; LINUX-NEXT:    andl $-32, %esp
40; LINUX-NEXT:    subl $32, %esp
41; LINUX-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
42; LINUX-NEXT:    vpaddd 8(%ebp), %ymm2, %ymm1
43; LINUX-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
44; LINUX-NEXT:    movl %ebp, %esp
45; LINUX-NEXT:    popl %ebp
46; LINUX-NEXT:    retl
47  %r0 = add <8 x i32> %a, %b
48  %r1 = add <8 x i32> %c, %d
49  %ret = add <8 x i32> %r0, %r1
50  ret <8 x i32> %ret
51}
52
53define <16 x i32> @test_avx512(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i32> %d) nounwind {
54; DARWIN-LABEL: test_avx512:
55; DARWIN:       ## %bb.0:
56; DARWIN-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
57; DARWIN-NEXT:    vpaddd %zmm3, %zmm2, %zmm1
58; DARWIN-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
59; DARWIN-NEXT:    retl
60;
61; LINUX-LABEL: test_avx512:
62; LINUX:       # %bb.0:
63; LINUX-NEXT:    pushl %ebp
64; LINUX-NEXT:    movl %esp, %ebp
65; LINUX-NEXT:    andl $-64, %esp
66; LINUX-NEXT:    subl $64, %esp
67; LINUX-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
68; LINUX-NEXT:    vpaddd 8(%ebp), %zmm2, %zmm1
69; LINUX-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
70; LINUX-NEXT:    movl %ebp, %esp
71; LINUX-NEXT:    popl %ebp
72; LINUX-NEXT:    retl
73  %r0 = add <16 x i32> %a, %b
74  %r1 = add <16 x i32> %c, %d
75  %ret = add <16 x i32> %r0, %r1
76  ret <16 x i32> %ret
77}
78