diff options
| author | Josh Klontz <josh.klontz@gmail.com> | 2014-08-08 15:00:12 +0000 |
|---|---|---|
| committer | Josh Klontz <josh.klontz@gmail.com> | 2014-08-08 15:00:12 +0000 |
| commit | ac0d28dfe6d678a6facc0ecab79d918280a1a9bc (patch) | |
| tree | 166d9f1ea829d18dff642bec574240ecb640bb3a /llvm | |
| parent | 9b07147fc90a72dba580a13e3cd4495a8e939389 (diff) | |
| download | bcm5719-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.cpp | 12 | ||||
| -rw-r--r-- | llvm/test/ExecutionEngine/Interpreter/intrinsics.ll | 19 | ||||
| -rw-r--r-- | llvm/test/ExecutionEngine/Interpreter/lit.local.cfg | 3 | ||||
| -rw-r--r-- | llvm/test/lit.site.cfg.in | 1 |
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. |

