mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
AArch64: expand sincos operations, we don't support them.
Patch based on Mans Rullgard's. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d787c047bc
commit
69fe178f77
@ -200,6 +200,8 @@ AArch64TargetLowering::AArch64TargetLowering(AArch64TargetMachine &TM)
|
||||
setOperationAction(ISD::FSIN, MVT::f32, Expand);
|
||||
setOperationAction(ISD::FSIN, MVT::f64, Expand);
|
||||
|
||||
setOperationAction(ISD::FSINCOS, MVT::f32, Expand);
|
||||
setOperationAction(ISD::FSINCOS, MVT::f64, Expand);
|
||||
|
||||
// Virtually no operation on f128 is legal, but LLVM can't expand them when
|
||||
// there's a valid register class, so we need custom operations in most cases.
|
||||
@ -217,6 +219,7 @@ AArch64TargetLowering::AArch64TargetLowering(AArch64TargetMachine &TM)
|
||||
setOperationAction(ISD::FREM, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FRINT, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FSIN, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FSINCOS, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FSQRT, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FSUB, MVT::f128, Custom);
|
||||
setOperationAction(ISD::FTRUNC, MVT::f128, Expand);
|
||||
|
35
test/CodeGen/AArch64/sincos-expansion.ll
Normal file
35
test/CodeGen/AArch64/sincos-expansion.ll
Normal file
@ -0,0 +1,35 @@
|
||||
; RUN: llc -march=aarch64 -verify-machineinstrs < %s | FileCheck %s
|
||||
|
||||
define float @test_sincos_f32(float %f) {
|
||||
%sin = call float @sinf(float %f) readnone
|
||||
%cos = call float @cosf(float %f) readnone
|
||||
; CHECK: bl cosf
|
||||
; CHECK: bl sinf
|
||||
%val = fadd float %sin, %cos
|
||||
ret float %val
|
||||
}
|
||||
|
||||
define double @test_sincos_f64(double %f) {
|
||||
%sin = call double @sin(double %f) readnone
|
||||
%cos = call double @cos(double %f) readnone
|
||||
%val = fadd double %sin, %cos
|
||||
; CHECK: bl cos
|
||||
; CHECK: bl sin
|
||||
ret double %val
|
||||
}
|
||||
|
||||
define fp128 @test_sincos_f128(fp128 %f) {
|
||||
%sin = call fp128 @sinl(fp128 %f) readnone
|
||||
%cos = call fp128 @cosl(fp128 %f) readnone
|
||||
%val = fadd fp128 %sin, %cos
|
||||
; CHECK: bl cosl
|
||||
; CHECK: bl sinl
|
||||
ret fp128 %val
|
||||
}
|
||||
|
||||
declare float @sinf(float) readonly
|
||||
declare double @sin(double) readonly
|
||||
declare fp128 @sinl(fp128) readonly
|
||||
declare float @cosf(float) readonly
|
||||
declare double @cos(double) readonly
|
||||
declare fp128 @cosl(fp128) readonly
|
Loading…
Reference in New Issue
Block a user