Skip to content

Commit 3125a30

Browse files
committed
error on vector reduction usage if LLVM version is < 5.0
1 parent c990fa0 commit 3125a30

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

src/rustllvm/RustWrapper.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
#if LLVM_VERSION_GE(5, 0)
2323
#include "llvm/ADT/Optional.h"
24+
#else
25+
#include <cstdlib>
2426
#endif
2527

2628
//===----------------------------------------------------------------------===
@@ -1397,7 +1399,7 @@ LLVMRustModuleCost(LLVMModuleRef M) {
13971399
}
13981400

13991401
// Vector reductions:
1400-
#if LLVM_VERSION_GE(6, 0)
1402+
#if LLVM_VERSION_GE(5, 0)
14011403
extern "C" LLVMValueRef
14021404
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef B, LLVMValueRef Acc, LLVMValueRef Src) {
14031405
return wrap(unwrap(B)->CreateFAddReduce(unwrap(Acc),unwrap(Src)));
@@ -1445,48 +1447,65 @@ LLVMRustBuildVectorReduceFMax(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
14451447

14461448
#else
14471449

1450+
void error_and_exit(const char* msg) {
1451+
raw_fd_ostream OS(2, false);
1452+
OS << ::std::string(msg);
1453+
std::exit(EXIT_FAILURE);
1454+
}
1455+
14481456
extern "C" LLVMValueRef
14491457
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef Src) {
1458+
error_and_exit("LLVMRustBuildVectorReduceFAdd requires LLVM >= 5.0");
14501459
return Src;
14511460
}
14521461
extern "C" LLVMValueRef
14531462
LLVMRustBuildVectorReduceFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef Src) {
1463+
error_and_exit("LLVMRustBuildVectorReduceFMul requires LLVM >= 5.0");
14541464
return Src;
14551465
}
14561466
extern "C" LLVMValueRef
14571467
LLVMRustBuildVectorReduceAdd(LLVMBuilderRef, LLVMValueRef Src) {
1468+
error_and_exit("LLVMRustBuildVectorReduceAdd requires LLVM >= 5.0");
14581469
return Src;
14591470
}
14601471
extern "C" LLVMValueRef
14611472
LLVMRustBuildVectorReduceMul(LLVMBuilderRef, LLVMValueRef Src) {
1473+
error_and_exit("LLVMRustBuildVectorReduceMul requires LLVM >= 5.0");
14621474
return Src;
14631475
}
14641476
extern "C" LLVMValueRef
14651477
LLVMRustBuildVectorReduceAnd(LLVMBuilderRef, LLVMValueRef Src) {
1478+
error_and_exit("LLVMRustBuildVectorReduceAnd requires LLVM >= 5.0");
14661479
return Src;
14671480
}
14681481
extern "C" LLVMValueRef
14691482
LLVMRustBuildVectorReduceOr(LLVMBuilderRef, LLVMValueRef Src) {
1483+
error_and_exit("LLVMRustBuildVectorReduceOr requires LLVM >= 5.0");
14701484
return Src;
14711485
}
14721486
extern "C" LLVMValueRef
14731487
LLVMRustBuildVectorReduceXor(LLVMBuilderRef, LLVMValueRef Src) {
1488+
error_and_exit("LLVMRustBuildVectorReduceXor requires LLVM >= 5.0");
14741489
return Src;
14751490
}
14761491
extern "C" LLVMValueRef
14771492
LLVMRustBuildVectorReduceMin(LLVMBuilderRef, LLVMValueRef Src, bool) {
1493+
error_and_exit("LLVMRustBuildVectorReduceMin requires LLVM >= 5.0");
14781494
return Src;
14791495
}
14801496
extern "C" LLVMValueRef
14811497
LLVMRustBuildVectorReduceMax(LLVMBuilderRef, LLVMValueRef Src, bool) {
1498+
error_and_exit("LLVMRustBuildVectorReduceMax requires LLVM >= 5.0");
14821499
return Src;
14831500
}
14841501
extern "C" LLVMValueRef
14851502
LLVMRustBuildVectorReduceFMin(LLVMBuilderRef, LLVMValueRef Src, bool) {
1503+
error_and_exit("LLVMRustBuildVectorReduceFMin requires LLVM >= 5.0");
14861504
return Src;
14871505
}
14881506
extern "C" LLVMValueRef
14891507
LLVMRustBuildVectorReduceFMax(LLVMBuilderRef, LLVMValueRef Src, bool) {
1508+
error_and_exit("LLVMRustBuildVectorReduceFMax requires LLVM >= 5.0");
14901509
return Src;
14911510
}
14921511
#endif

0 commit comments

Comments
 (0)