Skip to content

Commit 281d0ba

Browse files
committed
remove intrinsic wrapper functions from LLVM bindings
1 parent 7a52736 commit 281d0ba

File tree

3 files changed

+40
-132
lines changed

3 files changed

+40
-132
lines changed

compiler/rustc_codegen_llvm/src/builder.rs

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

compiler/rustc_codegen_llvm/src/llvm/ffi.rs

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,53 +2044,6 @@ unsafe extern "C" {
20442044
IsVolatile: bool,
20452045
) -> &'a Value;
20462046

2047-
pub(crate) fn LLVMRustBuildVectorReduceFAdd<'a>(
2048-
B: &Builder<'a>,
2049-
Acc: &'a Value,
2050-
Src: &'a Value,
2051-
) -> &'a Value;
2052-
pub(crate) fn LLVMRustBuildVectorReduceFMul<'a>(
2053-
B: &Builder<'a>,
2054-
Acc: &'a Value,
2055-
Src: &'a Value,
2056-
) -> &'a Value;
2057-
pub(crate) fn LLVMRustBuildVectorReduceAdd<'a>(B: &Builder<'a>, Src: &'a Value) -> &'a Value;
2058-
pub(crate) fn LLVMRustBuildVectorReduceMul<'a>(B: &Builder<'a>, Src: &'a Value) -> &'a Value;
2059-
pub(crate) fn LLVMRustBuildVectorReduceAnd<'a>(B: &Builder<'a>, Src: &'a Value) -> &'a Value;
2060-
pub(crate) fn LLVMRustBuildVectorReduceOr<'a>(B: &Builder<'a>, Src: &'a Value) -> &'a Value;
2061-
pub(crate) fn LLVMRustBuildVectorReduceXor<'a>(B: &Builder<'a>, Src: &'a Value) -> &'a Value;
2062-
pub(crate) fn LLVMRustBuildVectorReduceMin<'a>(
2063-
B: &Builder<'a>,
2064-
Src: &'a Value,
2065-
IsSigned: bool,
2066-
) -> &'a Value;
2067-
pub(crate) fn LLVMRustBuildVectorReduceMax<'a>(
2068-
B: &Builder<'a>,
2069-
Src: &'a Value,
2070-
IsSigned: bool,
2071-
) -> &'a Value;
2072-
pub(crate) fn LLVMRustBuildVectorReduceFMin<'a>(
2073-
B: &Builder<'a>,
2074-
Src: &'a Value,
2075-
IsNaN: bool,
2076-
) -> &'a Value;
2077-
pub(crate) fn LLVMRustBuildVectorReduceFMax<'a>(
2078-
B: &Builder<'a>,
2079-
Src: &'a Value,
2080-
IsNaN: bool,
2081-
) -> &'a Value;
2082-
2083-
pub(crate) fn LLVMRustBuildMinNum<'a>(
2084-
B: &Builder<'a>,
2085-
LHS: &'a Value,
2086-
RHS: &'a Value,
2087-
) -> &'a Value;
2088-
pub(crate) fn LLVMRustBuildMaxNum<'a>(
2089-
B: &Builder<'a>,
2090-
LHS: &'a Value,
2091-
RHS: &'a Value,
2092-
) -> &'a Value;
2093-
20942047
pub(crate) fn LLVMRustTimeTraceProfilerInitialize();
20952048

20962049
pub(crate) fn LLVMRustTimeTraceProfilerFinishThread();

compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,69 +1481,6 @@ extern "C" void LLVMRustModuleInstructionStats(LLVMModuleRef M,
14811481
});
14821482
}
14831483

1484-
// Vector reductions:
1485-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef B,
1486-
LLVMValueRef Acc,
1487-
LLVMValueRef Src) {
1488-
return wrap(unwrap(B)->CreateFAddReduce(unwrap(Acc), unwrap(Src)));
1489-
}
1490-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceFMul(LLVMBuilderRef B,
1491-
LLVMValueRef Acc,
1492-
LLVMValueRef Src) {
1493-
return wrap(unwrap(B)->CreateFMulReduce(unwrap(Acc), unwrap(Src)));
1494-
}
1495-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceAdd(LLVMBuilderRef B,
1496-
LLVMValueRef Src) {
1497-
return wrap(unwrap(B)->CreateAddReduce(unwrap(Src)));
1498-
}
1499-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceMul(LLVMBuilderRef B,
1500-
LLVMValueRef Src) {
1501-
return wrap(unwrap(B)->CreateMulReduce(unwrap(Src)));
1502-
}
1503-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceAnd(LLVMBuilderRef B,
1504-
LLVMValueRef Src) {
1505-
return wrap(unwrap(B)->CreateAndReduce(unwrap(Src)));
1506-
}
1507-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceOr(LLVMBuilderRef B,
1508-
LLVMValueRef Src) {
1509-
return wrap(unwrap(B)->CreateOrReduce(unwrap(Src)));
1510-
}
1511-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceXor(LLVMBuilderRef B,
1512-
LLVMValueRef Src) {
1513-
return wrap(unwrap(B)->CreateXorReduce(unwrap(Src)));
1514-
}
1515-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceMin(LLVMBuilderRef B,
1516-
LLVMValueRef Src,
1517-
bool IsSigned) {
1518-
return wrap(unwrap(B)->CreateIntMinReduce(unwrap(Src), IsSigned));
1519-
}
1520-
extern "C" LLVMValueRef LLVMRustBuildVectorReduceMax(LLVMBuilderRef B,
1521-
LLVMValueRef Src,
1522-
bool IsSigned) {
1523-
return wrap(unwrap(B)->CreateIntMaxReduce(unwrap(Src), IsSigned));
1524-
}
1525-
extern "C" LLVMValueRef
1526-
LLVMRustBuildVectorReduceFMin(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
1527-
Instruction *I = unwrap(B)->CreateFPMinReduce(unwrap(Src));
1528-
I->setHasNoNaNs(NoNaN);
1529-
return wrap(I);
1530-
}
1531-
extern "C" LLVMValueRef
1532-
LLVMRustBuildVectorReduceFMax(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
1533-
Instruction *I = unwrap(B)->CreateFPMaxReduce(unwrap(Src));
1534-
I->setHasNoNaNs(NoNaN);
1535-
return wrap(I);
1536-
}
1537-
1538-
extern "C" LLVMValueRef LLVMRustBuildMinNum(LLVMBuilderRef B, LLVMValueRef LHS,
1539-
LLVMValueRef RHS) {
1540-
return wrap(unwrap(B)->CreateMinNum(unwrap(LHS), unwrap(RHS)));
1541-
}
1542-
extern "C" LLVMValueRef LLVMRustBuildMaxNum(LLVMBuilderRef B, LLVMValueRef LHS,
1543-
LLVMValueRef RHS) {
1544-
return wrap(unwrap(B)->CreateMaxNum(unwrap(LHS), unwrap(RHS)));
1545-
}
1546-
15471484
// Transfers ownership of DiagnosticHandler unique_ptr to the caller.
15481485
extern "C" DiagnosticHandler *
15491486
LLVMRustContextGetDiagnosticHandler(LLVMContextRef C) {

0 commit comments

Comments
 (0)