mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-31 10:34:17 +00:00
Allow constfolding of llvm.sin.* and llvm.cos.* intrinsics
This patch const folds llvm.sin.* and llvm.cos.* intrinsics whenever feasible. Differential Revision: http://reviews.llvm.org/D10836 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241665 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
78cca47fc6
commit
d9dffa6b3c
@ -1234,6 +1234,8 @@ bool llvm::canConstantFoldCallTo(const Function *F) {
|
||||
case Intrinsic::floor:
|
||||
case Intrinsic::ceil:
|
||||
case Intrinsic::sqrt:
|
||||
case Intrinsic::sin:
|
||||
case Intrinsic::cos:
|
||||
case Intrinsic::pow:
|
||||
case Intrinsic::powi:
|
||||
case Intrinsic::bswap:
|
||||
@ -1450,6 +1452,10 @@ static Constant *ConstantFoldScalarCall(StringRef Name, unsigned IntrinsicID,
|
||||
return ConstantFoldFP(floor, V, Ty);
|
||||
case Intrinsic::ceil:
|
||||
return ConstantFoldFP(ceil, V, Ty);
|
||||
case Intrinsic::sin:
|
||||
return ConstantFoldFP(sin, V, Ty);
|
||||
case Intrinsic::cos:
|
||||
return ConstantFoldFP(cos, V, Ty);
|
||||
}
|
||||
|
||||
if (!TLI)
|
||||
|
@ -17,6 +17,8 @@ declare i32 @llvm.cttz.i32(i32, i1) nounwind readnone
|
||||
declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone
|
||||
declare i32 @llvm.ctpop.i32(i32) nounwind readnone
|
||||
declare i8 @llvm.ctlz.i8(i8, i1) nounwind readnone
|
||||
declare double @llvm.cos.f64(double %Val) nounwind readonly
|
||||
declare double @llvm.sin.f64(double %Val) nounwind readonly
|
||||
|
||||
define i8 @uaddtest1(i8 %A, i8 %B) {
|
||||
%x = call %overflow.result @llvm.uadd.with.overflow.i8(i8 %A, i8 %B)
|
||||
@ -425,3 +427,23 @@ define %ov.result.32 @never_overflows_ssub_test0(i32 %a) {
|
||||
; CHECK-NEXT: %[[x:.*]] = insertvalue %ov.result.32 { i32 undef, i1 false }, i32 %a, 0
|
||||
; CHECK-NEXT: ret %ov.result.32 %[[x]]
|
||||
}
|
||||
|
||||
define void @cos(double *%P) {
|
||||
entry:
|
||||
%B = tail call double @llvm.cos.f64(double 0.0) nounwind
|
||||
store volatile double %B, double* %P
|
||||
|
||||
ret void
|
||||
; CHECK-LABEL: @cos(
|
||||
; CHECK: store volatile double 1.000000e+00, double* %P
|
||||
}
|
||||
|
||||
define void @sin(double *%P) {
|
||||
entry:
|
||||
%B = tail call double @llvm.sin.f64(double 0.0) nounwind
|
||||
store volatile double %B, double* %P
|
||||
|
||||
ret void
|
||||
; CHECK-LABEL: @sin(
|
||||
; CHECK: store volatile double 0.000000e+00, double* %P
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user