Add missing Interpreter intrinsic lowering for sin, cos and ceil

llvm-svn: 215209
This commit is contained in:
Josh Klontz 2014-08-08 15:00:12 +00:00
parent 4a8465ca5b
commit 6f066a7766
4 changed files with 35 additions and 0 deletions

View File

@ -528,6 +528,18 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
ReplaceFPIntrinsicWithCall(CI, "powf", "pow", "powl");
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:
// Lower to "round to the nearest"
if (!CI->getType()->isVoidTy())

View File

@ -0,0 +1,19 @@
; RUN: lli -O0 -force-interpreter < %s
; libffi does not support fp128 so we dont 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
}

View File

@ -0,0 +1,3 @@
# These tests require foreign function calls
if config.enable_ffi != "ON":
config.unsupported = True

View File

@ -22,6 +22,7 @@ config.host_arch = "@HOST_ARCH@"
config.llvm_use_intel_jitevents = "@LLVM_USE_INTEL_JITEVENTS@"
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
config.have_zlib = "@HAVE_LIBZ@"
config.enable_ffi = "@LLVM_ENABLE_FFI@"
# Support substitution of the tools_dir with user parameters. This is
# used when we can't determine the tool dir at configuration time.