From 1be9e6f055fbcd6bfcf0a1f9e9ef0e86abe54f02 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Sat, 30 May 2015 09:50:12 -0400 Subject: Remove useless `const` --- src/rustllvm/RustWrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rustllvm/RustWrapper.cpp') diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 66db7326d21..b1e2d2f9fc8 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -233,7 +233,7 @@ DIT unwrapDI(LLVMMetadataRef ref) { return DIT(ref ? unwrap(ref) : NULL); } -extern "C" const uint32_t LLVMRustDebugMetadataVersion() { +extern "C" uint32_t LLVMRustDebugMetadataVersion() { return DEBUG_METADATA_VERSION; } -- cgit 1.4.1-3-g733a5 From ce32f6412e1937c0844aa48e5b4e876b96dcd66d Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Sat, 24 Jan 2015 12:00:35 +0100 Subject: rustc_trans: don't hardcode llvm version for conditional intrinsics This commit introduce a third parameter for compatible_ifn!, as new intrinsics are being added in recent LLVM releases and there is no need to hardcode a specific case. Signed-off-by: Luca Bruno --- src/librustc_llvm/lib.rs | 2 ++ src/librustc_trans/trans/context.rs | 27 +++++++++++++++++---------- src/rustllvm/RustWrapper.cpp | 8 ++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) (limited to 'src/rustllvm/RustWrapper.cpp') diff --git a/src/librustc_llvm/lib.rs b/src/librustc_llvm/lib.rs index a3b9a0e8467..379a7da459f 100644 --- a/src/librustc_llvm/lib.rs +++ b/src/librustc_llvm/lib.rs @@ -1772,6 +1772,8 @@ extern { -> ValueRef; pub fn LLVMRustDebugMetadataVersion() -> u32; + pub fn LLVMVersionMajor() -> u32; + pub fn LLVMVersionMinor() -> u32; pub fn LLVMRustAddModuleFlag(M: ModuleRef, name: *const c_char, diff --git a/src/librustc_trans/trans/context.rs b/src/librustc_trans/trans/context.rs index 51db0adf5b7..f2de949ccd5 100644 --- a/src/librustc_trans/trans/context.rs +++ b/src/librustc_trans/trans/context.rs @@ -870,6 +870,11 @@ fn declare_intrinsic(ccx: &CrateContext, key: & &'static str) -> Option t_f32); ifn!("llvm.trunc.f64", fn(t_f64) -> t_f64); + ifn!("llvm.copysign.f32", fn(t_f32, t_f32) -> t_f32); + ifn!("llvm.copysign.f64", fn(t_f64, t_f64) -> t_f64); + ifn!("llvm.round.f32", fn(t_f32) -> t_f32); + ifn!("llvm.round.f64", fn(t_f64) -> t_f64); + ifn!("llvm.rint.f32", fn(t_f32) -> t_f32); ifn!("llvm.rint.f64", fn(t_f64) -> t_f64); ifn!("llvm.nearbyint.f32", fn(t_f32) -> t_f32); @@ -931,20 +936,22 @@ fn declare_intrinsic(ccx: &CrateContext, key: & &'static str) -> Option void); // Some intrinsics were introduced in later versions of LLVM, but they have - // fallbacks in libc or libm and such. Currently, all of these intrinsics - // were introduced in LLVM 3.4, so we case on that. + // fallbacks in libc or libm and such. macro_rules! compatible_ifn { - ($name:expr, $cname:ident ($($arg:expr),*) -> $ret:expr) => ( - ifn!($name, fn($($arg),*) -> $ret); + ($name:expr, $cname:ident ($($arg:expr),*) -> $ret:expr, $llvm_version:expr) => ( + if unsafe { llvm::LLVMVersionMinor() >= $llvm_version } { + // The `if key == $name` is already in ifn! + ifn!($name, fn($($arg),*) -> $ret); + } else if *key == $name { + let f = declare::declare_cfn(ccx, stringify!($cname), + Type::func(&[$($arg),*], &$ret), + ty::mk_nil(ccx.tcx())); + ccx.intrinsics().borrow_mut().insert($name, f.clone()); + return Some(f); + } ) } - compatible_ifn!("llvm.copysign.f32", copysignf(t_f32, t_f32) -> t_f32); - compatible_ifn!("llvm.copysign.f64", copysign(t_f64, t_f64) -> t_f64); - compatible_ifn!("llvm.round.f32", roundf(t_f32) -> t_f32); - compatible_ifn!("llvm.round.f64", round(t_f64) -> t_f64); - - if ccx.sess().opts.debuginfo != NoDebugInfo { ifn!("llvm.dbg.declare", fn(Type::metadata(ccx), Type::metadata(ccx)) -> void); ifn!("llvm.dbg.value", fn(Type::metadata(ccx), t_i64, Type::metadata(ccx)) -> void); diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index b1e2d2f9fc8..ad6533e5480 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -237,6 +237,14 @@ extern "C" uint32_t LLVMRustDebugMetadataVersion() { return DEBUG_METADATA_VERSION; } +extern "C" uint32_t LLVMVersionMinor() { + return LLVM_VERSION_MINOR; +} + +extern "C" uint32_t LLVMVersionMajor() { + return LLVM_VERSION_MAJOR; +} + extern "C" void LLVMRustAddModuleFlag(LLVMModuleRef M, const char *name, uint32_t value) { -- cgit 1.4.1-3-g733a5