@@ -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,65 +1546,84 @@ 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 }
1551+
15521552 pub ( crate ) fn vector_reduce_fmul ( & mut self , acc : & ' ll Value , src : & ' ll Value ) -> & ' ll Value {
1553- unsafe { llvm :: LLVMRustBuildVectorReduceFMul ( self . llbuilder , acc, src) }
1553+ self . call_intrinsic ( "llvm.vector.reduce.fmul" , & [ self . val_ty ( src ) ] , & [ acc, src] )
15541554 }
1555+
15551556 pub ( crate ) fn vector_reduce_fadd_reassoc (
15561557 & mut self ,
15571558 acc : & ' ll Value ,
15581559 src : & ' ll Value ,
15591560 ) -> & ' ll Value {
15601561 unsafe {
1561- let instr = llvm:: LLVMRustBuildVectorReduceFAdd ( self . llbuilder , acc, src) ;
1562+ let instr =
1563+ self . call_intrinsic ( "llvm.vector.reduce.fadd" , & [ self . val_ty ( src) ] , & [ acc, src] ) ;
15621564 llvm:: LLVMRustSetAllowReassoc ( instr) ;
15631565 instr
15641566 }
15651567 }
1568+
15661569 pub ( crate ) fn vector_reduce_fmul_reassoc (
15671570 & mut self ,
15681571 acc : & ' ll Value ,
15691572 src : & ' ll Value ,
15701573 ) -> & ' ll Value {
15711574 unsafe {
1572- let instr = llvm:: LLVMRustBuildVectorReduceFMul ( self . llbuilder , acc, src) ;
1575+ let instr =
1576+ self . call_intrinsic ( "llvm.vector.reduce.fmul" , & [ self . val_ty ( src) ] , & [ acc, src] ) ;
15731577 llvm:: LLVMRustSetAllowReassoc ( instr) ;
15741578 instr
15751579 }
15761580 }
1581+
15771582 pub ( crate ) fn vector_reduce_add ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1578- unsafe { llvm :: LLVMRustBuildVectorReduceAdd ( self . llbuilder , src) }
1583+ self . call_intrinsic ( "llvm.vector.reduce.add" , & [ self . val_ty ( src) ] , & [ src ] )
15791584 }
1585+
15801586 pub ( crate ) fn vector_reduce_mul ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1581- unsafe { llvm :: LLVMRustBuildVectorReduceMul ( self . llbuilder , src) }
1587+ self . call_intrinsic ( "llvm.vector.reduce.mul" , & [ self . val_ty ( src) ] , & [ src ] )
15821588 }
1589+
15831590 pub ( crate ) fn vector_reduce_and ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1584- unsafe { llvm :: LLVMRustBuildVectorReduceAnd ( self . llbuilder , src) }
1591+ self . call_intrinsic ( "llvm.vector.reduce.and" , & [ self . val_ty ( src) ] , & [ src ] )
15851592 }
1593+
15861594 pub ( crate ) fn vector_reduce_or ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1587- unsafe { llvm :: LLVMRustBuildVectorReduceOr ( self . llbuilder , src) }
1595+ self . call_intrinsic ( "llvm.vector.reduce.or" , & [ self . val_ty ( src) ] , & [ src ] )
15881596 }
1597+
15891598 pub ( crate ) fn vector_reduce_xor ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1590- unsafe { llvm :: LLVMRustBuildVectorReduceXor ( self . llbuilder , src) }
1599+ self . call_intrinsic ( "llvm.vector.reduce.xor" , & [ self . val_ty ( src) ] , & [ src ] )
15911600 }
1601+
15921602 pub ( crate ) fn vector_reduce_fmin ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1593- unsafe {
1594- llvm:: LLVMRustBuildVectorReduceFMin ( self . llbuilder , src, /*NoNaNs:*/ false )
1595- }
1603+ self . call_intrinsic ( "llvm.vector.reduce.fmin" , & [ self . val_ty ( src) ] , & [ src] )
15961604 }
1605+
15971606 pub ( crate ) fn vector_reduce_fmax ( & mut self , src : & ' ll Value ) -> & ' ll Value {
1598- unsafe {
1599- llvm:: LLVMRustBuildVectorReduceFMax ( self . llbuilder , src, /*NoNaNs:*/ false )
1600- }
1607+ self . call_intrinsic ( "llvm.vector.reduce.fmax" , & [ self . val_ty ( src) ] , & [ src] )
16011608 }
1609+
16021610 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) }
1611+ self . call_intrinsic (
1612+ if is_signed { "llvm.vector.reduce.smin" } else { "llvm.vector.reduce.umin" } ,
1613+ & [ self . val_ty ( src) ] ,
1614+ & [ src] ,
1615+ )
16041616 }
1617+
16051618 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) }
1619+ self . call_intrinsic (
1620+ if is_signed { "llvm.vector.reduce.smax" } else { "llvm.vector.reduce.umax" } ,
1621+ & [ self . val_ty ( src) ] ,
1622+ & [ src] ,
1623+ )
16071624 }
1608-
1625+ }
1626+ impl < ' a , ' ll , CX : Borrow < SCx < ' ll > > > GenericBuilder < ' a , ' ll , CX > {
16091627 pub ( crate ) fn add_clause ( & mut self , landing_pad : & ' ll Value , clause : & ' ll Value ) {
16101628 unsafe {
16111629 llvm:: LLVMAddClause ( landing_pad, clause) ;
0 commit comments