@@ -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
0 commit comments