about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/errors.rs
diff options
context:
space:
mode:
authorTrevor Gross <t.gross35@gmail.com>2024-10-11 23:57:44 -0400
committerGitHub <noreply@github.com>2024-10-11 23:57:44 -0400
commit3f9aa50b70e8833656d557aa963e339faca0a4c6 (patch)
treebb838846810b68bd96127303c82deb61c40fa8ae /compiler/rustc_parse/src/errors.rs
parentfb20e4d3b96d1de459d086980a8b99d5060ad9fe (diff)
parent0d8a978e8a55b08778ec6ee861c2c5ed6703eb6c (diff)
downloadrust-3f9aa50b70e8833656d557aa963e339faca0a4c6.tar.gz
rust-3f9aa50b70e8833656d557aa963e339faca0a4c6.zip
Rollup merge of #124874 - jedbrown:float-mul-add-fast, r=saethlin
intrinsics fmuladdf{32,64}: expose llvm.fmuladd.* semantics

Add intrinsics `fmuladd{f32,f64}`. This computes `(a * b) + c`, to be fused if the code generator determines that (i) the target instruction set has support for a fused operation, and (ii) that the fused operation is more efficient than the equivalent, separate pair of `mul` and `add` instructions.

https://llvm.org/docs/LangRef.html#llvm-fmuladd-intrinsic

The codegen_cranelift uses the `fma` function from libc, which is a correct implementation, but without the desired performance semantic. I think this requires an update to cranelift to expose a suitable instruction in its IR.

I have not tested with codegen_gcc, but it should behave the same way (using `fma` from libc).

---
This topic has been discussed a few times on Zulip and was suggested, for example, by `@workingjubilee` in [Effect of fma disabled](https://rust-lang.zulipchat.com/#narrow/stream/122651-general/topic/Effect.20of.20fma.20disabled/near/274179331).
Diffstat (limited to 'compiler/rustc_parse/src/errors.rs')
0 files changed, 0 insertions, 0 deletions