os-rust/compiler/rustc_codegen_cranelift/src
Jed Brown 0d8a978e8a intrinsics.fmuladdf{16,32,64,128}: expose llvm.fmuladd.* semantics
Add intrinsics `fmuladd{f16,f32,f64,f128}`. 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

MIRI support is included for f32 and f64.

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).
2024-10-11 15:32:56 -06:00
..
abi Merge commit '6d35b4c9a04580366fd800692a5b5db79d766530' into sync_cg_clif-2024-09-22 2024-09-23 11:20:46 +00:00
debuginfo Use wide pointers consistenly across the compiler 2024-10-04 14:06:48 +02:00
driver Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
intrinsics intrinsics.fmuladdf{16,32,64,128}: expose llvm.fmuladd.* semantics 2024-10-11 15:32:56 -06:00
optimize Reformat use declarations. 2024-07-29 08:26:52 +10:00
allocator.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
analyze.rs rename AddressOf -> RawBorrow inside the compiler 2024-08-18 19:46:53 +02:00
archive.rs Always use ar_archive_writer for import libs 2024-08-17 19:10:46 +00:00
base.rs various fixes for naked_asm! implementation 2024-10-06 19:00:09 +02:00
cast.rs Merge commit '93a5433f17ab5ed48cc88f1e69b0713b16183373' into sync_cg_clif-2023-10-24 2023-10-24 12:22:23 +00:00
codegen_i128.rs Merge commit '69b3f5a426a5c1c05236a45b36f6679d95fbe01b' into sync_cg_clif-2024-08-09 2024-08-09 17:18:46 +00:00
common.rs Use wide pointers consistenly across the compiler 2024-10-04 14:06:48 +02:00
compiler_builtins.rs Merge commit '69b3f5a426a5c1c05236a45b36f6679d95fbe01b' into sync_cg_clif-2024-08-09 2024-08-09 17:18:46 +00:00
concurrency_limiter.rs Use a dedicated type instead of a reference for the diagnostic context 2024-06-18 15:42:11 +00:00
config.rs Merge commit '3270432f4b0583104c8b9b6f695bf97d6bbf3ac2' into sync_cg_clif-2024-05-13 2024-05-13 13:26:33 +00:00
constant.rs Check vtable projections for validity in miri 2024-09-23 19:38:26 -04:00
discriminant.rs cg_clif: Factor out rustc_target::abi 2024-10-08 18:24:56 -07:00
global_asm.rs Merge commit '3270432f4b0583104c8b9b6f695bf97d6bbf3ac2' into sync_cg_clif-2024-05-13 2024-05-13 13:26:33 +00:00
inline_asm.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
lib.rs cg_clif: Factor out rustc_target::abi 2024-10-08 18:24:56 -07:00
linkage.rs Sync rustc_codegen_cranelift 'ddd4ce25535cf71203ba3700896131ce55fde795' 2021-04-30 14:49:58 +02:00
main_shim.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
num.rs Remove Rvalue::CheckedBinaryOp 2024-05-17 20:33:02 -07:00
pointer.rs Merge commit '81dc066758ec150b43822d4a0c84aae20fe10f40' into sync_cg_clif-2023-10-09 2023-10-09 08:52:46 +00:00
pretty_clif.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
toolchain.rs Merge commit 'e9d1a0a7b0b28dd422f1a790ccde532acafbf193' into sync_cg_clif-2022-08-24 2022-08-24 18:40:58 +02:00
trap.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
unsize.rs Relax a debug assertion in codegen 2024-09-30 12:18:02 -04:00
unwind_module.rs Merge commit '49cd5dd454d0115cfbe9e39102a8b3ba4616aa40' into sync_cg_clif-2024-06-30 2024-06-30 11:28:14 +00:00
value_and_place.rs Auto merge of #128812 - nnethercote:shrink-TyKind-FnPtr, r=compiler-errors 2024-08-14 00:56:53 +00:00
vtable.rs Make builtin_deref just return a Ty 2024-05-09 22:55:00 -04:00