[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / X86 / preserve_mostcc64_win.ll
blob7042a2e77da1b6a83002daeed93166fe5f42fe1d
1 ; RUN: sed -e "s/RETTYPE/void/;s/RETVAL//" %s | llc -mtriple=x86_64-win32 -mcpu=corei7 | FileCheck --check-prefixes=ALL,VOID %s
2 ; RUN: sed -e "s/RETTYPE/i32/;s/RETVAL/undef/" %s | llc -mtriple=x86_64-win32 -mcpu=corei7 | FileCheck --check-prefixes=ALL,INT %s
3 ; RUN: sed -e "s/RETTYPE/\{i64\,i64\}/;s/RETVAL/undef/" %s | llc -mtriple=x86_64-win32 -mcpu=corei7 | FileCheck --check-prefixes=ALL,INT128 %s
5 ; Every GPR should be saved, except r11 and return registers.
6 ; XMM registers 6-15 should also be saved.
7 define preserve_mostcc RETTYPE @preserve_mostcc1(i64, i64, double, double) nounwind {
8 entry:
9 ;ALL-LABEL:   preserve_mostcc1
10 ;ALL:         pushq %r10
11 ;ALL-NEXT:    pushq %r9
12 ;ALL-NEXT:    pushq %r8
13 ;ALL-NEXT:    pushq %rdi
14 ;ALL-NEXT:    pushq %rsi
15 ;VOID-NEXT:   pushq %rdx
16 ;INT-NEXT:    pushq %rdx
17 ;INT128-NOT:  pushq %rdx
18 ;ALL-NEXT:    pushq %rcx
19 ;VOID-NEXT:   pushq %rax
20 ;INT-NOT:     pushq %rax
21 ;INT128-NOT:  pushq %rax
22 ;ALL-NEXT:    pushq %rbp
23 ;ALL-NEXT:    pushq %r15
24 ;ALL-NEXT:    pushq %r14
25 ;ALL-NEXT:    pushq %r13
26 ;ALL-NEXT:    pushq %r12
27 ;ALL-NEXT:    pushq %rbx
28 ;ALL:         movaps %xmm15
29 ;ALL-NEXT:    movaps %xmm14
30 ;ALL-NEXT:    movaps %xmm13
31 ;ALL-NEXT:    movaps %xmm12
32 ;ALL-NEXT:    movaps %xmm11
33 ;ALL-NEXT:    movaps %xmm10
34 ;ALL-NEXT:    movaps %xmm9
35 ;ALL-NEXT:    movaps %xmm8
36 ;ALL-NEXT:    movaps %xmm7
37 ;ALL-NEXT:    movaps %xmm6
38 ;ALL-NOT:     movaps %xmm5
39 ;ALL-NOT:     movaps %xmm4
40 ;ALL-NOT:     movaps %xmm3
41 ;ALL-NOT:     movaps %xmm2
42 ;ALL-NOT:     movaps %xmm1
43 ;ALL-NOT:     movaps %xmm0
44 ;ALL-NOT:     movaps {{.*}} %xmm0
45 ;ALL-NOT:     movaps {{.*}} %xmm1
46 ;ALL-NOT:     movaps {{.*}} %xmm2
47 ;ALL-NOT:     movaps {{.*}} %xmm3
48 ;ALL-NOT:     movaps {{.*}} %xmm4
49 ;ALL-NOT:     movaps {{.*}} %xmm5
50 ;ALL:         movaps {{.*}} %xmm6
51 ;ALL-NEXT:    movaps {{.*}} %xmm7
52 ;ALL-NEXT:    movaps {{.*}} %xmm8
53 ;ALL-NEXT:    movaps {{.*}} %xmm9
54 ;ALL-NEXT:    movaps {{.*}} %xmm10
55 ;ALL-NEXT:    movaps {{.*}} %xmm11
56 ;ALL-NEXT:    movaps {{.*}} %xmm12
57 ;ALL-NEXT:    movaps {{.*}} %xmm13
58 ;ALL-NEXT:    movaps {{.*}} %xmm14
59 ;ALL-NEXT:    movaps {{.*}} %xmm15
60 ;ALL:         popq    %rbx
61 ;ALL-NEXT:    popq    %r12
62 ;ALL-NEXT:    popq    %r13
63 ;ALL-NEXT:    popq    %r14
64 ;ALL-NEXT:    popq    %r15
65 ;ALL-NEXT:    popq    %rbp
66 ;VOID-NEXT:   popq    %rax
67 ;INT-NOT:     popq    %rax
68 ;INT128-NOT:  popq    %rax
69 ;ALL-NEXT:    popq    %rcx
70 ;VOID-NEXT:   popq    %rdx
71 ;INT-NEXT:    popq    %rdx
72 ;INT128-NOT:  popq    %rdx
73 ;ALL-NEXT:    popq    %rsi
74 ;ALL-NEXT:    popq    %rdi
75 ;ALL-NEXT:    popq    %r8
76 ;ALL-NEXT:    popq    %r9
77 ;ALL-NEXT:    popq    %r10
78   call void asm sideeffect "", "~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15},~{rbp},~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15}"()
79   ret RETTYPE RETVAL
82 ; Make sure XMMs are not saved before the call
83 declare preserve_mostcc RETTYPE @foo(i64, i64, double, double)
84 define void @preserve_mostcc2() nounwind {
85 entry:
86 ;ALL-LABEL: preserve_mostcc2
87 ;ALL-NOT:   movaps
88 ;ALL-NOT:   {{.*xmm[0-1,4-9].*}}
89   call preserve_mostcc RETTYPE @foo(i64 1, i64 2, double 3.0, double 4.0)
90   ret void