diff --git a/lib/CodeGen/IntrinsicLowering.cpp b/lib/CodeGen/IntrinsicLowering.cpp index 9df8f3c89e7..4ec3bae6f67 100644 --- a/lib/CodeGen/IntrinsicLowering.cpp +++ b/lib/CodeGen/IntrinsicLowering.cpp @@ -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()) diff --git a/test/ExecutionEngine/Interpreter/intrinsics.ll b/test/ExecutionEngine/Interpreter/intrinsics.ll new file mode 100644 index 00000000000..a6a4a99fa2d --- /dev/null +++ b/test/ExecutionEngine/Interpreter/intrinsics.ll @@ -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 +} diff --git a/test/ExecutionEngine/Interpreter/lit.local.cfg b/test/ExecutionEngine/Interpreter/lit.local.cfg new file mode 100644 index 00000000000..8cbaf03217d --- /dev/null +++ b/test/ExecutionEngine/Interpreter/lit.local.cfg @@ -0,0 +1,3 @@ +# These tests require foreign function calls +if config.enable_ffi != "ON": + config.unsupported = True diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in index 4c0bb2e47d3..8a9582a597a 100644 --- a/test/lit.site.cfg.in +++ b/test/lit.site.cfg.in @@ -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.