Index: tests_lit/llvm2ice_tests/fp.arm.call.ll |
diff --git a/tests_lit/llvm2ice_tests/fp.arm.call.ll b/tests_lit/llvm2ice_tests/fp.arm.call.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..39a567116cf8b854e858e036ee6f78ab95003c3b |
--- /dev/null |
+++ b/tests_lit/llvm2ice_tests/fp.arm.call.ll |
@@ -0,0 +1,579 @@ |
+; Tests validating the vfp calling convention for ARM32. |
Jim Stichnoth
2015/09/16 21:31:54
Is it possible yet to enable crosstest/test_callin
John
2015/09/16 23:12:47
Not yet. Vector types are not handled at all, and
|
+; |
+; RUN: %if --need=target_ARM32 --need=allow_dump \ |
+; RUN: --command %p2i --filetype=asm --assemble \ |
+; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
+; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
+; RUN: --command FileCheck %s |
+; RUN: %if --need=target_ARM32 --need=allow_dump \ |
+; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
+; RUN: -i %s --args -Om1 --skip-unimplemented \ |
+; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
+; RUN: --command FileCheck %s |
+ |
+; Boring tests ensuring float arguments are allocated "correctly." Unfortunately |
+; this test cannot verify whether the right arguments are being allocated to the |
+; right register. |
+declare void @float1(float %p0) |
+declare void @float2(float %p0, float %p1) |
+declare void @float3(float %p0, float %p1, float %p2) |
+declare void @float4(float %p0, float %p1, float %p2, float %p3) |
+declare void @float5(float %p0, float %p1, float %p2, float %p3, float %p4) |
+declare void @float6(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5) |
+declare void @float7(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6) |
+declare void @float8(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7) |
+declare void @float9(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8) |
+declare void @float10(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9) |
+declare void @float11(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10) |
+declare void @float12(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11) |
+declare void @float13(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11, float %p12) |
+declare void @float14(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11, float %p12, float %p13) |
+declare void @float15(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11, float %p12, float %p13, |
+ float %p14) |
+declare void @float16(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11, float %p12, float %p13, |
+ float %p14, float %p15) |
+declare void @float17(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11, float %p12, float %p13, |
+ float %p14, float %p15, float %p16) |
+declare void @float18(float %p0, float %p1, float %p2, float %p3, float %p4, |
+ float %p5, float %p6, float %p7, float %p8, float %p9, |
+ float %p10, float %p11, float %p12, float %p13, |
+ float %p14, float %p15, float %p16, float %p17) |
+define void @floatHarness() nounwind { |
+; CHECK-LABEL: floatHarness |
+ call void @float1(float 1.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK: bl {{.*}} float1 |
+ call void @float2(float 1.0, float 2.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} float2 |
+ call void @float3(float 1.0, float 2.0, float 3.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK: bl {{.*}} float3 |
+ call void @float4(float 1.0, float 2.0, float 3.0, float 4.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK: bl {{.*}} float4 |
+ call void @float5(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK: bl {{.*}} float5 |
+ call void @float6(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK: bl {{.*}} float6 |
+ call void @float7(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK: bl {{.*}} float7 |
+ call void @float8(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK: bl {{.*}} float8 |
+ call void @float9(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK: bl {{.*}} float9 |
+ call void @float10(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK: bl {{.*}} float10 |
+ call void @float11(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK: bl {{.*}} float11 |
+ call void @float12(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK: bl {{.*}} float12 |
+ call void @float13(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0, float 13.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK-DAG: vldr s12 |
+; CHECK: bl {{.*}} float13 |
+ call void @float14(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0, float 13.0, float 14.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK-DAG: vldr s12 |
+; CHECK-DAG: vldr s13 |
+; CHECK: bl {{.*}} float14 |
+ call void @float15(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0, float 13.0, float 14.0, |
+ float 15.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK-DAG: vldr s12 |
+; CHECK-DAG: vldr s13 |
+; CHECK-DAG: vldr s14 |
+; CHECK: bl {{.*}} float15 |
+ call void @float16(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0, float 13.0, float 14.0, |
+ float 15.0, float 16.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK-DAG: vldr s12 |
+; CHECK-DAG: vldr s13 |
+; CHECK-DAG: vldr s14 |
+; CHECK-DAG: vldr s15 |
+; CHECK: bl {{.*}} float16 |
+ call void @float17(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0, float 13.0, float 14.0, |
+ float 15.0, float 16.0, float 17.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK-DAG: vldr s12 |
+; CHECK-DAG: vldr s13 |
+; CHECK-DAG: vldr s14 |
+; CHECK-DAG: vldr s15 |
+; CHECK-DAG: vstr s{{.*}}, [sp] |
+; CHECK: bl {{.*}} float17 |
+ call void @float18(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, |
+ float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, |
+ float 11.0, float 12.0, float 13.0, float 14.0, |
+ float 15.0, float 16.0, float 17.0, float 18.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr s1 |
+; CHECK-DAG: vldr s2 |
+; CHECK-DAG: vldr s3 |
+; CHECK-DAG: vldr s4 |
+; CHECK-DAG: vldr s5 |
+; CHECK-DAG: vldr s6 |
+; CHECK-DAG: vldr s7 |
+; CHECK-DAG: vldr s8 |
+; CHECK-DAG: vldr s9 |
+; CHECK-DAG: vldr s10 |
+; CHECK-DAG: vldr s11 |
+; CHECK-DAG: vldr s12 |
+; CHECK-DAG: vldr s13 |
+; CHECK-DAG: vldr s14 |
+; CHECK-DAG: vldr s15 |
+; CHECK-DAG: vstr s{{.*}}, [sp] |
+; CHECK-DAG: vstr s{{.*}}, [sp, #4] |
+; CHECK: bl {{.*}} float18 |
+ ret void |
+} |
+ |
+declare void @double1(double %p0) |
+declare void @double2(double %p0, double %p1) |
+declare void @double3(double %p0, double %p1, double %p2) |
+declare void @double4(double %p0, double %p1, double %p2, double %p3) |
+declare void @double5(double %p0, double %p1, double %p2, double %p3, |
+ double %p4) |
+declare void @double6(double %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5) |
+declare void @double7(double %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6) |
+declare void @double8(double %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7) |
+declare void @double9(double %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ double %p8) |
+declare void @double10(double %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ double %p8, double %p9) |
+define void @doubleHarness() nounwind { |
+; CHECK-LABEL: doubleHarness |
+ call void @double1(double 1.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK: bl {{.*}} double1 |
+ call void @double2(double 1.0, double 2.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK: bl {{.*}} double2 |
+ call void @double3(double 1.0, double 2.0, double 3.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK: bl {{.*}} double3 |
+ call void @double4(double 1.0, double 2.0, double 3.0, double 4.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK: bl {{.*}} double4 |
+ call void @double5(double 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK: bl {{.*}} double5 |
+ call void @double6(double 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK: bl {{.*}} double6 |
+ call void @double7(double 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK: bl {{.*}} double7 |
+ call void @double8(double 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK: bl {{.*}} double8 |
+ call void @double9(double 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ double 9.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK: bl {{.*}} double9 |
+ call void @double10(double 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ double 9.0, double 10.0) |
+; CHECK-DAG: vldr d0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK-DAG: vstr d{{.*}}, [sp, #8] |
+; CHECK: bl {{.*}} double10 |
+ |
+ ret void |
+} |
+ |
+declare void @testFDF(float %p0, double %p1, float %p2) |
+declare void @testFDDF(float %p0, double %p1, double %p2, float %p3) |
+declare void @testFDDDF(float %p0, double %p1, double %p2, double %p3, |
+ float %p4) |
+declare void @testFDDDDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, float %p5) |
+declare void @testFDDDDDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, float %p6) |
+declare void @testFDDDDDDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, float %p7) |
+declare void @testFDDDDDDDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ float %p8) |
+declare void @testFDDDDDDDFD(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ float %p8, double %p9) |
+declare void @testFDDDDDDDDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ double %p8, float %p9) |
+declare void @testFDDDDDDDDDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ double %p8, double %p9, float %p10) |
+declare void @testFDDDDDDDDFD(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ double %p8, float %p9, double %p10) |
+declare void @testFDDDDDDDDFDF(float %p0, double %p1, double %p2, double %p3, |
+ double %p4, double %p5, double %p6, double %p7, |
+ double %p8, float %p9, double %p10, float %p11) |
+define void @packsFloats() nounwind { |
+; CHECK-LABEL: packsFloats |
+ call void @testFDF(float 1.0, double 2.0, float 3.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDF |
+ call void @testFDDF(float 1.0, double 2.0, double 3.0, float 4.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDF |
+ call void @testFDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ float 5.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDDF |
+ call void @testFDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, float 6.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDDDF |
+ call void @testFDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, float 7.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDDDDF |
+ call void @testFDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, float 8.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDDDDDF |
+ call void @testFDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ float 9.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDDDDDDF |
+ call void @testFDDDDDDDFD(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ float 9.0, double 10.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK-DAG: vldr s1 |
+; CHECK: bl {{.*}} testFDDDDDDDFD |
+ call void @testFDDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ double 9.0, float 10.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK-DAG: vstr s{{.*}}, [sp, #8] |
+; CHECK: bl {{.*}} testFDDDDDDDDF |
+ call void @testFDDDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ double 9.0, double 10.0, float 11.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK-DAG: vstr d{{.*}}, [sp, #8] |
+; CHECK-DAG: vstr s{{.*}}, [sp, #16] |
+; CHECK: bl {{.*}} testFDDDDDDDDDF |
+ call void @testFDDDDDDDDFD(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ double 9.0, float 10.0, double 11.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK-DAG: vstr s{{.*}}, [sp, #8] |
+; CHECK-DAG: vstr d{{.*}}, [sp, #16] |
+; CHECK: bl {{.*}} testFDDDDDDDDFD |
+ call void @testFDDDDDDDDFDF(float 1.0, double 2.0, double 3.0, double 4.0, |
+ double 5.0, double 6.0, double 7.0, double 8.0, |
+ double 9.0, float 10.0, double 11.0, float 12.0) |
+; CHECK-DAG: vldr s0 |
+; CHECK-DAG: vldr d1 |
+; CHECK-DAG: vldr d2 |
+; CHECK-DAG: vldr d3 |
+; CHECK-DAG: vldr d4 |
+; CHECK-DAG: vldr d5 |
+; CHECK-DAG: vldr d6 |
+; CHECK-DAG: vldr d7 |
+; CHECK-DAG: vstr d{{.*}}, [sp] |
+; CHECK-DAG: vstr s{{.*}}, [sp, #8] |
+; CHECK-DAG: vstr d{{.*}}, [sp, #16] |
+; CHECK-DAG: vstr s{{.*}}, [sp, #24] |
+; CHECK: bl {{.*}} testFDDDDDDDDFD |
+ |
+ ret void |
+} |
+ |
+declare void @tDDDDDDDDFD(double %p1, double %p2, double %p3, double %p4, double %p5, double %p6, double %p7, double %p8, float %p9, double %p10) |
+ |
+define void @foo() { |
+ call void @tDDDDDDDDFD(double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, float 1.0, double 1.0) |
+ ret void |
+} |