@@ -962,6 +962,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
962
962
// https://bugs.llvm.org/show_bug.cgi?id=36732
963
963
// is fixed.
964
964
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
+ }
965
968
llvm:: LLVMRustSetHasUnsafeAlgebra ( instr) ;
966
969
instr
967
970
}
@@ -973,56 +976,90 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
973
976
// https://bugs.llvm.org/show_bug.cgi?id=36732
974
977
// is fixed.
975
978
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
+ }
976
982
llvm:: LLVMRustSetHasUnsafeAlgebra ( instr) ;
977
983
instr
978
984
}
979
985
}
980
986
pub fn vector_reduce_add ( & self , src : ValueRef ) -> ValueRef {
981
987
self . count_insn ( "vector.reduce.add" ) ;
982
988
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
984
994
}
985
995
}
986
996
pub fn vector_reduce_mul ( & self , src : ValueRef ) -> ValueRef {
987
997
self . count_insn ( "vector.reduce.mul" ) ;
988
998
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
990
1004
}
991
1005
}
992
1006
pub fn vector_reduce_and ( & self , src : ValueRef ) -> ValueRef {
993
1007
self . count_insn ( "vector.reduce.and" ) ;
994
1008
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
996
1014
}
997
1015
}
998
1016
pub fn vector_reduce_or ( & self , src : ValueRef ) -> ValueRef {
999
1017
self . count_insn ( "vector.reduce.or" ) ;
1000
1018
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
1002
1024
}
1003
1025
}
1004
1026
pub fn vector_reduce_xor ( & self , src : ValueRef ) -> ValueRef {
1005
1027
self . count_insn ( "vector.reduce.xor" ) ;
1006
1028
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
1008
1034
}
1009
1035
}
1010
1036
pub fn vector_reduce_fmin ( & self , src : ValueRef ) -> ValueRef {
1011
1037
self . count_insn ( "vector.reduce.fmin" ) ;
1012
1038
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
1014
1044
}
1015
1045
}
1016
1046
pub fn vector_reduce_fmax ( & self , src : ValueRef ) -> ValueRef {
1017
1047
self . count_insn ( "vector.reduce.fmax" ) ;
1018
1048
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
1020
1054
}
1021
1055
}
1022
1056
pub fn vector_reduce_fmin_fast ( & self , src : ValueRef ) -> ValueRef {
1023
1057
self . count_insn ( "vector.reduce.fmin_fast" ) ;
1024
1058
unsafe {
1025
1059
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
+ }
1026
1063
llvm:: LLVMRustSetHasUnsafeAlgebra ( instr) ;
1027
1064
instr
1028
1065
}
@@ -1031,20 +1068,31 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
1031
1068
self . count_insn ( "vector.reduce.fmax_fast" ) ;
1032
1069
unsafe {
1033
1070
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
+ }
1034
1074
llvm:: LLVMRustSetHasUnsafeAlgebra ( instr) ;
1035
1075
instr
1036
1076
}
1037
1077
}
1038
1078
pub fn vector_reduce_min ( & self , src : ValueRef , is_signed : bool ) -> ValueRef {
1039
1079
self . count_insn ( "vector.reduce.min" ) ;
1040
1080
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
1042
1086
}
1043
1087
}
1044
1088
pub fn vector_reduce_max ( & self , src : ValueRef , is_signed : bool ) -> ValueRef {
1045
1089
self . count_insn ( "vector.reduce.max" ) ;
1046
1090
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
1048
1096
}
1049
1097
}
1050
1098
0 commit comments