Skip to content

MSP430: Add test for llvm.exp10 intrinsic #148605

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

Merged
merged 1 commit into from
Jul 25, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
198 changes: 198 additions & 0 deletions llvm/test/CodeGen/MSP430/llvm.exp10.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; 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 %s

define half @exp10_f16(half %x) #0 {
; CHECK-LABEL: exp10_f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: call #__extendhfsf2
; CHECK-NEXT: call #exp10f
; CHECK-NEXT: call #__truncsfhf2
; CHECK-NEXT: ret
%r = call half @llvm.exp10.f16(half %x)
ret half %r
}

define <2 x half> @exp10_v2f16(<2 x half> %x) #0 {
; CHECK-LABEL: exp10_v2f16:
; CHECK: ; %bb.0:
; CHECK-NEXT: push r9
; CHECK-NEXT: push r10
; CHECK-NEXT: mov r13, r10
; CHECK-NEXT: call #__extendhfsf2
; CHECK-NEXT: call #exp10f
; CHECK-NEXT: call #__truncsfhf2
; CHECK-NEXT: mov r12, r9
; CHECK-NEXT: mov r10, r12
; CHECK-NEXT: call #__extendhfsf2
; CHECK-NEXT: call #exp10f
; CHECK-NEXT: call #__truncsfhf2
; CHECK-NEXT: mov r12, r13
; CHECK-NEXT: mov r9, r12
; CHECK-NEXT: pop r10
; CHECK-NEXT: pop r9
; CHECK-NEXT: ret
%r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)
ret <2 x half> %r
}

define float @exp10_f32(float %x) #0 {
; CHECK-LABEL: exp10_f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: call #exp10f
; CHECK-NEXT: ret
%r = call float @llvm.exp10.f32(float %x)
ret float %r
}

define <2 x float> @exp10_v2f32(<2 x float> %x) #0 {
; CHECK-LABEL: exp10_v2f32:
; CHECK: ; %bb.0:
; CHECK-NEXT: push r7
; CHECK-NEXT: push r8
; CHECK-NEXT: push r9
; CHECK-NEXT: push r10
; CHECK-NEXT: mov r15, r10
; CHECK-NEXT: mov r14, r9
; CHECK-NEXT: call #exp10f
; CHECK-NEXT: mov r12, r8
; CHECK-NEXT: mov r13, r7
; CHECK-NEXT: mov r9, r12
; CHECK-NEXT: mov r10, r13
; CHECK-NEXT: call #exp10f
; 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
%r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)
ret <2 x float> %r
}

define double @exp10_f64(double %x) #0 {
; CHECK-LABEL: exp10_f64:
; CHECK: ; %bb.0:
; CHECK-NEXT: call #exp10
; CHECK-NEXT: ret
%r = call double @llvm.exp10.f64(double %x)
ret double %r
}

define <2 x double> @exp10_v2f64(<2 x double> %x) #0 {
; CHECK-LABEL: exp10_v2f64:
; CHECK: ; %bb.0:
; CHECK-NEXT: push r10
; CHECK-NEXT: mov r12, r10
; CHECK-NEXT: mov 12(r1), r12
; CHECK-NEXT: mov 14(r1), r13
; CHECK-NEXT: mov 16(r1), r14
; CHECK-NEXT: mov 18(r1), r15
; CHECK-NEXT: call #exp10
; 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 4(r1), r12
; CHECK-NEXT: mov 6(r1), r13
; CHECK-NEXT: mov 8(r1), r14
; CHECK-NEXT: mov 10(r1), r15
; CHECK-NEXT: call #exp10
; 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: ret
%r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)
ret <2 x double> %r
}

