make simd_reduce_{mul,add}_unordered use only the 'reassoc' flag, not all fast-math flags
This commit is contained in:
parent
25fe3cc69d
commit
3dc631a61a
7 changed files with 30 additions and 22 deletions
|
@ -1367,17 +1367,17 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
|||
pub fn vector_reduce_fmul(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
|
||||
unsafe { llvm::LLVMRustBuildVectorReduceFMul(self.llbuilder, acc, src) }
|
||||
}
|
||||
pub fn vector_reduce_fadd_algebraic(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
|
||||
pub fn vector_reduce_fadd_reassoc(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
|
||||
unsafe {
|
||||
let instr = llvm::LLVMRustBuildVectorReduceFAdd(self.llbuilder, acc, src);
|
||||
llvm::LLVMRustSetAlgebraicMath(instr);
|
||||
llvm::LLVMRustSetAllowReassoc(instr);
|
||||
instr
|
||||
}
|
||||
}
|
||||
pub fn vector_reduce_fmul_algebraic(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
|
||||
pub fn vector_reduce_fmul_reassoc(&mut self, acc: &'ll Value, src: &'ll Value) -> &'ll Value {
|
||||
unsafe {
|
||||
let instr = llvm::LLVMRustBuildVectorReduceFMul(self.llbuilder, acc, src);
|
||||
llvm::LLVMRustSetAlgebraicMath(instr);
|
||||
llvm::LLVMRustSetAllowReassoc(instr);
|
||||
instr
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1880,14 +1880,14 @@ fn generic_simd_intrinsic<'ll, 'tcx>(
|
|||
arith_red!(simd_reduce_mul_ordered: vector_reduce_mul, vector_reduce_fmul, true, mul, 1.0);
|
||||
arith_red!(
|
||||
simd_reduce_add_unordered: vector_reduce_add,
|
||||
vector_reduce_fadd_algebraic,
|
||||
vector_reduce_fadd_reassoc,
|
||||
false,
|
||||
add,
|
||||
0.0
|
||||
);
|
||||
arith_red!(
|
||||
simd_reduce_mul_unordered: vector_reduce_mul,
|
||||
vector_reduce_fmul_algebraic,
|
||||
vector_reduce_fmul_reassoc,
|
||||
false,
|
||||
mul,
|
||||
1.0
|
||||
|
|
|
@ -1619,6 +1619,7 @@ extern "C" {
|
|||
|
||||
pub fn LLVMRustSetFastMath(Instr: &Value);
|
||||
pub fn LLVMRustSetAlgebraicMath(Instr: &Value);
|
||||
pub fn LLVMRustSetAllowReassoc(Instr: &Value);
|
||||
|
||||
// Miscellaneous instructions
|
||||
pub fn LLVMRustGetInstrProfIncrementIntrinsic(M: &Module) -> &Value;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue