Skip to content

Commit 064e3b8

Browse files
committed
remove intrinsic wrapper functions from LLVM bindings
1 parent 7a52736 commit 064e3b8

File tree

3 files changed

+28
-132
lines changed

3 files changed

+28
-132
lines changed

compiler/rustc_codegen_llvm/src/builder.rs

Lines changed: 28 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,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);

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)