define fp128 @exp10_f128(fp128 %x) #0 {
; CHECK-LABEL: exp10_f128:
; CHECK: ; %bb.0:
; CHECK-NEXT: push r10
; CHECK-NEXT: sub #32, r1
; CHECK-NEXT: mov r12, r10
; CHECK-NEXT: mov 50(r1), 14(r1)
; CHECK-NEXT: mov 48(r1), 12(r1)
; CHECK-NEXT: mov 46(r1), 10(r1)
; CHECK-NEXT: mov 44(r1), 8(r1)
; CHECK-NEXT: mov 42(r1), 6(r1)
; CHECK-NEXT: mov 40(r1), 4(r1)
; CHECK-NEXT: mov 38(r1), 2(r1)
; CHECK-NEXT: mov 36(r1), 0(r1)
; CHECK-NEXT: mov r1, r12
; CHECK-NEXT: add #16, r12
; CHECK-NEXT: call #exp10l
; CHECK-NEXT: mov 30(r1), 14(r10)
; CHECK-NEXT: mov 28(r1), 12(r10)
; CHECK-NEXT: mov 26(r1), 10(r10)
; CHECK-NEXT: mov 24(r1), 8(r10)
; CHECK-NEXT: mov 22(r1), 6(r10)
; CHECK-NEXT: mov 20(r1), 4(r10)
; CHECK-NEXT: mov 18(r1), 2(r10)
; CHECK-NEXT: mov 16(r1), 0(r10)
; CHECK-NEXT: add #32, r1
; CHECK-NEXT: pop r10
; CHECK-NEXT: ret
%r = call fp128 @llvm.exp10.f128(fp128 %x)
ret fp128 %r
}

define <2 x fp128> @exp10_v2f128(<2 x fp128> %x) #0 {
; CHECK-LABEL: exp10_v2f128:
; CHECK: ; %bb.0:
; CHECK-NEXT: push r10
; CHECK-NEXT: sub #48, r1
; CHECK-NEXT: mov r12, r10
; CHECK-NEXT: mov 82(r1), 14(r1)
; CHECK-NEXT: mov 80(r1), 12(r1)
; CHECK-NEXT: mov 78(r1), 10(r1)
; CHECK-NEXT: mov 76(r1), 8(r1)
; CHECK-NEXT: mov 74(r1), 6(r1)
; CHECK-NEXT: mov 72(r1), 4(r1)
; CHECK-NEXT: mov 70(r1), 2(r1)
; CHECK-NEXT: mov 68(r1), 0(r1)
; CHECK-NEXT: mov r1, r12
; CHECK-NEXT: add #32, r12
; CHECK-NEXT: call #exp10l
; CHECK-NEXT: mov 66(r1), 14(r1)
; CHECK-NEXT: mov 64(r1), 12(r1)
; CHECK-NEXT: mov 62(r1), 10(r1)
; CHECK-NEXT: mov 60(r1), 8(r1)
; CHECK-NEXT: mov 58(r1), 6(r1)
; CHECK-NEXT: mov 56(r1), 4(r1)
; CHECK-NEXT: mov 54(r1), 2(r1)
; CHECK-NEXT: mov 52(r1), 0(r1)
; CHECK-NEXT: mov r1, r12
; CHECK-NEXT: add #16, r12
; CHECK-NEXT: call #exp10l
; CHECK-NEXT: mov 46(r1), 30(r10)
; CHECK-NEXT: mov 44(r1), 28(r10)
; CHECK-NEXT: mov 42(r1), 26(r10)
; CHECK-NEXT: mov 40(r1), 24(r10)
; CHECK-NEXT: mov 38(r1), 22(r10)
; CHECK-NEXT: mov 36(r1), 20(r10)
; CHECK-NEXT: mov 34(r1), 18(r10)
; CHECK-NEXT: mov 32(r1), 16(r10)
; CHECK-NEXT: mov 30(r1), 14(r10)
; CHECK-NEXT: mov 28(r1), 12(r10)
; CHECK-NEXT: mov 26(r1), 10(r10)
; CHECK-NEXT: mov 24(r1), 8(r10)
; CHECK-NEXT: mov 22(r1), 6(r10)
; CHECK-NEXT: mov 20(r1), 4(r10)
; CHECK-NEXT: mov 18(r1), 2(r10)
; CHECK-NEXT: mov 16(r1), 0(r10)
; CHECK-NEXT: add #48, r1
; CHECK-NEXT: pop r10
; CHECK-NEXT: ret
%r = call <2 x fp128> @llvm.exp10.v2f128(<2 x fp128> %x)
ret <2 x fp128> %r
}

attributes #0 = { nounwind }