@@ -1518,14 +1518,13 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
1518
1518
pub ( crate ) fn set_unpredictable ( & mut self , inst : & ' ll Value ) {
1519
1519
self . set_metadata_node ( inst, llvm:: MD_unpredictable , & [ ] ) ;
1520
1520
}
1521
- }
1522
- impl < ' a , ' ll , CX : Borrow < SCx < ' ll > > > GenericBuilder < ' a , ' ll , CX > {
1521
+
1523
1522
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] )
1525
1524
}
1526
1525
1527
1526
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] )
1529
1528
}
1530
1529
1531
1530
pub ( crate ) fn insert_element (
@@ -1547,18 +1546,19 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
1547
1546
}
1548
1547
1549
1548
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] )
1551
1550
}
1552
1551
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] )
1554
1553
}
1555
1554
pub ( crate ) fn vector_reduce_fadd_reassoc (
1556
1555
& mut self ,
1557
1556
acc : & ' ll Value ,
1558
1557
src : & ' ll Value ,
1559
1558
) -> & ' ll Value {
1560
1559
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] ) ;
1562
1562
llvm:: LLVMRustSetAllowReassoc ( instr) ;
1563
1563
instr
1564
1564
}
@@ -1569,43 +1569,49 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
1569
1569
src : & ' ll Value ,
1570
1570
) -> & ' ll Value {
1571
1571
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] ) ;
1573
1574
llvm:: LLVMRustSetAllowReassoc ( instr) ;
1574
1575
instr
1575
1576
}
1576
1577
}
1577
1578
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 ] )
1579
1580
}
1580
1581
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 ] )
1582
1583
}
1583
1584
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 ] )
1585
1586
}
1586
1587
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 ] )
1588
1589
}
1589
1590
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 ] )
1591
1592
}
1592
1593
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] )
1596
1595
}
1597
1596
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] )
1601
1598
}
1602
1599
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
+ )
1604
1605
}
1605
1606
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
+ )
1607
1612
}
1608
-
1613
+ }
1614
+ impl < ' a , ' ll , CX : Borrow < SCx < ' ll > > > GenericBuilder < ' a , ' ll , CX > {
1609
1615
pub ( crate ) fn add_clause ( & mut self , landing_pad : & ' ll Value , clause : & ' ll Value ) {
1610
1616
unsafe {
1611
1617
llvm:: LLVMAddClause ( landing_pad, clause) ;
0 commit comments