@@ -1518,14 +1518,13 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
15181518 pub ( crate ) fn set_unpredictable ( & mut self , inst : & ' ll Value ) {
15191519 self . set_metadata_node ( inst, llvm:: MD_unpredictable , & [ ] ) ;
15201520 }
1521- }
1522- impl < ' a , ' ll , CX : Borrow < SCx < ' ll > > > GenericBuilder < ' a , ' ll , CX > {
1521+
15231522 pub ( crate ) fn minnum ( & mut self , lhs : & ' ll Value , rhs : & ' ll Value ) -> & ' ll Value {
1524- unsafe { llvm :: LLVMRustBuildMinNum ( self . llbuilder , lhs, rhs) }
1523+ self . call_intrinsic ( "llvm.minnum" , & [ self . val_ty ( lhs ) ] , & [ lhs, rhs] )
15251524 }
15261525
15271526 pub ( crate ) fn maxnum ( & mut self , lhs : & ' ll Value , rhs : & ' ll Value ) -> & ' ll Value {
1528- unsafe { llvm :: LLVMRustBuildMaxNum ( self . llbuilder , lhs, rhs) }
1527+ self . call_intrinsic ( "llvm.maxnum" , & [ self . val_ty ( lhs ) ] , & [ lhs, rhs] )
15291528 }
15301529
15311530 pub ( crate ) fn insert_element (
@@ -1547,18 +1546,19 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
15471546 }
15481547
15491548 pub ( crate ) fn vector_reduce_fadd ( & mut self , acc : & ' ll Value , src : & ' ll Value ) -> & ' ll Value {
1550- unsafe { llvm :: LLVMRustBuildVectorReduceFAdd ( self . llbuilder , acc, src) }
1549+ self . call_intrinsic ( "llvm.vector.reduce.fadd" , & [ self . val_ty ( src ) ] , & [ acc, src] )
15511550 }
15521551 pub ( crate ) fn vector_reduce_fmul ( & mut self , acc : & ' ll Value , src : & ' ll Value ) -> & ' ll Value {
1553- unsafe { llvm :: LLVMRustBuildVectorReduceFMul ( self . llbuilder , acc, src) }
1552+ self . call_intrinsic ( "llvm.vector.reduce.fmul" , & [ self . val_ty ( src ) ] , & [ acc, src] )
15541553 }
15551554 pub ( crate ) fn vector_reduce_fadd_reassoc (
15561555 & mut self ,
15571556 acc : & ' ll Value ,
15581557 src : & ' ll Value ,
15591558 ) -> & ' ll Value {
15601559 unsafe {
1561- let instr = llvm:: LLVMRustBuildVectorReduceFAdd ( self . llbuilder , acc, src) ;
1560+ let instr =
1561+ self . call_intrinsic ( "llvm.vector.reduce.fadd" , & [ self . val_ty ( src) ] , & [ acc, src] ) ;
15621562 llvm:: LLVMRustSetAllowReassoc ( instr) ;
15631563 instr
15641564 }
@@ -1569,43 +1569,49 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
15691569 src : & ' ll Value ,
15701570 ) -> & ' ll Value {
15711571 unsafe {
1572- let instr = llvm:: LLVMRustBuildVectorReduceFMul ( self . llbuilder , acc, src) ;
1572+ let instr =
1573+ self . call_intrinsic ( "llvm.vector.reduce.fmul" , & [ self . val_ty ( src) ] , & [ acc, src] ) ;
15731574 llvm:: LLVMRustSetAllowReassoc ( instr) ;
15741575 instr
15751576 }
15761577 }
15771578 pub ( crate ) fn vector_reduce_add ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1578- unsafe { llvm :: LLVMRustBuildVectorReduceAdd ( self . llbuilder , src) }
1579+ self . call_intrinsic ( "llvm.vector.reduce.add" , & [ self . val_ty ( src) ] , & [ src ] )
15791580 }
15801581 pub ( crate ) fn vector_reduce_mul ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1581- unsafe { llvm :: LLVMRustBuildVectorReduceMul ( self . llbuilder , src) }
1582+ self . call_intrinsic ( "llvm.vector.reduce.mul" , & [ self . val_ty ( src) ] , & [ src ] )
15821583 }
15831584 pub ( crate ) fn vector_reduce_and ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1584- unsafe { llvm :: LLVMRustBuildVectorReduceAnd ( self . llbuilder , src) }
1585+ self . call_intrinsic ( "llvm.vector.reduce.and" , & [ self . val_ty ( src) ] , & [ src ] )
15851586 }
15861587 pub ( crate ) fn vector_reduce_or ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1587- unsafe { llvm :: LLVMRustBuildVectorReduceOr ( self . llbuilder , src) }
1588+ self . call_intrinsic ( "llvm.vector.reduce.or" , & [ self . val_ty ( src) ] , & [ src ] )
15881589 }
15891590 pub ( crate ) fn vector_reduce_xor ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1590- unsafe { llvm :: LLVMRustBuildVectorReduceXor ( self . llbuilder , src) }
1591+ self . call_intrinsic ( "llvm.vector.reduce.xor" , & [ self . val_ty ( src) ] , & [ src ] )
15911592 }
15921593 pub ( crate ) fn vector_reduce_fmin ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1593- unsafe {
1594- llvm:: LLVMRustBuildVectorReduceFMin ( self . llbuilder , src, /*NoNaNs:*/ false )
1595- }
1594+ self . call_intrinsic ( "llvm.vector.reduce.fmin" , & [ self . val_ty ( src) ] , & [ src] )
15961595 }
15971596 pub ( crate ) fn vector_reduce_fmax ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1598- unsafe {
1599- llvm:: LLVMRustBuildVectorReduceFMax ( self . llbuilder , src, /*NoNaNs:*/ false )
1600- }
1597+ self . call_intrinsic ( "llvm.vector.reduce.fmax" , & [ self . val_ty ( src) ] , & [ src] )
16011598 }
16021599 pub ( crate ) fn vector_reduce_min ( & mut self , src : & ' ll Value , is_signed : bool ) -> & ' ll Value {
1603- unsafe { llvm:: LLVMRustBuildVectorReduceMin ( self . llbuilder , src, is_signed) }
1600+ self . call_intrinsic (
1601+ if is_signed { "llvm.vector.reduce.smin" } else { "llvm.vector.reduce.umin" } ,
1602+ & [ self . val_ty ( src) ] ,
1603+ & [ src] ,
1604+ )
16041605 }
16051606 pub ( crate ) fn vector_reduce_max ( & mut self , src : & ' ll Value , is_signed : bool ) -> & ' ll Value {
1606- unsafe { llvm:: LLVMRustBuildVectorReduceMax ( self . llbuilder , src, is_signed) }
1607+ self . call_intrinsic (
1608+ if is_signed { "llvm.vector.reduce.smax" } else { "llvm.vector.reduce.umax" } ,
1609+ & [ self . val_ty ( src) ] ,
1610+ & [ src] ,
1611+ )
16071612 }
1608-
1613+ }
1614+ impl < ' a , ' ll , CX : Borrow < SCx < ' ll > > > GenericBuilder < ' a , ' ll , CX > {
16091615 pub ( crate ) fn add_clause ( & mut self , landing_pad : & ' ll Value , clause : & ' ll Value ) {
16101616 unsafe {
16111617 llvm:: LLVMAddClause ( landing_pad, clause) ;
0 commit comments