added test, Operand::const_from_scalar, require_lang_item, & comments
Addresses feedback from @oli-obk (Thanks!)
This commit is contained in:
parent
46ebd57c42
commit
20aba8f634
6 changed files with 186 additions and 37 deletions
19
src/test/mir-opt/instrument_coverage.rs
Normal file
19
src/test/mir-opt/instrument_coverage.rs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
// Test that the initial version of Rust coverage injects count_code_region() placeholder calls,
|
||||
// at the top of each function. The placeholders are later converted into LLVM instrprof.increment
|
||||
// intrinsics, during codegen.
|
||||
|
||||
// compile-flags: -Zinstrument-coverage
|
||||
// EMIT_MIR rustc.main.InstrumentCoverage.diff
|
||||
// EMIT_MIR rustc.bar.InstrumentCoverage.diff
|
||||
fn main() {
|
||||
loop {
|
||||
if bar() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(never)]
|
||||
fn bar() -> bool {
|
||||
true
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
- // MIR for `bar` before InstrumentCoverage
|
||||
+ // MIR for `bar` after InstrumentCoverage
|
||||
|
||||
fn bar() -> bool {
|
||||
let mut _0: bool; // return place in scope 0 at $DIR/instrument_coverage.rs:17:13: 17:17
|
||||
+ let mut _1: (); // in scope 0 at $DIR/instrument_coverage.rs:17:1: 19:2
|
||||
|
||||
bb0: {
|
||||
+ StorageLive(_1); // scope 0 at $DIR/instrument_coverage.rs:17:1: 19:2
|
||||
+ _1 = const std::intrinsics::count_code_region(const 0u32) -> bb2; // scope 0 at $DIR/instrument_coverage.rs:17:1: 19:2
|
||||
+ // ty::Const
|
||||
+ // + ty: unsafe extern "rust-intrinsic" fn(u32) {std::intrinsics::count_code_region}
|
||||
+ // + val: Value(Scalar(<ZST>))
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/instrument_coverage.rs:17:1: 17:1
|
||||
+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u32) {std::intrinsics::count_code_region}, val: Value(Scalar(<ZST>)) }
|
||||
+ // ty::Const
|
||||
+ // + ty: u32
|
||||
+ // + val: Value(Scalar(0x00000000))
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/instrument_coverage.rs:17:1: 17:1
|
||||
+ // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
|
||||
+ }
|
||||
+
|
||||
+ bb1 (cleanup): {
|
||||
+ resume; // scope 0 at $DIR/instrument_coverage.rs:17:1: 19:2
|
||||
+ }
|
||||
+
|
||||
+ bb2: {
|
||||
+ StorageDead(_1); // scope 0 at $DIR/instrument_coverage.rs:18:5: 18:9
|
||||
_0 = const true; // scope 0 at $DIR/instrument_coverage.rs:18:5: 18:9
|
||||
// ty::Const
|
||||
// + ty: bool
|
||||
// + val: Value(Scalar(0x01))
|
||||
// mir::Constant
|
||||
// + span: $DIR/instrument_coverage.rs:18:5: 18:9
|
||||
// + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
|
||||
return; // scope 0 at $DIR/instrument_coverage.rs:19:2: 19:2
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
- // MIR for `main` before InstrumentCoverage
|
||||
+ // MIR for `main` after InstrumentCoverage
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/instrument_coverage.rs:8:11: 8:11
|
||||
let mut _1: (); // in scope 0 at $DIR/instrument_coverage.rs:8:1: 14:2
|
||||
let mut _2: bool; // in scope 0 at $DIR/instrument_coverage.rs:10:12: 10:17
|
||||
let mut _3: !; // in scope 0 at $DIR/instrument_coverage.rs:10:18: 12:10
|
||||
+ let mut _4: (); // in scope 0 at $DIR/instrument_coverage.rs:8:1: 14:2
|
||||
|
||||
bb0: {
|
||||
- falseUnwind -> [real: bb1, cleanup: bb6]; // scope 0 at $DIR/instrument_coverage.rs:9:5: 13:6
|
||||
+ StorageLive(_4); // scope 0 at $DIR/instrument_coverage.rs:8:1: 14:2
|
||||
+ _4 = const std::intrinsics::count_code_region(const 0u32) -> bb7; // scope 0 at $DIR/instrument_coverage.rs:8:1: 14:2
|
||||
+ // ty::Const
|
||||
+ // + ty: unsafe extern "rust-intrinsic" fn(u32) {std::intrinsics::count_code_region}
|
||||
+ // + val: Value(Scalar(<ZST>))
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/instrument_coverage.rs:8:1: 8:1
|
||||
+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u32) {std::intrinsics::count_code_region}, val: Value(Scalar(<ZST>)) }
|
||||
+ // ty::Const
|
||||
+ // + ty: u32
|
||||
+ // + val: Value(Scalar(0x00000000))
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/instrument_coverage.rs:8:1: 8:1
|
||||
+ // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageLive(_2); // scope 0 at $DIR/instrument_coverage.rs:10:12: 10:17
|
||||
_2 = const bar() -> [return: bb2, unwind: bb6]; // scope 0 at $DIR/instrument_coverage.rs:10:12: 10:17
|
||||
// ty::Const
|
||||
// + ty: fn() -> bool {bar}
|
||||
// + val: Value(Scalar(<ZST>))
|
||||
// mir::Constant
|
||||
// + span: $DIR/instrument_coverage.rs:10:12: 10:15
|
||||
// + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) }
|
||||
}
|
||||
|
||||
bb2: {
|
||||
FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/instrument_coverage.rs:10:12: 10:17
|
||||
switchInt(_2) -> [false: bb4, otherwise: bb3]; // scope 0 at $DIR/instrument_coverage.rs:10:9: 12:10
|
||||
}
|
||||
|
||||
bb3: {
|
||||
falseEdges -> [real: bb5, imaginary: bb4]; // scope 0 at $DIR/instrument_coverage.rs:10:9: 12:10
|
||||
}
|
||||
|
||||
bb4: {
|
||||
_1 = const (); // scope 0 at $DIR/instrument_coverage.rs:10:9: 12:10
|
||||
// ty::Const
|
||||
// + ty: ()
|
||||
// + val: Value(Scalar(<ZST>))
|
||||
// mir::Constant
|
||||
// + span: $DIR/instrument_coverage.rs:10:9: 12:10
|
||||
// + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
|
||||
StorageDead(_2); // scope 0 at $DIR/instrument_coverage.rs:13:5: 13:6
|
||||
goto -> bb0; // scope 0 at $DIR/instrument_coverage.rs:9:5: 13:6
|
||||
}
|
||||
|
||||
bb5: {
|
||||
_0 = const (); // scope 0 at $DIR/instrument_coverage.rs:11:13: 11:18
|
||||
// ty::Const
|
||||
// + ty: ()
|
||||
// + val: Value(Scalar(<ZST>))
|
||||
// mir::Constant
|
||||
// + span: $DIR/instrument_coverage.rs:11:13: 11:18
|
||||
// + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
|
||||
StorageDead(_2); // scope 0 at $DIR/instrument_coverage.rs:13:5: 13:6
|
||||
return; // scope 0 at $DIR/instrument_coverage.rs:14:2: 14:2
|
||||
}
|
||||
|
||||
bb6 (cleanup): {
|
||||
resume; // scope 0 at $DIR/instrument_coverage.rs:8:1: 14:2
|
||||
+ }
|
||||
+
|
||||
+ bb7: {
|
||||
+ StorageDead(_4); // scope 0 at $DIR/instrument_coverage.rs:9:5: 13:6
|
||||
+ falseUnwind -> [real: bb1, cleanup: bb6]; // scope 0 at $DIR/instrument_coverage.rs:9:5: 13:6
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue