Skip to content

Commit 19b81f6

Browse files
committed
error via bug! instead of stderr+terminate
1 parent 4fe6acf commit 19b81f6

File tree

2 files changed

+79
-48
lines changed

2 files changed

+79
-48
lines changed

src/librustc_trans/builder.rs

+57-9
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
962962
// https://bugs.llvm.org/show_bug.cgi?id=36732
963963
// is fixed.
964964
let instr = llvm::LLVMRustBuildVectorReduceFAdd(self.llbuilder, acc, src);
965+
if instr.is_null() {
966+
bug!("LLVMRustBuildVectorReduceFAdd is not available in LLVM version < 5.0");
967+
}
965968
llvm::LLVMRustSetHasUnsafeAlgebra(instr);
966969
instr
967970
}
@@ -973,56 +976,90 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
973976
// https://bugs.llvm.org/show_bug.cgi?id=36732
974977
// is fixed.
975978
let instr = llvm::LLVMRustBuildVectorReduceFMul(self.llbuilder, acc, src);
979+
if instr.is_null() {
980+
bug!("LLVMRustBuildVectorReduceFMul is not available in LLVM version < 5.0");
981+
}
976982
llvm::LLVMRustSetHasUnsafeAlgebra(instr);
977983
instr
978984
}
979985
}
980986
pub fn vector_reduce_add(&self, src: ValueRef) -> ValueRef {
981987
self.count_insn("vector.reduce.add");
982988
unsafe {
983-
llvm::LLVMRustBuildVectorReduceAdd(self.llbuilder, src)
989+
let instr = llvm::LLVMRustBuildVectorReduceAdd(self.llbuilder, src);
990+
if instr.is_null() {
991+
bug!("LLVMRustBuildVectorReduceAdd is not available in LLVM version < 5.0");
992+
}
993+
instr
984994
}
985995
}
986996
pub fn vector_reduce_mul(&self, src: ValueRef) -> ValueRef {
987997
self.count_insn("vector.reduce.mul");
988998
unsafe {
989-
llvm::LLVMRustBuildVectorReduceMul(self.llbuilder, src)
999+
let instr = llvm::LLVMRustBuildVectorReduceMul(self.llbuilder, src);
1000+
if instr.is_null() {
1001+
bug!("LLVMRustBuildVectorReduceMul is not available in LLVM version < 5.0");
1002+
}
1003+
instr
9901004
}
9911005
}
9921006
pub fn vector_reduce_and(&self, src: ValueRef) -> ValueRef {
9931007
self.count_insn("vector.reduce.and");
9941008
unsafe {
995-
llvm::LLVMRustBuildVectorReduceAnd(self.llbuilder, src)
1009+
let instr = llvm::LLVMRustBuildVectorReduceAnd(self.llbuilder, src);
1010+
if instr.is_null() {
1011+
bug!("LLVMRustBuildVectorReduceAnd is not available in LLVM version < 5.0");
1012+
}
1013+
instr
9961014
}
9971015
}
9981016
pub fn vector_reduce_or(&self, src: ValueRef) -> ValueRef {
9991017
self.count_insn("vector.reduce.or");
10001018
unsafe {
1001-
llvm::LLVMRustBuildVectorReduceOr(self.llbuilder, src)
1019+
let instr = llvm::LLVMRustBuildVectorReduceOr(self.llbuilder, src);
1020+
if instr.is_null() {
1021+
bug!("LLVMRustBuildVectorReduceOr is not available in LLVM version < 5.0");
1022+
}
1023+
instr
10021024
}
10031025
}
10041026
pub fn vector_reduce_xor(&self, src: ValueRef) -> ValueRef {
10051027
self.count_insn("vector.reduce.xor");
10061028
unsafe {
1007-
llvm::LLVMRustBuildVectorReduceXor(self.llbuilder, src)
1029+
let instr = llvm::LLVMRustBuildVectorReduceXor(self.llbuilder, src);
1030+
if instr.is_null() {
1031+
bug!("LLVMRustBuildVectorReduceXor is not available in LLVM version < 5.0");
1032+
}
1033+
instr
10081034
}
10091035
}
10101036
pub fn vector_reduce_fmin(&self, src: ValueRef) -> ValueRef {
10111037
self.count_insn("vector.reduce.fmin");
10121038
unsafe {
1013-
llvm::LLVMRustBuildVectorReduceFMin(self.llbuilder, src, true)
1039+
let instr = llvm::LLVMRustBuildVectorReduceFMin(self.llbuilder, src, true);
1040+
if instr.is_null() {
1041+
bug!("LLVMRustBuildVectorReduceFMin is not available in LLVM version < 5.0");
1042+
}
1043+
instr
10141044
}
10151045
}
10161046
pub fn vector_reduce_fmax(&self, src: ValueRef) -> ValueRef {
10171047
self.count_insn("vector.reduce.fmax");
10181048
unsafe {
1019-
llvm::LLVMRustBuildVectorReduceFMax(self.llbuilder, src, true)
1049+
let instr = llvm::LLVMRustBuildVectorReduceFMax(self.llbuilder, src, true);
1050+
if instr.is_null() {
1051+
bug!("LLVMRustBuildVectorReduceFMax is not available in LLVM version < 5.0");
1052+
}
1053+
instr
10201054
}
10211055
}
10221056
pub fn vector_reduce_fmin_fast(&self, src: ValueRef) -> ValueRef {
10231057
self.count_insn("vector.reduce.fmin_fast");
10241058
unsafe {
10251059
let instr = llvm::LLVMRustBuildVectorReduceFMin(self.llbuilder, src, false);
1060+
if instr.is_null() {
1061+
bug!("LLVMRustBuildVectorReduceFMin is not available in LLVM version < 5.0");
1062+
}
10261063
llvm::LLVMRustSetHasUnsafeAlgebra(instr);
10271064
instr
10281065
}
@@ -1031,20 +1068,31 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
10311068
self.count_insn("vector.reduce.fmax_fast");
10321069
unsafe {
10331070
let instr = llvm::LLVMRustBuildVectorReduceFMax(self.llbuilder, src, false);
1071+
if instr.is_null() {
1072+
bug!("LLVMRustBuildVectorReduceFMax is not available in LLVM version < 5.0");
1073+
}
10341074
llvm::LLVMRustSetHasUnsafeAlgebra(instr);
10351075
instr
10361076
}
10371077
}
10381078
pub fn vector_reduce_min(&self, src: ValueRef, is_signed: bool) -> ValueRef {
10391079
self.count_insn("vector.reduce.min");
10401080
unsafe {
1041-
llvm::LLVMRustBuildVectorReduceMin(self.llbuilder, src, is_signed)
1081+
let instr = llvm::LLVMRustBuildVectorReduceMin(self.llbuilder, src, is_signed);
1082+
if instr.is_null() {
1083+
bug!("LLVMRustBuildVectorReduceMin is not available in LLVM version < 5.0");
1084+
}
1085+
instr
10421086
}
10431087
}
10441088
pub fn vector_reduce_max(&self, src: ValueRef, is_signed: bool) -> ValueRef {
10451089
self.count_insn("vector.reduce.max");
10461090
unsafe {
1047-
llvm::LLVMRustBuildVectorReduceMax(self.llbuilder, src, is_signed)
1091+
let instr = llvm::LLVMRustBuildVectorReduceMax(self.llbuilder, src, is_signed);
1092+
if instr.is_null() {
1093+
bug!("LLVMRustBuildVectorReduceMax is not available in LLVM version < 5.0");
1094+
}
1095+
instr
10481096
}
10491097
}
10501098

src/rustllvm/RustWrapper.cpp

+22-39
Original file line numberDiff line numberDiff line change
@@ -1447,65 +1447,48 @@ LLVMRustBuildVectorReduceFMax(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
14471447

14481448
#else
14491449

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-
14561450
extern "C" LLVMValueRef
1457-
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef Src) {
1458-
error_and_exit("LLVMRustBuildVectorReduceFAdd requires LLVM >= 5.0");
1459-
return Src;
1451+
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef) {
1452+
return nullptr;
14601453
}
14611454
extern "C" LLVMValueRef
1462-
LLVMRustBuildVectorReduceFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef Src) {
1463-
error_and_exit("LLVMRustBuildVectorReduceFMul requires LLVM >= 5.0");
1464-
return Src;
1455+
LLVMRustBuildVectorReduceFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef) {
1456+
return nullptr;
14651457
}
14661458
extern "C" LLVMValueRef
1467-
LLVMRustBuildVectorReduceAdd(LLVMBuilderRef, LLVMValueRef Src) {
1468-
error_and_exit("LLVMRustBuildVectorReduceAdd requires LLVM >= 5.0");
1469-
return Src;
1459+
LLVMRustBuildVectorReduceAdd(LLVMBuilderRef, LLVMValueRef) {
1460+
return nullptr;
14701461
}
14711462
extern "C" LLVMValueRef
1472-
LLVMRustBuildVectorReduceMul(LLVMBuilderRef, LLVMValueRef Src) {
1473-
error_and_exit("LLVMRustBuildVectorReduceMul requires LLVM >= 5.0");
1474-
return Src;
1463+
LLVMRustBuildVectorReduceMul(LLVMBuilderRef, LLVMValueRef) {
1464+
return nullptr;
14751465
}
14761466
extern "C" LLVMValueRef
1477-
LLVMRustBuildVectorReduceAnd(LLVMBuilderRef, LLVMValueRef Src) {
1478-
error_and_exit("LLVMRustBuildVectorReduceAnd requires LLVM >= 5.0");
1479-
return Src;
1467+
LLVMRustBuildVectorReduceAnd(LLVMBuilderRef, LLVMValueRef) {
1468+
return nullptr;
14801469
}
14811470
extern "C" LLVMValueRef
1482-
LLVMRustBuildVectorReduceOr(LLVMBuilderRef, LLVMValueRef Src) {
1483-
error_and_exit("LLVMRustBuildVectorReduceOr requires LLVM >= 5.0");
1484-
return Src;
1471+
LLVMRustBuildVectorReduceOr(LLVMBuilderRef, LLVMValueRef) {
1472+
return nullptr;
14851473
}
14861474
extern "C" LLVMValueRef
1487-
LLVMRustBuildVectorReduceXor(LLVMBuilderRef, LLVMValueRef Src) {
1488-
error_and_exit("LLVMRustBuildVectorReduceXor requires LLVM >= 5.0");
1489-
return Src;
1475+
LLVMRustBuildVectorReduceXor(LLVMBuilderRef, LLVMValueRef) {
1476+
return nullptr;
14901477
}
14911478
extern "C" LLVMValueRef
1492-
LLVMRustBuildVectorReduceMin(LLVMBuilderRef, LLVMValueRef Src, bool) {
1493-
error_and_exit("LLVMRustBuildVectorReduceMin requires LLVM >= 5.0");
1494-
return Src;
1479+
LLVMRustBuildVectorReduceMin(LLVMBuilderRef, LLVMValueRef, bool) {
1480+
return nullptr;
14951481
}
14961482
extern "C" LLVMValueRef
1497-
LLVMRustBuildVectorReduceMax(LLVMBuilderRef, LLVMValueRef Src, bool) {
1498-
error_and_exit("LLVMRustBuildVectorReduceMax requires LLVM >= 5.0");
1499-
return Src;
1483+
LLVMRustBuildVectorReduceMax(LLVMBuilderRef, LLVMValueRef, bool) {
1484+
return nullptr;
15001485
}
15011486
extern "C" LLVMValueRef
1502-
LLVMRustBuildVectorReduceFMin(LLVMBuilderRef, LLVMValueRef Src, bool) {
1503-
error_and_exit("LLVMRustBuildVectorReduceFMin requires LLVM >= 5.0");
1504-
return Src;
1487+
LLVMRustBuildVectorReduceFMin(LLVMBuilderRef, LLVMValueRef, bool) {
1488+
return nullptr;
15051489
}
15061490
extern "C" LLVMValueRef
1507-
LLVMRustBuildVectorReduceFMax(LLVMBuilderRef, LLVMValueRef Src, bool) {
1508-
error_and_exit("LLVMRustBuildVectorReduceFMax requires LLVM >= 5.0");
1509-
return Src;
1491+
LLVMRustBuildVectorReduceFMax(LLVMBuilderRef, LLVMValueRef, bool) {
1492+
return nullptr;
15101493
}
15111494
#endif

0 commit comments

Comments
 (0)