rust/compiler/rustc_codegen_llvm/src
Matthias Krüger 54a5a49af0
Rollup merge of #122322 - Zalathar:branch, r=oli-obk
coverage: Initial support for branch coverage instrumentation

(This is a review-ready version of the changes that were drafted in #118305.)

This PR adds support for branch coverage instrumentation, gated behind the unstable flag value `-Zcoverage-options=branch`. (Coverage instrumentation must also be enabled with `-Cinstrument-coverage`.)

During THIR-to-MIR lowering (MIR building), if branch coverage is enabled, we collect additional information about branch conditions and their corresponding then/else blocks. We inject special marker statements into those blocks, so that the `InstrumentCoverage` MIR pass can reliably identify them even after the initially-built MIR has been simplified and renumbered.

The rest of the changes are mostly just plumbing needed to gather up the information that was collected during MIR building, and include it in the coverage metadata that we embed in the final binary.

Note that `llvm-cov show` doesn't print branch coverage information in its source views by default; that needs to be explicitly enabled with `--show-branches=count` or similar.

---

The current implementation doesn't have any support for instrumenting `if let` or let-chains. I think it's still useful without that, and adding it would be non-trivial, so I'm happy to leave that for future work.
2024-03-14 20:00:19 +01:00
..
back Add arm64ec-pc-windows-msvc target 2024-03-06 17:49:37 -08:00
coverageinfo coverage: Include recorded branch info in coverage instrumentation 2024-03-14 17:19:02 +11:00
debuginfo Ensure nested allocations in statics do not get deduplicated 2024-03-12 05:53:46 +00:00
llvm Fix 32-bit overflows in LLVM composite constants 2024-03-10 17:54:55 -04:00
abi.rs copy byval argument to alloca if alignment is insufficient 2024-03-11 09:38:54 -04:00
allocator.rs Add -Zuse-sync-unwind 2023-12-31 15:27:43 +08:00
asm.rs Add assertions and clarify asm-goto with noreturn 2024-02-24 19:49:16 +00:00
attributes.rs is_closure_like 2024-02-11 22:09:52 +00:00
base.rs compiler: replace cstr macro with c str literals in compiler and few other c str replacements 2023-12-03 14:54:09 +03:00
builder.rs Sink ptrtoint for RMW ops on pointers to cg_llvm 2024-03-09 10:08:53 -05:00
callee.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
common.rs Fix 32-bit overflows in LLVM composite constants 2024-03-10 17:54:55 -04:00
consts.rs Some comment nits 2024-03-12 08:51:20 +00:00
context.rs Rollup merge of #122166 - beetrees:remove-field-remapping, r=davidtwco 2024-03-11 09:29:36 -07:00
declare.rs Add unstable -Zdefault-hidden-visibility cmdline flag for rustc. 2023-12-13 21:14:23 +00:00
errors.rs Rename IntoDiagnostic as Diagnostic. 2024-03-11 09:15:09 +11:00
intrinsic.rs Rollup merge of #119365 - nbdd0121:asm-goto, r=Amanieu 2024-03-08 08:19:17 +01:00
lib.rs compiler: use addr_of! 2024-02-24 18:53:48 +03:00
llvm_util.rs Rollup merge of #121438 - coolreader18:wasm32-panic-unwind, r=cuviper 2024-03-11 09:29:34 -07:00
mono_item.rs Some comment nits 2024-03-12 08:51:20 +00:00
type_.rs Fix 32-bit overflows in LLVM composite constants 2024-03-10 17:54:55 -04:00
type_of.rs Remove the unused field_remapping field from TypeLowering 2024-03-08 03:42:47 +00:00
va_arg.rs Add arm64ec-pc-windows-msvc target 2024-03-06 17:49:37 -08:00
value.rs mv compiler to compiler/ 2020-08-30 18:45:07 +03:00