about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorgnzlbg <gonzalobg88@gmail.com>2018-03-15 10:08:22 +0100
committergnzlbg <gonzalobg88@gmail.com>2018-03-15 10:08:22 +0100
commit3125a307596db12d8b014da330373446dda5d7ca (patch)
tree530ab56cc7c2708b73837f50c386849bde1f7af7 /src/rustllvm/RustWrapper.cpp
parentc990fa0d880586d85e191b0691a415f9180f4e61 (diff)
downloadrust-3125a307596db12d8b014da330373446dda5d7ca.tar.gz
rust-3125a307596db12d8b014da330373446dda5d7ca.zip
error on vector reduction usage if LLVM version is < 5.0
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
-rw-r--r--src/rustllvm/RustWrapper.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index c647218c1ac..cd3ae1e743b 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -21,6 +21,8 @@
 
 #if LLVM_VERSION_GE(5, 0)
 #include "llvm/ADT/Optional.h"
+#else
+#include <cstdlib>
 #endif
 
 //===----------------------------------------------------------------------===
@@ -1397,7 +1399,7 @@ LLVMRustModuleCost(LLVMModuleRef M) {
 }
 
 // Vector reductions:
-#if LLVM_VERSION_GE(6, 0)
+#if LLVM_VERSION_GE(5, 0)
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef B, LLVMValueRef Acc, LLVMValueRef Src) {
     return wrap(unwrap(B)->CreateFAddReduce(unwrap(Acc),unwrap(Src)));
@@ -1445,48 +1447,65 @@ LLVMRustBuildVectorReduceFMax(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
 
 #else
 
+void error_and_exit(const char* msg) {
+  raw_fd_ostream OS(2, false);
+  OS << ::std::string(msg);
+  std::exit(EXIT_FAILURE);
+}
+
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceFAdd requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceFMul requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceAdd(LLVMBuilderRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceAdd requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceMul(LLVMBuilderRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceMul requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceAnd(LLVMBuilderRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceAnd requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceOr(LLVMBuilderRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceOr requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceXor(LLVMBuilderRef, LLVMValueRef Src) {
+  error_and_exit("LLVMRustBuildVectorReduceXor requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceMin(LLVMBuilderRef, LLVMValueRef Src, bool) {
+  error_and_exit("LLVMRustBuildVectorReduceMin requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceMax(LLVMBuilderRef, LLVMValueRef Src, bool) {
+  error_and_exit("LLVMRustBuildVectorReduceMax requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceFMin(LLVMBuilderRef, LLVMValueRef Src, bool) {
+  error_and_exit("LLVMRustBuildVectorReduceFMin requires LLVM >= 5.0");
   return Src;
 }
 extern "C" LLVMValueRef
 LLVMRustBuildVectorReduceFMax(LLVMBuilderRef, LLVMValueRef Src, bool) {
+  error_and_exit("LLVMRustBuildVectorReduceFMax requires LLVM >= 5.0");
   return Src;
 }
 #endif