summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorJosh Klontz <josh.klontz@gmail.com>2014-08-08 15:00:12 +0000
committerJosh Klontz <josh.klontz@gmail.com>2014-08-08 15:00:12 +0000
commitac0d28dfe6d678a6facc0ecab79d918280a1a9bc (patch)
tree166d9f1ea829d18dff642bec574240ecb640bb3a /llvm
parent9b07147fc90a72dba580a13e3cd4495a8e939389 (diff)
downloadbcm5719-llvm-ac0d28dfe6d678a6facc0ecab79d918280a1a9bc.tar.gz
bcm5719-llvm-ac0d28dfe6d678a6facc0ecab79d918280a1a9bc.zip
Add missing Interpreter intrinsic lowering for sin, cos and ceil
llvm-svn: 215209
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/CodeGen/IntrinsicLowering.cpp12
-rw-r--r--llvm/test/ExecutionEngine/Interpreter/intrinsics.ll19
-rw-r--r--llvm/test/ExecutionEngine/Interpreter/lit.local.cfg3
-rw-r--r--llvm/test/lit.site.cfg.in1
4 files changed, 35 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/IntrinsicLowering.cpp b/llvm/lib/CodeGen/IntrinsicLowering.cpp
index 9df8f3c89e7..4ec3bae6f67 100644
--- a/llvm/lib/CodeGen/IntrinsicLowering.cpp
+++ b/llvm/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/llvm/test/ExecutionEngine/Interpreter/intrinsics.ll b/llvm/test/ExecutionEngine/Interpreter/intrinsics.ll
new file mode 100644
index 00000000000..a6a4a99fa2d
--- /dev/null
+++ b/llvm/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/llvm/test/ExecutionEngine/Interpreter/lit.local.cfg b/llvm/test/ExecutionEngine/Interpreter/lit.local.cfg
new file mode 100644
index 00000000000..8cbaf03217d
--- /dev/null
+++ b/llvm/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/llvm/test/lit.site.cfg.in b/llvm/test/lit.site.cfg.in
index 4c0bb2e47d3..8a9582a597a 100644
--- a/llvm/test/lit.site.cfg.in
+++ b/llvm/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.
OpenPOWER on IntegriCloud