mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Add missing Interpreter intrinsic lowering for sin, cos and ceil
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215209 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a9ee302530
commit
b79931d94e
@ -528,6 +528,18 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
|
|||||||
ReplaceFPIntrinsicWithCall(CI, "powf", "pow", "powl");
|
ReplaceFPIntrinsicWithCall(CI, "powf", "pow", "powl");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case Intrinsic::sin: {
|
||||||
|
ReplaceFPIntrinsicWithCall(CI, "sinf", "sin", "sinl");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Intrinsic::cos: {
|
||||||
|
ReplaceFPIntrinsicWithCall(CI, "cosf", "cos", "cosl");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Intrinsic::ceil: {
|
||||||
|
ReplaceFPIntrinsicWithCall(CI, "ceilf", "ceil", "ceill");
|
||||||
|
break;
|
||||||
|
}
|
||||||
case Intrinsic::flt_rounds:
|
case Intrinsic::flt_rounds:
|
||||||
// Lower to "round to the nearest"
|
// Lower to "round to the nearest"
|
||||||
if (!CI->getType()->isVoidTy())
|
if (!CI->getType()->isVoidTy())
|
||||||
|
19
test/ExecutionEngine/Interpreter/intrinsics.ll
Normal file
19
test/ExecutionEngine/Interpreter/intrinsics.ll
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
; RUN: lli -O0 -force-interpreter < %s
|
||||||
|
|
||||||
|
; libffi does not support fp128 so we don’t test it
|
||||||
|
declare float @llvm.sin.f32(float)
|
||||||
|
declare double @llvm.sin.f64(double)
|
||||||
|
declare float @llvm.cos.f32(float)
|
||||||
|
declare double @llvm.cos.f64(double)
|
||||||
|
declare float @llvm.ceil.f32(float)
|
||||||
|
declare double @llvm.ceil.f64(double)
|
||||||
|
|
||||||
|
define i32 @main() {
|
||||||
|
%sin32 = call float @llvm.sin.f32(float 0.000000e+00)
|
||||||
|
%sin64 = call double @llvm.sin.f64(double 0.000000e+00)
|
||||||
|
%cos32 = call float @llvm.cos.f32(float 0.000000e+00)
|
||||||
|
%cos64 = call double @llvm.cos.f64(double 0.000000e+00)
|
||||||
|
%ceil32 = call float @llvm.ceil.f32(float 0.000000e+00)
|
||||||
|
%ceil64 = call double @llvm.ceil.f64(double 0.000000e+00)
|
||||||
|
ret i32 0
|
||||||
|
}
|
3
test/ExecutionEngine/Interpreter/lit.local.cfg
Normal file
3
test/ExecutionEngine/Interpreter/lit.local.cfg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# These tests require foreign function calls
|
||||||
|
if config.enable_ffi != "ON":
|
||||||
|
config.unsupported = True
|
@ -22,6 +22,7 @@ config.host_arch = "@HOST_ARCH@"
|
|||||||
config.llvm_use_intel_jitevents = "@LLVM_USE_INTEL_JITEVENTS@"
|
config.llvm_use_intel_jitevents = "@LLVM_USE_INTEL_JITEVENTS@"
|
||||||
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
|
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
|
||||||
config.have_zlib = "@HAVE_LIBZ@"
|
config.have_zlib = "@HAVE_LIBZ@"
|
||||||
|
config.enable_ffi = "@LLVM_ENABLE_FFI@"
|
||||||
|
|
||||||
# Support substitution of the tools_dir with user parameters. This is
|
# Support substitution of the tools_dir with user parameters. This is
|
||||||
# used when we can't determine the tool dir at configuration time.
|
# used when we can't determine the tool dir at configuration time.
|
||||||
|
Loading…
Reference in New Issue
Block a user