-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #74821 - oli-obk:const_eval_read_uninit_fast_path, r=we…
…sleywiser Check whether locals are too large instead of whether accesses into them are too large Essentially this stops const prop from attempting to optimize ```rust let mut x = [0_u8; 5000]; x[42] = 3; ``` I don't expect this to be a perf improvement without #73656 (which is also where the lack of this PR will be a perf regression). r? @wesleywiser
- Loading branch information
Showing
8 changed files
with
266 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
85 changes: 85 additions & 0 deletions
85
src/test/mir-opt/const_prop/large_array_index.main.ConstProp.diff.32bit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
- // MIR for `main` before ConstProp | ||
+ // MIR for `main` after ConstProp | ||
|
||
fn main() -> () { | ||
let mut _0: (); // return place in scope 0 at $DIR/large_array_index.rs:4:11: 4:11 | ||
let _1: u8; // in scope 0 at $DIR/large_array_index.rs:6:9: 6:10 | ||
let mut _2: [u8; 5000]; // in scope 0 at $DIR/large_array_index.rs:6:17: 6:29 | ||
let _3: usize; // in scope 0 at $DIR/large_array_index.rs:6:30: 6:31 | ||
let mut _4: usize; // in scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
let mut _5: bool; // in scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
scope 1 { | ||
debug x => _1; // in scope 1 at $DIR/large_array_index.rs:6:9: 6:10 | ||
} | ||
|
||
bb0: { | ||
StorageLive(_1); // scope 0 at $DIR/large_array_index.rs:6:9: 6:10 | ||
StorageLive(_2); // scope 0 at $DIR/large_array_index.rs:6:17: 6:29 | ||
_2 = [const 0_u8; 5000]; // scope 0 at $DIR/large_array_index.rs:6:17: 6:29 | ||
// ty::Const | ||
// + ty: u8 | ||
// + val: Value(Scalar(0x00)) | ||
// mir::Constant | ||
// + span: $DIR/large_array_index.rs:6:18: 6:22 | ||
// + literal: Const { ty: u8, val: Value(Scalar(0x00)) } | ||
StorageLive(_3); // scope 0 at $DIR/large_array_index.rs:6:30: 6:31 | ||
_3 = const 2_usize; // scope 0 at $DIR/large_array_index.rs:6:30: 6:31 | ||
// ty::Const | ||
// + ty: usize | ||
// + val: Value(Scalar(0x00000002)) | ||
// mir::Constant | ||
// + span: $DIR/large_array_index.rs:6:30: 6:31 | ||
// + literal: Const { ty: usize, val: Value(Scalar(0x00000002)) } | ||
_4 = const 5000_usize; // scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
// ty::Const | ||
// + ty: usize | ||
// + val: Value(Scalar(0x00001388)) | ||
// mir::Constant | ||
// + span: $DIR/large_array_index.rs:6:17: 6:32 | ||
// + literal: Const { ty: usize, val: Value(Scalar(0x00001388)) } | ||
- _5 = Lt(_3, _4); // scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
- assert(move _5, "index out of bounds: the len is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
+ _5 = const true; // scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
+ // ty::Const | ||
+ // + ty: bool | ||
+ // + val: Value(Scalar(0x01)) | ||
+ // mir::Constant | ||
+ // + span: $DIR/large_array_index.rs:6:17: 6:32 | ||
+ // + literal: Const { ty: bool, val: Value(Scalar(0x01)) } | ||
+ assert(const true, "index out of bounds: the len is {} but the index is {}", const 5000_usize, const 2_usize) -> bb1; // scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
+ // ty::Const | ||
+ // + ty: bool | ||
+ // + val: Value(Scalar(0x01)) | ||
+ // mir::Constant | ||
+ // + span: $DIR/large_array_index.rs:6:17: 6:32 | ||
+ // + literal: Const { ty: bool, val: Value(Scalar(0x01)) } | ||
+ // ty::Const | ||
+ // + ty: usize | ||
+ // + val: Value(Scalar(0x00001388)) | ||
+ // mir::Constant | ||
+ // + span: $DIR/large_array_index.rs:6:17: 6:32 | ||
+ // + literal: Const { ty: usize, val: Value(Scalar(0x00001388)) } | ||
+ // ty::Const | ||
+ // + ty: usize | ||
+ // + val: Value(Scalar(0x00000002)) | ||
+ // mir::Constant | ||
+ // + span: $DIR/large_array_index.rs:6:17: 6:32 | ||
+ // + literal: Const { ty: usize, val: Value(Scalar(0x00000002)) } | ||
} | ||
|
||
bb1: { | ||
_1 = _2[_3]; // scope 0 at $DIR/large_array_index.rs:6:17: 6:32 | ||
StorageDead(_3); // scope 0 at $DIR/large_array_index.rs:6:32: 6:33 | ||
StorageDead(_2); // scope 0 at $DIR/large_array_index.rs:6:32: 6:33 | ||
_0 = const (); // scope 0 at $DIR/large_array_index.rs:4:11: 7:2 | ||
// ty::Const | ||
// + ty: () | ||
// + val: Value(Scalar(<ZST>)) | ||
// mir::Constant | ||
// + span: $DIR/large_array_index.rs:4:11: 7:2 | ||
// + literal: Const { ty: (), val: Value(Scalar(<ZST>)) } | ||
StorageDead(_1); // scope 0 at $DIR/large_array_index.rs:7:1: 7:2 | ||
return; // scope 0 at $DIR/large_array_index.rs:7:2: 7:2 | ||
} | ||
} | ||
|
Oops, something went wrong.