rust/src/rustllvm
Ralf Jung 1dc6c3c4ad
Rollup merge of #73011 - richkadel:llvm-count-from-mir-pass, r=tmandry
first stage of implementing LLVM code coverage

This PR replaces #70680 (WIP toward LLVM Code Coverage for Rust) since I am re-implementing the Rust LLVM code coverage feature in a different part of the compiler (in MIR pass(es) vs AST).

This PR updates rustc with `-Zinstrument-coverage` option that injects the llvm intrinsic `instrprof.increment()` for code generation.

This initial version only injects counters at the top of each function, and does not yet implement the required coverage map.

Upcoming PRs will add the coverage map, and add more counters and/or counter expressions for each conditional code branch.

Rust compiler MCP https://github.com/rust-lang/compiler-team/issues/278
Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation

***[I put together some development notes here, under a separate branch.](cfa0b21d34/src/test/codegen/coverage-experiments/README-THIS-IS-TEMPORARY.md)***
2020-06-19 14:29:20 +02:00
..
.editorconfig Add .editorconfig to src/rustllvm 2017-06-30 23:13:40 +03:00
ArchiveWrapper.cpp Properly use the darwin archive format on Apple targets 2020-02-12 12:06:14 +01:00
Linker.cpp Handle removal of llvm::make_unique() 2020-01-07 21:28:22 +01:00
PassWrapper.cpp add blank line bw sections 2020-06-17 10:31:46 +05:30
README audit LLVM C++ types in ArchiveWrapper and PassWrapper 2016-08-03 15:08:47 +03:00
rustllvm.h Implement asm! codegen 2020-05-18 14:41:32 +01:00
RustWrapper.cpp [WIP] injects llvm intrinsic instrprof.increment for coverage reports 2020-06-15 16:50:10 -07:00

This directory currently contains some LLVM support code. This will generally
be sent upstream to LLVM in time; for now it lives here.

NOTE: the LLVM C++ ABI is subject to between-version breakage and must *never*
be exposed to Rust. To allow for easy auditing of that, all Rust-exposed types
must be typedef-ed as "LLVMXyz", or "LLVMRustXyz" if they were defined here.

Functions that return a failure status and leave the error in
the LLVM last error should return an LLVMRustResult rather than an
int or anything to avoid confusion.

When translating enums, add a single `Other` variant as the first
one to allow for new variants to be added. It should abort when used
as an input.

All other types must not be typedef-ed as such.