Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / x86-32-vector-calling-conv.ll
blobe5732d76ee8b31227db78d8862a9b609c6969373
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
5 define <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
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
27 define <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
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
53 define <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
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