92 lines · plain
1; RUN: sed -e "s/RETTYPE/void/;s/RETVAL//" %s | llc -mtriple=x86_64-win32 -mcpu=corei7 | FileCheck --check-prefixes=ALL,VOID %s2; RUN: sed -e "s/RETTYPE/i32/;s/RETVAL/undef/" %s | llc -mtriple=x86_64-win32 -mcpu=corei7 | FileCheck --check-prefixes=ALL,INT %s3; RUN: sed -e "s/RETTYPE/\{i64\,i64\}/;s/RETVAL/undef/" %s | llc -mtriple=x86_64-win32 -mcpu=corei7 | FileCheck --check-prefixes=ALL,INT128 %s4 5; Every GPR should be saved, except r11 and return registers.6; XMM registers 6-15 should also be saved.7define preserve_mostcc RETTYPE @preserve_mostcc1(i64, i64, double, double) nounwind {8entry:9;ALL-LABEL: preserve_mostcc110;ALL: pushq %r1011;ALL-NEXT: pushq %r912;ALL-NEXT: pushq %r813;ALL-NEXT: pushq %rdi14;ALL-NEXT: pushq %rsi15;VOID-NEXT: pushq %rdx16;INT-NEXT: pushq %rdx17;INT128-NOT: pushq %rdx18;ALL-NEXT: pushq %rcx19;VOID-NEXT: pushq %rax20;INT-NOT: pushq %rax21;INT128-NOT: pushq %rax22;ALL-NEXT: pushq %rbp23;ALL-NEXT: pushq %r1524;ALL-NEXT: pushq %r1425;ALL-NEXT: pushq %r1326;ALL-NEXT: pushq %r1227;ALL-NEXT: pushq %rbx28;ALL: movaps %xmm1529;ALL-NEXT: movaps %xmm1430;ALL-NEXT: movaps %xmm1331;ALL-NEXT: movaps %xmm1232;ALL-NEXT: movaps %xmm1133;ALL-NEXT: movaps %xmm1034;ALL-NEXT: movaps %xmm935;ALL-NEXT: movaps %xmm836;ALL-NEXT: movaps %xmm737;ALL-NEXT: movaps %xmm638;ALL-NOT: movaps %xmm539;ALL-NOT: movaps %xmm440;ALL-NOT: movaps %xmm341;ALL-NOT: movaps %xmm242;ALL-NOT: movaps %xmm143;ALL-NOT: movaps %xmm044;ALL-NOT: movaps {{.*}} %xmm045;ALL-NOT: movaps {{.*}} %xmm146;ALL-NOT: movaps {{.*}} %xmm247;ALL-NOT: movaps {{.*}} %xmm348;ALL-NOT: movaps {{.*}} %xmm449;ALL-NOT: movaps {{.*}} %xmm550;ALL: movaps {{.*}} %xmm651;ALL-NEXT: movaps {{.*}} %xmm752;ALL-NEXT: movaps {{.*}} %xmm853;ALL-NEXT: movaps {{.*}} %xmm954;ALL-NEXT: movaps {{.*}} %xmm1055;ALL-NEXT: movaps {{.*}} %xmm1156;ALL-NEXT: movaps {{.*}} %xmm1257;ALL-NEXT: movaps {{.*}} %xmm1358;ALL-NEXT: movaps {{.*}} %xmm1459;ALL-NEXT: movaps {{.*}} %xmm1560;ALL: popq %rbx61;ALL-NEXT: popq %r1262;ALL-NEXT: popq %r1363;ALL-NEXT: popq %r1464;ALL-NEXT: popq %r1565;ALL-NEXT: popq %rbp66;VOID-NEXT: popq %rax67;INT-NOT: popq %rax68;INT128-NOT: popq %rax69;ALL-NEXT: popq %rcx70;VOID-NEXT: popq %rdx71;INT-NEXT: popq %rdx72;INT128-NOT: popq %rdx73;ALL-NEXT: popq %rsi74;ALL-NEXT: popq %rdi75;ALL-NEXT: popq %r876;ALL-NEXT: popq %r977;ALL-NEXT: popq %r1078 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 RETVAL80}81 82; Make sure XMMs are not saved before the call83declare preserve_mostcc RETTYPE @foo(i64, i64, double, double)84define void @preserve_mostcc2() nounwind {85entry:86;ALL-LABEL: preserve_mostcc287;ALL-NOT: movaps88;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 void91}92