-
Notifications
You must be signed in to change notification settings - Fork 14.6k
MSP430: Add test for llvm.sincos intrinsic #148602
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Mostly to test libcall behavior
@llvm/pr-subscribers-backend-msp430 Author: Matt Arsenault (arsenm) ChangesMostly to test libcall behavior Full diff: https://github.com/llvm/llvm-project/pull/148602.diff 1 Files Affected:
diff --git a/llvm/test/CodeGen/MSP430/llvm.sincos.ll b/llvm/test/CodeGen/MSP430/llvm.sincos.ll
new file mode 100644
index 0000000000000..5e77cee8c4b79
--- /dev/null
+++ b/llvm/test/CodeGen/MSP430/llvm.sincos.ll
@@ -0,0 +1,608 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
+; RUN: llc -mtriple=msp430-unknown-unknown < %s | FileCheck %s
+; RUN: llc -mtriple=msp430-unknown-linux < %s | FileCheck %s
+; RUN: llc -mtriple=msp430-unknown-linux-gnu < %s | FileCheck -check-prefix=GNU %s
+
+define { half, half } @test_sincos_f16(half %a) #0 {
+; CHECK-LABEL: test_sincos_f16:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: call #__extendhfsf2
+; CHECK-NEXT: mov r12, r10
+; CHECK-NEXT: mov r13, r9
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: mov r12, r8
+; CHECK-NEXT: mov r10, r12
+; CHECK-NEXT: mov r9, r13
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: mov r12, r14
+; CHECK-NEXT: mov r8, r12
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_f16:
+; GNU: ; %bb.0:
+; GNU-NEXT: push r10
+; GNU-NEXT: sub #8, r1
+; GNU-NEXT: call #__extendhfsf2
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #4, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 4(r1), r12
+; GNU-NEXT: mov 6(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: mov r12, r10
+; GNU-NEXT: mov 0(r1), r12
+; GNU-NEXT: mov 2(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: mov r12, r14
+; GNU-NEXT: mov r10, r12
+; GNU-NEXT: add #8, r1
+; GNU-NEXT: pop r10
+; GNU-NEXT: ret
+ %result = call { half, half } @llvm.sincos.f16(half %a)
+ ret { half, half } %result
+}
+
+define half @test_sincos_f16_only_use_sin(half %a) #0 {
+; CHECK-LABEL: test_sincos_f16_only_use_sin:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: call #__extendhfsf2
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_f16_only_use_sin:
+; GNU: ; %bb.0:
+; GNU-NEXT: sub #8, r1
+; GNU-NEXT: call #__extendhfsf2
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #4, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 4(r1), r12
+; GNU-NEXT: mov 6(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: add #8, r1
+; GNU-NEXT: ret
+ %result = call { half, half } @llvm.sincos.f16(half %a)
+ %result.0 = extractvalue { half, half } %result, 0
+ ret half %result.0
+}
+
+define half @test_sincos_f16_only_use_cos(half %a) #0 {
+; CHECK-LABEL: test_sincos_f16_only_use_cos:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: call #__extendhfsf2
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_f16_only_use_cos:
+; GNU: ; %bb.0:
+; GNU-NEXT: sub #8, r1
+; GNU-NEXT: call #__extendhfsf2
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #4, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 0(r1), r12
+; GNU-NEXT: mov 2(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: add #8, r1
+; GNU-NEXT: ret
+ %result = call { half, half } @llvm.sincos.f16(half %a)
+ %result.1 = extractvalue { half, half } %result, 1
+ ret half %result.1
+}
+
+define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) #0 {
+; CHECK-LABEL: test_sincos_v2f16:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r5
+; CHECK-NEXT: push r6
+; CHECK-NEXT: push r7
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: mov r12, r7
+; CHECK-NEXT: mov r13, r12
+; CHECK-NEXT: call #__extendhfsf2
+; CHECK-NEXT: mov r12, r10
+; CHECK-NEXT: mov r13, r9
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: mov r12, r8
+; CHECK-NEXT: mov r7, r12
+; CHECK-NEXT: call #__extendhfsf2
+; CHECK-NEXT: mov r12, r6
+; CHECK-NEXT: mov r13, r5
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: mov r12, r7
+; CHECK-NEXT: mov r6, r12
+; CHECK-NEXT: mov r5, r13
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: mov r12, r6
+; CHECK-NEXT: mov r10, r12
+; CHECK-NEXT: mov r9, r13
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: call #__truncsfhf2
+; CHECK-NEXT: mov r12, r15
+; CHECK-NEXT: mov r6, r12
+; CHECK-NEXT: mov r8, r13
+; CHECK-NEXT: mov r7, r14
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: pop r7
+; CHECK-NEXT: pop r6
+; CHECK-NEXT: pop r5
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_v2f16:
+; GNU: ; %bb.0:
+; GNU-NEXT: push r8
+; GNU-NEXT: push r9
+; GNU-NEXT: push r10
+; GNU-NEXT: sub #16, r1
+; GNU-NEXT: mov r13, r10
+; GNU-NEXT: call #__extendhfsf2
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #12, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: add #8, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov r10, r12
+; GNU-NEXT: call #__extendhfsf2
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #4, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 12(r1), r12
+; GNU-NEXT: mov 14(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: mov r12, r10
+; GNU-NEXT: mov 4(r1), r12
+; GNU-NEXT: mov 6(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: mov r12, r9
+; GNU-NEXT: mov 8(r1), r12
+; GNU-NEXT: mov 10(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: mov r12, r8
+; GNU-NEXT: mov 0(r1), r12
+; GNU-NEXT: mov 2(r1), r13
+; GNU-NEXT: call #__truncsfhf2
+; GNU-NEXT: mov r12, r15
+; GNU-NEXT: mov r10, r12
+; GNU-NEXT: mov r9, r13
+; GNU-NEXT: mov r8, r14
+; GNU-NEXT: add #16, r1
+; GNU-NEXT: pop r10
+; GNU-NEXT: pop r9
+; GNU-NEXT: pop r8
+; GNU-NEXT: ret
+ %result = call { <2 x half>, <2 x half> } @llvm.sincos.v2f16(<2 x half> %a)
+ ret { <2 x half>, <2 x half> } %result
+}
+
+define { float, float } @test_sincos_f32(float %a) #0 {
+; CHECK-LABEL: test_sincos_f32:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r7
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: mov r13, r10
+; CHECK-NEXT: mov r12, r9
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: mov r12, r8
+; CHECK-NEXT: mov r13, r7
+; CHECK-NEXT: mov r9, r12
+; CHECK-NEXT: mov r10, r13
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: mov r12, r14
+; CHECK-NEXT: mov r13, r15
+; CHECK-NEXT: mov r8, r12
+; CHECK-NEXT: mov r7, r13
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: pop r7
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_f32:
+; GNU: ; %bb.0:
+; GNU-NEXT: sub #8, r1
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #4, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 4(r1), r12
+; GNU-NEXT: mov 6(r1), r13
+; GNU-NEXT: mov 0(r1), r14
+; GNU-NEXT: mov 2(r1), r15
+; GNU-NEXT: add #8, r1
+; GNU-NEXT: ret
+ %result = call { float, float } @llvm.sincos.f32(float %a)
+ ret { float, float } %result
+}
+
+define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) #0 {
+; CHECK-LABEL: test_sincos_v2f32:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r6
+; CHECK-NEXT: push r7
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: mov r12, r10
+; CHECK-NEXT: mov 16(r1), r9
+; CHECK-NEXT: mov 18(r1), r8
+; CHECK-NEXT: mov r9, r12
+; CHECK-NEXT: mov r8, r13
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: mov r13, 14(r10)
+; CHECK-NEXT: mov r12, 12(r10)
+; CHECK-NEXT: mov 12(r1), r7
+; CHECK-NEXT: mov 14(r1), r6
+; CHECK-NEXT: mov r7, r12
+; CHECK-NEXT: mov r6, r13
+; CHECK-NEXT: call #cosf
+; CHECK-NEXT: mov r13, 10(r10)
+; CHECK-NEXT: mov r12, 8(r10)
+; CHECK-NEXT: mov r9, r12
+; CHECK-NEXT: mov r8, r13
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: mov r13, 6(r10)
+; CHECK-NEXT: mov r12, 4(r10)
+; CHECK-NEXT: mov r7, r12
+; CHECK-NEXT: mov r6, r13
+; CHECK-NEXT: call #sinf
+; CHECK-NEXT: mov r13, 2(r10)
+; CHECK-NEXT: mov r12, 0(r10)
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: pop r7
+; CHECK-NEXT: pop r6
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_v2f32:
+; GNU: ; %bb.0:
+; GNU-NEXT: push r10
+; GNU-NEXT: sub #16, r1
+; GNU-NEXT: mov r12, r10
+; GNU-NEXT: mov 24(r1), r12
+; GNU-NEXT: mov 26(r1), r13
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #12, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: add #8, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 20(r1), r12
+; GNU-NEXT: mov 22(r1), r13
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #4, r14
+; GNU-NEXT: mov r1, r15
+; GNU-NEXT: call #sincosf
+; GNU-NEXT: mov 10(r1), 14(r10)
+; GNU-NEXT: mov 8(r1), 12(r10)
+; GNU-NEXT: mov 2(r1), 10(r10)
+; GNU-NEXT: mov 0(r1), 8(r10)
+; GNU-NEXT: mov 14(r1), 6(r10)
+; GNU-NEXT: mov 12(r1), 4(r10)
+; GNU-NEXT: mov 6(r1), 2(r10)
+; GNU-NEXT: mov 4(r1), 0(r10)
+; GNU-NEXT: add #16, r1
+; GNU-NEXT: pop r10
+; GNU-NEXT: ret
+ %result = call { <2 x float>, <2 x float> } @llvm.sincos.v2f32(<2 x float> %a)
+ ret { <2 x float>, <2 x float> } %result
+}
+
+define { double, double } @test_sincos_f64(double %a) #0 {
+; CHECK-LABEL: test_sincos_f64:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r6
+; CHECK-NEXT: push r7
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: mov r12, r10
+; CHECK-NEXT: mov 12(r1), r9
+; CHECK-NEXT: mov 14(r1), r8
+; CHECK-NEXT: mov 16(r1), r7
+; CHECK-NEXT: mov 18(r1), r6
+; CHECK-NEXT: mov r9, r12
+; CHECK-NEXT: mov r8, r13
+; CHECK-NEXT: mov r7, r14
+; CHECK-NEXT: mov r6, r15
+; CHECK-NEXT: call #cos
+; CHECK-NEXT: mov r15, 14(r10)
+; CHECK-NEXT: mov r14, 12(r10)
+; CHECK-NEXT: mov r13, 10(r10)
+; CHECK-NEXT: mov r12, 8(r10)
+; CHECK-NEXT: mov r9, r12
+; CHECK-NEXT: mov r8, r13
+; CHECK-NEXT: mov r7, r14
+; CHECK-NEXT: mov r6, r15
+; CHECK-NEXT: call #sin
+; CHECK-NEXT: mov r15, 6(r10)
+; CHECK-NEXT: mov r14, 4(r10)
+; CHECK-NEXT: mov r13, 2(r10)
+; CHECK-NEXT: mov r12, 0(r10)
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: pop r7
+; CHECK-NEXT: pop r6
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_f64:
+; GNU: ; %bb.0:
+; GNU-NEXT: push r10
+; GNU-NEXT: sub #20, r1
+; GNU-NEXT: mov r12, r10
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #4, r12
+; GNU-NEXT: mov r12, 2(r1)
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #12, r12
+; GNU-NEXT: mov r12, 0(r1)
+; GNU-NEXT: mov 24(r1), r12
+; GNU-NEXT: mov 26(r1), r13
+; GNU-NEXT: mov 28(r1), r14
+; GNU-NEXT: mov 30(r1), r15
+; GNU-NEXT: call #sincos
+; GNU-NEXT: mov 10(r1), 14(r10)
+; GNU-NEXT: mov 8(r1), 12(r10)
+; GNU-NEXT: mov 6(r1), 10(r10)
+; GNU-NEXT: mov 4(r1), 8(r10)
+; GNU-NEXT: mov 18(r1), 6(r10)
+; GNU-NEXT: mov 16(r1), 4(r10)
+; GNU-NEXT: mov 14(r1), 2(r10)
+; GNU-NEXT: mov 12(r1), 0(r10)
+; GNU-NEXT: add #20, r1
+; GNU-NEXT: pop r10
+; GNU-NEXT: ret
+ %result = call { double, double } @llvm.sincos.f64(double %a)
+ ret { double, double } %result
+}
+
+define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {
+; CHECK-LABEL: test_sincos_v2f64:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r4
+; CHECK-NEXT: push r5
+; CHECK-NEXT: push r6
+; CHECK-NEXT: push r7
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: mov r12, r10
+; CHECK-NEXT: mov 24(r1), r12
+; CHECK-NEXT: mov 26(r1), r13
+; CHECK-NEXT: mov 28(r1), r7
+; CHECK-NEXT: mov 30(r1), r6
+; CHECK-NEXT: mov r7, r14
+; CHECK-NEXT: mov r6, r15
+; CHECK-NEXT: call #cos
+; CHECK-NEXT: mov r15, 30(r10)
+; CHECK-NEXT: mov r14, 28(r10)
+; CHECK-NEXT: mov r13, 26(r10)
+; CHECK-NEXT: mov r12, 24(r10)
+; CHECK-NEXT: mov 16(r1), r5
+; CHECK-NEXT: mov 18(r1), r4
+; CHECK-NEXT: mov 20(r1), r9
+; CHECK-NEXT: mov 22(r1), r8
+; CHECK-NEXT: mov r5, r12
+; CHECK-NEXT: mov r4, r13
+; CHECK-NEXT: mov r9, r14
+; CHECK-NEXT: mov r8, r15
+; CHECK-NEXT: call #cos
+; CHECK-NEXT: mov r15, 22(r10)
+; CHECK-NEXT: mov r14, 20(r10)
+; CHECK-NEXT: mov r13, 18(r10)
+; CHECK-NEXT: mov r12, 16(r10)
+; CHECK-NEXT: mov 24(r1), r12
+; CHECK-NEXT: mov 26(r1), r13
+; CHECK-NEXT: mov r7, r14
+; CHECK-NEXT: mov r6, r15
+; CHECK-NEXT: call #sin
+; CHECK-NEXT: mov r15, 14(r10)
+; CHECK-NEXT: mov r14, 12(r10)
+; CHECK-NEXT: mov r13, 10(r10)
+; CHECK-NEXT: mov r12, 8(r10)
+; CHECK-NEXT: mov r5, r12
+; CHECK-NEXT: mov r4, r13
+; CHECK-NEXT: mov r9, r14
+; CHECK-NEXT: mov r8, r15
+; CHECK-NEXT: call #sin
+; CHECK-NEXT: mov r15, 6(r10)
+; CHECK-NEXT: mov r14, 4(r10)
+; CHECK-NEXT: mov r13, 2(r10)
+; CHECK-NEXT: mov r12, 0(r10)
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: pop r7
+; CHECK-NEXT: pop r6
+; CHECK-NEXT: pop r5
+; CHECK-NEXT: pop r4
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_v2f64:
+; GNU: ; %bb.0:
+; GNU-NEXT: push r10
+; GNU-NEXT: sub #36, r1
+; GNU-NEXT: mov r12, r10
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #20, r12
+; GNU-NEXT: mov r12, 2(r1)
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #28, r12
+; GNU-NEXT: mov r12, 0(r1)
+; GNU-NEXT: mov 48(r1), r12
+; GNU-NEXT: mov 50(r1), r13
+; GNU-NEXT: mov 52(r1), r14
+; GNU-NEXT: mov 54(r1), r15
+; GNU-NEXT: call #sincos
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #4, r12
+; GNU-NEXT: mov r12, 2(r1)
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #12, r12
+; GNU-NEXT: mov r12, 0(r1)
+; GNU-NEXT: mov 40(r1), r12
+; GNU-NEXT: mov 42(r1), r13
+; GNU-NEXT: mov 44(r1), r14
+; GNU-NEXT: mov 46(r1), r15
+; GNU-NEXT: call #sincos
+; GNU-NEXT: mov 26(r1), 30(r10)
+; GNU-NEXT: mov 24(r1), 28(r10)
+; GNU-NEXT: mov 22(r1), 26(r10)
+; GNU-NEXT: mov 20(r1), 24(r10)
+; GNU-NEXT: mov 10(r1), 22(r10)
+; GNU-NEXT: mov 8(r1), 20(r10)
+; GNU-NEXT: mov 6(r1), 18(r10)
+; GNU-NEXT: mov 4(r1), 16(r10)
+; GNU-NEXT: mov 34(r1), 14(r10)
+; GNU-NEXT: mov 32(r1), 12(r10)
+; GNU-NEXT: mov 30(r1), 10(r10)
+; GNU-NEXT: mov 28(r1), 8(r10)
+; GNU-NEXT: mov 18(r1), 6(r10)
+; GNU-NEXT: mov 16(r1), 4(r10)
+; GNU-NEXT: mov 14(r1), 2(r10)
+; GNU-NEXT: mov 12(r1), 0(r10)
+; GNU-NEXT: add #36, r1
+; GNU-NEXT: pop r10
+; GNU-NEXT: ret
+ %result = call { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %a)
+ ret { <2 x double>, <2 x double> } %result
+}
+
+define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {
+; CHECK-LABEL: test_sincos_f128:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: push r4
+; CHECK-NEXT: push r5
+; CHECK-NEXT: push r6
+; CHECK-NEXT: push r7
+; CHECK-NEXT: push r8
+; CHECK-NEXT: push r9
+; CHECK-NEXT: push r10
+; CHECK-NEXT: sub #48, r1
+; CHECK-NEXT: mov r12, r10
+; CHECK-NEXT: mov 78(r1), r12
+; CHECK-NEXT: mov r12, 14(r1)
+; CHECK-NEXT: mov 76(r1), r12
+; CHECK-NEXT: mov r12, 12(r1)
+; CHECK-NEXT: mov 74(r1), r7
+; CHECK-NEXT: mov r7, 10(r1)
+; CHECK-NEXT: mov 72(r1), r6
+; CHECK-NEXT: mov r6, 8(r1)
+; CHECK-NEXT: mov 70(r1), r5
+; CHECK-NEXT: mov r5, 6(r1)
+; CHECK-NEXT: mov 68(r1), r4
+; CHECK-NEXT: mov r4, 4(r1)
+; CHECK-NEXT: mov 66(r1), r9
+; CHECK-NEXT: mov r9, 2(r1)
+; CHECK-NEXT: mov 64(r1), r8
+; CHECK-NEXT: mov r8, 0(r1)
+; CHECK-NEXT: mov r1, r12
+; CHECK-NEXT: add #16, r12
+; CHECK-NEXT: call #cosl
+; CHECK-NEXT: mov 78(r1), r12
+; CHECK-NEXT: mov r12, 14(r1)
+; CHECK-NEXT: mov 76(r1), r12
+; CHECK-NEXT: mov r12, 12(r1)
+; CHECK-NEXT: mov r7, 10(r1)
+; CHECK-NEXT: mov r6, 8(r1)
+; CHECK-NEXT: mov r5, 6(r1)
+; CHECK-NEXT: mov r4, 4(r1)
+; CHECK-NEXT: mov r9, 2(r1)
+; CHECK-NEXT: mov r8, 0(r1)
+; CHECK-NEXT: mov r1, r12
+; CHECK-NEXT: add #32, r12
+; CHECK-NEXT: call #sinl
+; CHECK-NEXT: mov 30(r1), 30(r10)
+; CHECK-NEXT: mov 28(r1), 28(r10)
+; CHECK-NEXT: mov 26(r1), 26(r10)
+; CHECK-NEXT: mov 24(r1), 24(r10)
+; CHECK-NEXT: mov 22(r1), 22(r10)
+; CHECK-NEXT: mov 20(r1), 20(r10)
+; CHECK-NEXT: mov 18(r1), 18(r10)
+; CHECK-NEXT: mov 16(r1), 16(r10)
+; CHECK-NEXT: mov 46(r1), 14(r10)
+; CHECK-NEXT: mov 44(r1), 12(r10)
+; CHECK-NEXT: mov 42(r1), 10(r10)
+; CHECK-NEXT: mov 40(r1), 8(r10)
+; CHECK-NEXT: mov 38(r1), 6(r10)
+; CHECK-NEXT: mov 36(r1), 4(r10)
+; CHECK-NEXT: mov 34(r1), 2(r10)
+; CHECK-NEXT: mov 32(r1), 0(r10)
+; CHECK-NEXT: add #48, r1
+; CHECK-NEXT: pop r10
+; CHECK-NEXT: pop r9
+; CHECK-NEXT: pop r8
+; CHECK-NEXT: pop r7
+; CHECK-NEXT: pop r6
+; CHECK-NEXT: pop r5
+; CHECK-NEXT: pop r4
+; CHECK-NEXT: ret
+;
+; GNU-LABEL: test_sincos_f128:
+; GNU: ; %bb.0:
+; GNU-NEXT: push r10
+; GNU-NEXT: sub #64, r1
+; GNU-NEXT: mov r12, r10
+; GNU-NEXT: mov 82(r1), 14(r1)
+; GNU-NEXT: mov 80(r1), 12(r1)
+; GNU-NEXT: mov 78(r1), 10(r1)
+; GNU-NEXT: mov 76(r1), 8(r1)
+; GNU-NEXT: mov 74(r1), 6(r1)
+; GNU-NEXT: mov 72(r1), 4(r1)
+; GNU-NEXT: mov 70(r1), 2(r1)
+; GNU-NEXT: mov 68(r1), 0(r1)
+; GNU-NEXT: mov r1, r12
+; GNU-NEXT: add #16, r12
+; GNU-NEXT: mov r1, r13
+; GNU-NEXT: add #48, r13
+; GNU-NEXT: mov r1, r14
+; GNU-NEXT: add #32, r14
+; GNU-NEXT: call #sincosl
+; GNU-NEXT: mov 46(r1), 30(r10)
+; GNU-NEXT: mov 44(r1), 28(r10)
+; GNU-NEXT: mov 42(r1), 26(r10)
+; GNU-NEXT: mov 40(r1), 24(r10)
+; GNU-NEXT: mov 38(r1), 22(r10)
+; GNU-NEXT: mov 36(r1), 20(r10)
+; GNU-NEXT: mov 34(r1), 18(r10)
+; GNU-NEXT: mov 32(r1), 16(r10)
+; GNU-NEXT: mov 62(r1), 14(r10)
+; GNU-NEXT: mov 60(r1), 12(r10)
+; GNU-NEXT: mov 58(r1), 10(r10)
+; GNU-NEXT: mov 56(r1), 8(r10)
+; GNU-NEXT: mov 54(r1), 6(r10)
+; GNU-NEXT: mov 52(r1), 4(r10)
+; GNU-NEXT: mov 50(r1), 2(r10)
+; GNU-NEXT: mov 48(r1), 0(r10)
+; GNU-NEXT: add #64, r1
+; GNU-NEXT: pop r10
+; GNU-NEXT: ret
+ %result = call { fp128, fp128 } @llvm.sincos.f16(fp128 %a)
+ ret { fp128, fp128 } %result
+}
+
+attributes #0 = { nounwind }
+
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 | ||
; RUN: llc -mtriple=msp430-unknown-unknown < %s | FileCheck %s | ||
; RUN: llc -mtriple=msp430-unknown-linux < %s | FileCheck %s | ||
; RUN: llc -mtriple=msp430-unknown-linux-gnu < %s | FileCheck -check-prefix=GNU %s |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not quite sure how these triples are relevant. There is certainly no Linux on 16-bit controller :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm reverse engineering the current mess of an opt-out of libcall system. These currently have a environment driven behavior so these do have different results
Mostly to test libcall behavior