1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i686-pc-win32 -mattr=+sse2 < %s | FileCheck %s --check-prefix=CHECK --check-prefix=X86 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-pc-win32 < %s | FileCheck %s --check-prefix=CHECK --check-prefix=X64 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Test integer arguments. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc i32 @test_int_1() { 7*9880d681SAndroid Build Coastguard Worker ret i32 0 8*9880d681SAndroid Build Coastguard Worker} 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_int_1@@0: 11*9880d681SAndroid Build Coastguard Worker; CHECK: xorl %eax, %eax 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc i32 @test_int_2(i32 inreg %a) { 14*9880d681SAndroid Build Coastguard Worker ret i32 %a 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; X86-LABEL: {{^}}test_int_2@@4: 18*9880d681SAndroid Build Coastguard Worker; X64-LABEL: {{^}}test_int_2@@8: 19*9880d681SAndroid Build Coastguard Worker; CHECK: movl %ecx, %eax 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc i32 @test_int_3(i64 inreg %a) { 22*9880d681SAndroid Build Coastguard Worker %at = trunc i64 %a to i32 23*9880d681SAndroid Build Coastguard Worker ret i32 %at 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; X86-LABEL: {{^}}test_int_3@@8: 27*9880d681SAndroid Build Coastguard Worker; X64-LABEL: {{^}}test_int_3@@8: 28*9880d681SAndroid Build Coastguard Worker; CHECK: movl %ecx, %eax 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc i32 @test_int_4(i32 inreg %a, i32 inreg %b) { 31*9880d681SAndroid Build Coastguard Worker %s = add i32 %a, %b 32*9880d681SAndroid Build Coastguard Worker ret i32 %s 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; X86-LABEL: {{^}}test_int_4@@8: 36*9880d681SAndroid Build Coastguard Worker; X86: leal (%ecx,%edx), %eax 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; X64-LABEL: {{^}}test_int_4@@16: 39*9880d681SAndroid Build Coastguard Worker; X64: leal (%rcx,%rdx), %eax 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc i32 @"\01test_int_5"(i32, i32) { 42*9880d681SAndroid Build Coastguard Worker ret i32 0 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_int_5: 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc double @test_fp_1(double %a, double %b) { 47*9880d681SAndroid Build Coastguard Worker ret double %b 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_fp_1@@16: 50*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm1, %xmm0 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc double @test_fp_2( 53*9880d681SAndroid Build Coastguard Worker double, double, double, double, double, double, double %r) { 54*9880d681SAndroid Build Coastguard Worker ret double %r 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_fp_2@@56: 57*9880d681SAndroid Build Coastguard Worker; CHECK: movsd {{[0-9]+\(%[re]sp\)}}, %xmm0 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc {double, double, double, double} @test_fp_3() { 60*9880d681SAndroid Build Coastguard Worker ret {double, double, double, double} 61*9880d681SAndroid Build Coastguard Worker { double 0.0, double 0.0, double 0.0, double 0.0 } 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_fp_3@@0: 64*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm0 65*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm1 66*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm2 67*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm3 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; FIXME: Returning via x87 isn't compatible, but its hard to structure the 70*9880d681SAndroid Build Coastguard Worker; tablegen any other way. 71*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc {double, double, double, double, double} @test_fp_4() { 72*9880d681SAndroid Build Coastguard Worker ret {double, double, double, double, double} 73*9880d681SAndroid Build Coastguard Worker { double 0.0, double 0.0, double 0.0, double 0.0, double 0.0 } 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_fp_4@@0: 76*9880d681SAndroid Build Coastguard Worker; CHECK: fldz 77*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm0 78*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm1 79*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm2 80*9880d681SAndroid Build Coastguard Worker; CHECK: xorps %xmm3 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc <16 x i8> @test_vec_1(<16 x i8> %a, <16 x i8> %b) { 83*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %b 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_vec_1@@32: 86*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm1, %xmm0 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerdefine x86_vectorcallcc <16 x i8> @test_vec_2( 89*9880d681SAndroid Build Coastguard Worker double, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> %r) { 90*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}test_vec_2@@104: 93*9880d681SAndroid Build Coastguard Worker; CHECK: movaps (%{{[re]}}cx), %xmm0 94