blob: d3388fabc83974a756dfa7d73a6deb6b91056a3f [file]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64
; RUN: not llc -mtriple=mipsel -filetype=null < %s 2>&1 | FileCheck %s -check-prefix=ERR
; RUN: not llc -mtriple=mips -filetype=null < %s 2>&1 | FileCheck %s -check-prefix=ERR
; fp128 sincos lowers to the sincosl long double libcall only where long double
; is IEEE quad (mips64/n64). On 32-bit MIPS long double is IEEE double, so
; sincosl is the wrong type and no libcall is available; it must diagnose rather
; than emit a wrongly-typed call.
; ERR: error: do not know how to soften fsincos
define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {
; SOFT-FLOAT-64-LABEL: test_sincos_f128:
; SOFT-FLOAT-64: # %bb.0:
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -48
; SOFT-FLOAT-64-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 16
; SOFT-FLOAT-64-NEXT: jal sincosl
; SOFT-FLOAT-64-NEXT: daddiu $7, $sp, 0
; SOFT-FLOAT-64-NEXT: ldc1 $f0, 16($sp)
; SOFT-FLOAT-64-NEXT: ldc1 $f2, 24($sp)
; SOFT-FLOAT-64-NEXT: ld $2, 0($sp)
; SOFT-FLOAT-64-NEXT: ld $3, 8($sp)
; SOFT-FLOAT-64-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT: jr $ra
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 48
%result = call { fp128, fp128 } @llvm.sincos.f128(fp128 %a)
ret { fp128, fp128 } %result
}
define { <2 x fp128>, <2 x fp128> } @test_sincos_v2f128(<2 x fp128> %a) #0 {
; SOFT-FLOAT-64-LABEL: test_sincos_v2f128:
; SOFT-FLOAT-64: # %bb.0:
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -96
; SOFT-FLOAT-64-NEXT: sd $ra, 88($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT: sd $18, 80($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT: sd $17, 72($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT: sd $16, 64($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT: move $16, $6
; SOFT-FLOAT-64-NEXT: move $17, $5
; SOFT-FLOAT-64-NEXT: move $18, $4
; SOFT-FLOAT-64-NEXT: dmtc1 $7, $f12
; SOFT-FLOAT-64-NEXT: dmtc1 $8, $f13
; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 48
; SOFT-FLOAT-64-NEXT: jal sincosl
; SOFT-FLOAT-64-NEXT: daddiu $7, $sp, 32
; SOFT-FLOAT-64-NEXT: dmtc1 $17, $f12
; SOFT-FLOAT-64-NEXT: dmtc1 $16, $f13
; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 16
; SOFT-FLOAT-64-NEXT: jal sincosl
; SOFT-FLOAT-64-NEXT: daddiu $7, $sp, 0
; SOFT-FLOAT-64-NEXT: ld $1, 56($sp)
; SOFT-FLOAT-64-NEXT: ld $2, 0($sp)
; SOFT-FLOAT-64-NEXT: ld $3, 8($sp)
; SOFT-FLOAT-64-NEXT: ld $4, 32($sp)
; SOFT-FLOAT-64-NEXT: ld $5, 40($sp)
; SOFT-FLOAT-64-NEXT: sd $5, 56($18)
; SOFT-FLOAT-64-NEXT: sd $4, 48($18)
; SOFT-FLOAT-64-NEXT: sd $3, 40($18)
; SOFT-FLOAT-64-NEXT: sd $2, 32($18)
; SOFT-FLOAT-64-NEXT: sd $1, 24($18)
; SOFT-FLOAT-64-NEXT: ld $1, 48($sp)
; SOFT-FLOAT-64-NEXT: sd $1, 16($18)
; SOFT-FLOAT-64-NEXT: ld $1, 24($sp)
; SOFT-FLOAT-64-NEXT: sd $1, 8($18)
; SOFT-FLOAT-64-NEXT: ld $1, 16($sp)
; SOFT-FLOAT-64-NEXT: sd $1, 0($18)
; SOFT-FLOAT-64-NEXT: ld $16, 64($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT: ld $17, 72($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT: ld $18, 80($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT: ld $ra, 88($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT: jr $ra
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 96
%result = call { <2 x fp128>, <2 x fp128> } @llvm.sincos.v2f128(<2 x fp128> %a)
ret { <2 x fp128>, <2 x fp128> } %result
}
attributes #0 = { nounwind }