Skip to content

Commit 7d9f8e0

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

File tree

3 files changed

+88
-178
lines changed

3 files changed

+88
-178
lines changed

compiler/rustc_codegen_llvm/src/builder.rs

Lines changed: 88 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,14 +1520,6 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
15201520
}
15211521
}
15221522
impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
1523-
pub(crate) fn minnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value {
1524-
unsafe { llvm::LLVMRustBuildMinNum(self.llbuilder, lhs, rhs) }
1525-
}
1526-
1527-
pub(crate) fn maxnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value {
1528-
unsafe { llvm::LLVMRustBuildMaxNum(self.llbuilder, lhs, rhs) }
1529-
}
1530-
15311523
pub(crate) fn insert_element(
15321524
&mut self,
15331525
vec: &'ll Value,
@@ -1546,66 +1538,6 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
15461538
unsafe { llvm::LLVMBuildShuffleVector(self.llbuilder, v1, v2, mask, UNNAMED) }
15471539
}
15481540

1549-
pub(crate) fn vector_reduce_fadd(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
1550-
unsafe { llvm::LLVMRustBuildVectorReduceFAdd(self.llbuilder, acc, src) }
1551-
}
1552-
pub(crate) fn vector_reduce_fmul(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
1553-
unsafe { llvm::LLVMRustBuildVectorReduceFMul(self.llbuilder, acc, src) }
1554-
}
1555-
pub(crate) fn vector_reduce_fadd_reassoc(
1556-
&mut self,
1557-
acc: &'ll Value,
1558-
src: &'ll Value,
1559-
) -> &'ll Value {
1560-
unsafe {
1561-
let instr = llvm::LLVMRustBuildVectorReduceFAdd(self.llbuilder, acc, src);
1562-
llvm::LLVMRustSetAllowReassoc(instr);
1563-
instr
1564-
}
1565-
}
1566-
pub(crate) fn vector_reduce_fmul_reassoc(
1567-
&mut self,
1568-
acc: &'ll Value,
1569-
src: &'ll Value,
1570-
) -> &'ll Value {
1571-
unsafe {
1572-
let instr = llvm::LLVMRustBuildVectorReduceFMul(self.llbuilder, acc, src);
1573-
llvm::LLVMRustSetAllowReassoc(instr);
1574-
instr
1575-
}
1576-
}
1577-
pub(crate) fn vector_reduce_add(&mut self, src: &'ll Value) -> &'ll Value {
1578-
unsafe { llvm::LLVMRustBuildVectorReduceAdd(self.llbuilder, src) }
1579-
}
1580-
pub(crate) fn vector_reduce_mul(&mut self, src: &'ll Value) -> &'ll Value {
1581-
unsafe { llvm::LLVMRustBuildVectorReduceMul(self.llbuilder, src) }
1582-
}
1583-
pub(crate) fn vector_reduce_and(&mut self, src: &'ll Value) -> &'ll Value {
1584-
unsafe { llvm::LLVMRustBuildVectorReduceAnd(self.llbuilder, src) }
1585-
}
1586-
pub(crate) fn vector_reduce_or(&mut self, src: &'ll Value) -> &'ll Value {
1587-
unsafe { llvm::LLVMRustBuildVectorReduceOr(self.llbuilder, src) }
1588-
}
1589-
pub(crate) fn vector_reduce_xor(&mut self, src: &'ll Value) -> &'ll Value {
1590-
unsafe { llvm::LLVMRustBuildVectorReduceXor(self.llbuilder, src) }
1591-
}
1592-
pub(crate) fn vector_reduce_fmin(&mut self, src: &'ll Value) -> &'ll Value {
1593-
unsafe {
1594-
llvm::LLVMRustBuildVectorReduceFMin(self.llbuilder, src, /*NoNaNs:*/ false)
1595-
}
1596-
}
1597-
pub(crate) fn vector_reduce_fmax(&mut self, src: &'ll Value) -> &'ll Value {
1598-
unsafe {
1599-
llvm::LLVMRustBuildVectorReduceFMax(self.llbuilder, src, /*NoNaNs:*/ false)
1600-
}
1601-
}
1602-
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) }
1604-
}
1605-
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-
}
1608-
16091541
pub(crate) fn add_clause(&mut self, landing_pad: &'ll Value, clause: &'ll Value) {
16101542
unsafe {
16111543
llvm::LLVMAddClause(landing_pad, clause);
@@ -1893,3 +1825,91 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
18931825
self.call_intrinsic("llvm.instrprof.increment", &[], &[fn_name, hash, num_counters, index]);
18941826
}
18951827
}
1828+
1829+
impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
1830+
pub(crate) fn minnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value {
1831+
self.call_intrinsic("llvm.minnum", &[self.val_ty(lhs)], &[lhs, rhs])
1832+
}
1833+
1834+
pub(crate) fn maxnum(&mut self, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value {
1835+
self.call_intrinsic("llvm.maxnum", &[self.val_ty(lhs)], &[lhs, rhs])
1836+
}
1837+
1838+
pub(crate) fn vector_reduce_fadd(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
1839+
self.call_intrinsic("llvm.vector.reduce.fadd", &[self.val_ty(src)], &[acc, src])
1840+
}
1841+
1842+
pub(crate) fn vector_reduce_fmul(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
1843+
self.call_intrinsic("llvm.vector.reduce.fmul", &[self.val_ty(src)], &[acc, src])
1844+
}
1845+
1846+
pub(crate) fn vector_reduce_fadd_reassoc(
1847+
&mut self,
1848+
acc: &'ll Value,
1849+
src: &'ll Value,
1850+
) -> &'ll Value {
1851+
unsafe {
1852+
let instr =
1853+
self.call_intrinsic("llvm.vector.reduce.fadd", &[self.val_ty(src)], &[acc, src]);
1854+
llvm::LLVMRustSetAllowReassoc(instr);
1855+
instr
1856+
}
1857+
}
1858+
1859+
pub(crate) fn vector_reduce_fmul_reassoc(
1860+
&mut self,
1861+
acc: &'ll Value,
1862+
src: &'ll Value,
1863+
) -> &'ll Value {
1864+
unsafe {
1865+
let instr =
1866+
self.call_intrinsic("llvm.vector.reduce.fmul", &[self.val_ty(src)], &[acc, src]);
1867+
llvm::LLVMRustSetAllowReassoc(instr);
1868+
instr
1869+
}
1870+
}
1871+
1872+
pub(crate) fn vector_reduce_add(&mut self, src: &'ll Value) -> &'ll Value {
1873+
self.call_intrinsic("llvm.vector.reduce.add", &[self.val_ty(src)], &[src])
1874+
}
1875+
1876+
pub(crate) fn vector_reduce_mul(&mut self, src: &'ll Value) -> &'ll Value {
1877+
self.call_intrinsic("llvm.vector.reduce.mul", &[self.val_ty(src)], &[src])
1878+
}
1879+
1880+
pub(crate) fn vector_reduce_and(&mut self, src: &'ll Value) -> &'ll Value {
1881+
self.call_intrinsic("llvm.vector.reduce.and", &[self.val_ty(src)], &[src])
1882+
}
1883+
1884+
pub(crate) fn vector_reduce_or(&mut self, src: &'ll Value) -> &'ll Value {
1885+
self.call_intrinsic("llvm.vector.reduce.or", &[self.val_ty(src)], &[src])
1886+
}
1887+
1888+
pub(crate) fn vector_reduce_xor(&mut self, src: &'ll Value) -> &'ll Value {
1889+
self.call_intrinsic("llvm.vector.reduce.xor", &[self.val_ty(src)], &[src])
1890+
}
1891+
1892+
pub(crate) fn vector_reduce_fmin(&mut self, src: &'ll Value) -> &'ll Value {
1893+
self.call_intrinsic("llvm.vector.reduce.fmin", &[self.val_ty(src)], &[src])
1894+
}
1895+
1896+
pub(crate) fn vector_reduce_fmax(&mut self, src: &'ll Value) -> &'ll Value {
1897+
self.call_intrinsic("llvm.vector.reduce.fmax", &[self.val_ty(src)], &[src])
1898+
}
1899+
1900+
pub(crate) fn vector_reduce_min(&mut self, src: &'ll Value, is_signed: bool) -> &'ll Value {
1901+
self.call_intrinsic(
1902+
if is_signed { "llvm.vector.reduce.smin" } else { "llvm.vector.reduce.umin" },
1903+
&[self.val_ty(src)],
1904+
&[src],
1905+
)
1906+
}
1907+
1908+
pub(crate) fn vector_reduce_max(&mut self, src: &'ll Value, is_signed: bool) -> &'ll Value {
1909+
self.call_intrinsic(
1910+
if is_signed { "llvm.vector.reduce.smax" } else { "llvm.vector.reduce.umax" },
1911+
&[self.val_ty(src)],
1912+
&[src],
1913+
)
1914+
}
1915+
}

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)