Fix SROA without deaggregation.
This commit is contained in:
parent
3de7d7fb22
commit
0843acbea6
10 changed files with 175 additions and 128 deletions
|
@ -2,6 +2,7 @@ use crate::MirPass;
|
||||||
use rustc_data_structures::fx::{FxIndexMap, IndexEntry};
|
use rustc_data_structures::fx::{FxIndexMap, IndexEntry};
|
||||||
use rustc_index::bit_set::BitSet;
|
use rustc_index::bit_set::BitSet;
|
||||||
use rustc_index::vec::IndexVec;
|
use rustc_index::vec::IndexVec;
|
||||||
|
use rustc_middle::mir::patch::MirPatch;
|
||||||
use rustc_middle::mir::visit::*;
|
use rustc_middle::mir::visit::*;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
|
@ -13,7 +14,9 @@ impl<'tcx> MirPass<'tcx> for ScalarReplacementOfAggregates {
|
||||||
sess.mir_opt_level() >= 3
|
sess.mir_opt_level() >= 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip(self, tcx, body))]
|
||||||
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
||||||
|
debug!(def_id = ?body.source.def_id());
|
||||||
let escaping = escaping_locals(&*body);
|
let escaping = escaping_locals(&*body);
|
||||||
debug!(?escaping);
|
debug!(?escaping);
|
||||||
let replacements = compute_flattening(tcx, body, escaping);
|
let replacements = compute_flattening(tcx, body, escaping);
|
||||||
|
@ -69,15 +72,28 @@ fn escaping_locals(body: &Body<'_>) -> BitSet<Local> {
|
||||||
self.super_rvalue(rvalue, location)
|
self.super_rvalue(rvalue, location)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) {
|
fn visit_assign(
|
||||||
if let StatementKind::StorageLive(..)
|
&mut self,
|
||||||
| StatementKind::StorageDead(..)
|
lvalue: &Place<'tcx>,
|
||||||
| StatementKind::Deinit(..) = statement.kind
|
rvalue: &Rvalue<'tcx>,
|
||||||
{
|
location: Location,
|
||||||
// Storage statements are expanded in run_pass.
|
) {
|
||||||
|
if lvalue.as_local().is_some() && let Rvalue::Aggregate(..) = rvalue {
|
||||||
|
// Aggregate assignments are expanded in run_pass.
|
||||||
|
self.visit_rvalue(rvalue, location);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.super_statement(statement, location)
|
self.super_assign(lvalue, rvalue, location)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) {
|
||||||
|
match statement.kind {
|
||||||
|
// Storage statements are expanded in run_pass.
|
||||||
|
StatementKind::StorageLive(..)
|
||||||
|
| StatementKind::StorageDead(..)
|
||||||
|
| StatementKind::Deinit(..) => return,
|
||||||
|
_ => self.super_statement(statement, location),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location) {
|
fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location) {
|
||||||
|
@ -192,6 +208,7 @@ fn replace_flattened_locals<'tcx>(
|
||||||
replacements,
|
replacements,
|
||||||
all_dead_locals,
|
all_dead_locals,
|
||||||
fragments,
|
fragments,
|
||||||
|
patch: MirPatch::new(body),
|
||||||
};
|
};
|
||||||
for (bb, data) in body.basic_blocks.as_mut_preserves_cfg().iter_enumerated_mut() {
|
for (bb, data) in body.basic_blocks.as_mut_preserves_cfg().iter_enumerated_mut() {
|
||||||
visitor.visit_basic_block_data(bb, data);
|
visitor.visit_basic_block_data(bb, data);
|
||||||
|
@ -205,6 +222,7 @@ fn replace_flattened_locals<'tcx>(
|
||||||
for var_debug_info in &mut body.var_debug_info {
|
for var_debug_info in &mut body.var_debug_info {
|
||||||
visitor.visit_var_debug_info(var_debug_info);
|
visitor.visit_var_debug_info(var_debug_info);
|
||||||
}
|
}
|
||||||
|
visitor.patch.apply(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ReplacementVisitor<'tcx, 'll> {
|
struct ReplacementVisitor<'tcx, 'll> {
|
||||||
|
@ -218,6 +236,7 @@ struct ReplacementVisitor<'tcx, 'll> {
|
||||||
/// Pre-computed list of all "new" locals for each "old" local. This is used to expand storage
|
/// Pre-computed list of all "new" locals for each "old" local. This is used to expand storage
|
||||||
/// and deinit statement and debuginfo.
|
/// and deinit statement and debuginfo.
|
||||||
fragments: IndexVec<Local, Vec<(&'tcx [PlaceElem<'tcx>], Local)>>,
|
fragments: IndexVec<Local, Vec<(&'tcx [PlaceElem<'tcx>], Local)>>,
|
||||||
|
patch: MirPatch<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, 'll> ReplacementVisitor<'tcx, 'll> {
|
impl<'tcx, 'll> ReplacementVisitor<'tcx, 'll> {
|
||||||
|
@ -255,12 +274,63 @@ impl<'tcx, 'll> MutVisitor<'tcx> for ReplacementVisitor<'tcx, 'll> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_statement(&mut self, statement: &mut Statement<'tcx>, location: Location) {
|
fn visit_statement(&mut self, statement: &mut Statement<'tcx>, location: Location) {
|
||||||
if let StatementKind::StorageLive(..)
|
match statement.kind {
|
||||||
| StatementKind::StorageDead(..)
|
StatementKind::StorageLive(l) => {
|
||||||
| StatementKind::Deinit(..) = statement.kind
|
if self.all_dead_locals.contains(l) {
|
||||||
{
|
let final_locals = &self.fragments[l];
|
||||||
// Storage statements are expanded in run_pass.
|
for &(_, fl) in final_locals {
|
||||||
return;
|
self.patch.add_statement(location, StatementKind::StorageLive(fl));
|
||||||
|
}
|
||||||
|
statement.make_nop();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StatementKind::StorageDead(l) => {
|
||||||
|
if self.all_dead_locals.contains(l) {
|
||||||
|
let final_locals = &self.fragments[l];
|
||||||
|
for &(_, fl) in final_locals {
|
||||||
|
self.patch.add_statement(location, StatementKind::StorageDead(fl));
|
||||||
|
}
|
||||||
|
statement.make_nop();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StatementKind::Deinit(box ref place) => {
|
||||||
|
if let Some(local) = place.as_local()
|
||||||
|
&& self.all_dead_locals.contains(local)
|
||||||
|
{
|
||||||
|
let final_locals = &self.fragments[local];
|
||||||
|
for &(_, fl) in final_locals {
|
||||||
|
self.patch.add_statement(
|
||||||
|
location,
|
||||||
|
StatementKind::Deinit(Box::new(fl.into())),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
statement.make_nop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StatementKind::Assign(box (ref place, Rvalue::Aggregate(_, ref operands))) => {
|
||||||
|
if let Some(local) = place.as_local()
|
||||||
|
&& self.all_dead_locals.contains(local)
|
||||||
|
{
|
||||||
|
let final_locals = &self.fragments[local];
|
||||||
|
for &(projection, fl) in final_locals {
|
||||||
|
let &[PlaceElem::Field(index, _)] = projection else { bug!() };
|
||||||
|
let index = index.as_usize();
|
||||||
|
let rvalue = Rvalue::Use(operands[index].clone());
|
||||||
|
self.patch.add_statement(
|
||||||
|
location,
|
||||||
|
StatementKind::Assign(Box::new((fl.into(), rvalue))),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
statement.make_nop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
self.super_statement(statement, location)
|
self.super_statement(statement, location)
|
||||||
}
|
}
|
||||||
|
@ -309,39 +379,6 @@ impl<'tcx, 'll> MutVisitor<'tcx> for ReplacementVisitor<'tcx, 'll> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_basic_block_data(&mut self, bb: BasicBlock, bbdata: &mut BasicBlockData<'tcx>) {
|
|
||||||
self.super_basic_block_data(bb, bbdata);
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum Stmt {
|
|
||||||
StorageLive,
|
|
||||||
StorageDead,
|
|
||||||
Deinit,
|
|
||||||
}
|
|
||||||
|
|
||||||
bbdata.expand_statements(|stmt| {
|
|
||||||
let source_info = stmt.source_info;
|
|
||||||
let (stmt, origin_local) = match &stmt.kind {
|
|
||||||
StatementKind::StorageLive(l) => (Stmt::StorageLive, *l),
|
|
||||||
StatementKind::StorageDead(l) => (Stmt::StorageDead, *l),
|
|
||||||
StatementKind::Deinit(p) if let Some(l) = p.as_local() => (Stmt::Deinit, l),
|
|
||||||
_ => return None,
|
|
||||||
};
|
|
||||||
if !self.all_dead_locals.contains(origin_local) {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
let final_locals = self.fragments.get(origin_local)?;
|
|
||||||
Some(final_locals.iter().map(move |&(_, l)| {
|
|
||||||
let kind = match stmt {
|
|
||||||
Stmt::StorageLive => StatementKind::StorageLive(l),
|
|
||||||
Stmt::StorageDead => StatementKind::StorageDead(l),
|
|
||||||
Stmt::Deinit => StatementKind::Deinit(Box::new(l.into())),
|
|
||||||
};
|
|
||||||
Statement { source_info, kind }
|
|
||||||
}))
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_local(&mut self, local: &mut Local, _: PlaceContext, _: Location) {
|
fn visit_local(&mut self, local: &mut Local, _: PlaceContext, _: Location) {
|
||||||
assert!(!self.all_dead_locals.contains(*local));
|
assert!(!self.all_dead_locals.contains(*local));
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
let mut _6: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:15: +4:16
|
let mut _6: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:15: +4:16
|
||||||
let mut _7: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:19: +4:20
|
let mut _7: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:19: +4:20
|
||||||
let mut _8: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:23: +4:24
|
let mut _8: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:23: +4:24
|
||||||
let mut _14: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
let mut _13: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||||
let mut _15: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
let mut _14: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||||
scope 1 {
|
scope 1 {
|
||||||
- debug x => _1; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
|
- debug x => _1; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
|
||||||
+ debug x => const 1_u8; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
|
+ debug x => const 1_u8; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
|
||||||
|
@ -35,12 +35,13 @@
|
||||||
let _11: std::option::Option<u16>; // in scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
let _11: std::option::Option<u16>; // in scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||||
scope 7 {
|
scope 7 {
|
||||||
debug o => _11; // in scope 7 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
debug o => _11; // in scope 7 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||||
let _12: Point; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
let _15: u32; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||||
|
let _16: u32; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||||
scope 8 {
|
scope 8 {
|
||||||
debug p => _12; // in scope 8 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
debug p => Point{ .0 => _15, .1 => _16, }; // in scope 8 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||||
let _13: u32; // in scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
let _12: u32; // in scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||||
scope 9 {
|
scope 9 {
|
||||||
- debug a => _13; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
- debug a => _12; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||||
+ debug a => const 64_u32; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
+ debug a => const 64_u32; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,18 +71,11 @@
|
||||||
_10 = (const true, const false, const 123_u32); // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
_10 = (const true, const false, const 123_u32); // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||||
StorageLive(_11); // scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
StorageLive(_11); // scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||||
_11 = Option::<u16>::Some(const 99_u16); // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
|
_11 = Option::<u16>::Some(const 99_u16); // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
|
||||||
StorageLive(_12); // scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
_15 = const 32_u32; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||||
_12 = Point { x: const 32_u32, y: const 32_u32 }; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
_16 = const 32_u32; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||||
StorageLive(_13); // scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
StorageLive(_12); // scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||||
StorageLive(_14); // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
_12 = const 64_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:22
|
||||||
_14 = const 32_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
StorageDead(_12); // scope 8 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||||
StorageLive(_15); // scope 8 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
|
||||||
_15 = const 32_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
|
||||||
_13 = const 64_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:22
|
|
||||||
StorageDead(_15); // scope 8 at $DIR/const_debuginfo.rs:+13:21: +13:22
|
|
||||||
StorageDead(_14); // scope 8 at $DIR/const_debuginfo.rs:+13:21: +13:22
|
|
||||||
StorageDead(_13); // scope 8 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
|
||||||
StorageDead(_12); // scope 7 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
|
||||||
StorageDead(_11); // scope 6 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
StorageDead(_11); // scope 6 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||||
StorageDead(_10); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
StorageDead(_10); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||||
StorageDead(_9); // scope 4 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
StorageDead(_9); // scope 4 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||||
|
|
|
@ -4,18 +4,19 @@
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+0:11: +0:11
|
||||||
let _1: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
|
let _1: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
|
||||||
let mut _3: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
let mut _2: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
|
debug a => _1; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
|
||||||
let mut _2: (i32, i32); // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
let mut _5: i32; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||||
|
let mut _6: i32; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||||
scope 2 {
|
scope 2 {
|
||||||
debug x => _2; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
debug x => (i32, i32){ .1 => _5, .0 => _6, }; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||||
let _4: i32; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
let _3: i32; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||||
scope 3 {
|
scope 3 {
|
||||||
debug y => _4; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
debug y => _3; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||||
let _5: i32; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
let _4: i32; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||||
scope 4 {
|
scope 4 {
|
||||||
debug z => _5; // in scope 4 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
debug z => _6; // in scope 4 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,21 +31,17 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
StorageLive(_2); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
StorageLive(_5); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||||
- _2 = (const 1_i32, const 2_i32); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
_5 = const 2_i32; // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||||
+ _2 = const (1_i32, 2_i32); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
_6 = const 1_i32; // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||||
StorageLive(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
StorageLive(_2); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||||
_3 = _1; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
_2 = _1; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||||
(_2.1: i32) = move _3; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:5: +3:12
|
_5 = move _2; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:5: +3:12
|
||||||
StorageDead(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
StorageDead(_2); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||||
StorageLive(_4); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
StorageLive(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||||
_4 = (_2.1: i32); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:13: +4:16
|
_3 = _5; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:13: +4:16
|
||||||
StorageLive(_5); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
StorageDead(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||||
- _5 = (_2.0: i32); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
|
StorageDead(_5); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||||
+ _5 = const 1_i32; // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
|
|
||||||
StorageDead(_5); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
|
||||||
StorageDead(_4); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
|
||||||
StorageDead(_2); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
StorageDead(_1); // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||||
return; // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:2: +6:2
|
return; // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:2: +6:2
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
|
let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
|
||||||
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||||
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||||
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
let mut _9: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
debug y => _3; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
debug y => _3; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
let _8: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
let _8: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||||
scope 3 {
|
scope 3 {
|
||||||
debug z => _8; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
debug z => _9; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,13 +50,7 @@
|
||||||
+ _3 = const 3_i32; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
+ _3 = const 3_i32; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||||
StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||||
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||||
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
_9 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
|
||||||
_9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
|
||||||
- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
|
||||||
+ _8 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
|
||||||
StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
|
||||||
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
|
||||||
StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
|
return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
|
||||||
let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
|
let mut _3: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
let _2: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
let _2: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
scope 2 {
|
scope 2 {
|
||||||
debug y => _2; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
debug y => _2; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
let _3: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
|
||||||
scope 3 {
|
scope 3 {
|
||||||
debug z => _3; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
debug z => _3; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,6 @@ fn main() -> () {
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
StorageLive(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
StorageLive(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
StorageLive(_3); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
|
||||||
StorageDead(_3); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
|
||||||
StorageDead(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
|
return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||||
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||||
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
|
+ let mut _10: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
|
@ -45,10 +46,17 @@
|
||||||
StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||||
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||||
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||||
StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
- StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
_9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
- _9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
_8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||||
StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
- StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||||
|
+ StorageLive(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
|
+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
|
+ _10 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
|
+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
|
+ _8 = _10; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||||
|
+ StorageDead(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||||
|
+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||||
nop; // scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +4:2
|
nop; // scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +4:2
|
||||||
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
|
||||||
let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
|
let mut _3: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
let _2: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
let _2: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
scope 2 {
|
scope 2 {
|
||||||
debug y => _2; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
debug y => _2; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
let _3: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
|
||||||
scope 3 {
|
scope 3 {
|
||||||
debug z => _3; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
debug z => _3; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,6 @@ fn main() -> () {
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||||
StorageLive(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
StorageLive(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||||
StorageLive(_3); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
|
||||||
StorageDead(_3); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
|
||||||
StorageDead(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_2); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||||
return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
|
return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
|
||||||
|
|
|
@ -4,25 +4,22 @@ fn ezmap(_1: Option<i32>) -> Option<i32> {
|
||||||
debug x => _1; // in scope 0 at $DIR/simple_option_map_e2e.rs:+0:14: +0:15
|
debug x => _1; // in scope 0 at $DIR/simple_option_map_e2e.rs:+0:14: +0:15
|
||||||
let mut _0: std::option::Option<i32>; // return place in scope 0 at $DIR/simple_option_map_e2e.rs:+0:33: +0:44
|
let mut _0: std::option::Option<i32>; // return place in scope 0 at $DIR/simple_option_map_e2e.rs:+0:33: +0:44
|
||||||
let mut _2: [closure@$DIR/simple_option_map_e2e.rs:14:12: 14:15]; // in scope 0 at $DIR/simple_option_map_e2e.rs:+1:12: +1:21
|
let mut _2: [closure@$DIR/simple_option_map_e2e.rs:14:12: 14:15]; // in scope 0 at $DIR/simple_option_map_e2e.rs:+1:12: +1:21
|
||||||
let mut _7: i32; // in scope 0 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
|
||||||
scope 1 (inlined map::<i32, i32, [closure@$DIR/simple_option_map_e2e.rs:14:12: 14:15]>) { // at $DIR/simple_option_map_e2e.rs:14:5: 14:22
|
scope 1 (inlined map::<i32, i32, [closure@$DIR/simple_option_map_e2e.rs:14:12: 14:15]>) { // at $DIR/simple_option_map_e2e.rs:14:5: 14:22
|
||||||
debug slf => _1; // in scope 1 at $DIR/simple_option_map_e2e.rs:2:17: 2:20
|
debug slf => _1; // in scope 1 at $DIR/simple_option_map_e2e.rs:2:17: 2:20
|
||||||
debug f => _2; // in scope 1 at $DIR/simple_option_map_e2e.rs:2:33: 2:34
|
debug f => _2; // in scope 1 at $DIR/simple_option_map_e2e.rs:2:33: 2:34
|
||||||
let mut _3: isize; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:9: 7:16
|
let mut _3: isize; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:9: 7:16
|
||||||
let _4: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
let _4: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||||
let mut _5: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
let mut _5: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||||
let mut _6: (i32,); // in scope 1 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
|
||||||
scope 2 {
|
scope 2 {
|
||||||
debug x => _4; // in scope 2 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
debug x => _4; // in scope 2 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||||
scope 3 (inlined ezmap::{closure#0}) { // at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
scope 3 (inlined ezmap::{closure#0}) { // at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||||
debug n => _7; // in scope 3 at $DIR/simple_option_map_e2e.rs:+1:13: +1:14
|
debug n => _4; // in scope 3 at $DIR/simple_option_map_e2e.rs:+1:13: +1:14
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_2); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:12: +1:21
|
StorageLive(_2); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:12: +1:21
|
||||||
StorageLive(_4); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:5: +1:22
|
|
||||||
_3 = discriminant(_1); // scope 1 at $DIR/simple_option_map_e2e.rs:6:11: 6:14
|
_3 = discriminant(_1); // scope 1 at $DIR/simple_option_map_e2e.rs:6:11: 6:14
|
||||||
switchInt(move _3) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 1 at $DIR/simple_option_map_e2e.rs:6:5: 6:14
|
switchInt(move _3) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 1 at $DIR/simple_option_map_e2e.rs:6:5: 6:14
|
||||||
}
|
}
|
||||||
|
@ -39,20 +36,13 @@ fn ezmap(_1: Option<i32>) -> Option<i32> {
|
||||||
bb3: {
|
bb3: {
|
||||||
_4 = move ((_1 as Some).0: i32); // scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
_4 = move ((_1 as Some).0: i32); // scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||||
StorageLive(_5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
StorageLive(_5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||||
StorageLive(_6); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
_5 = Add(_4, const 1_i32); // scope 3 at $DIR/simple_option_map_e2e.rs:+1:16: +1:21
|
||||||
_6 = (move _4,); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
|
||||||
StorageLive(_7); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
|
||||||
_7 = move (_6.0: i32); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
|
||||||
_5 = Add(_7, const 1_i32); // scope 3 at $DIR/simple_option_map_e2e.rs:+1:16: +1:21
|
|
||||||
StorageDead(_7); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
|
||||||
StorageDead(_6); // scope 2 at $DIR/simple_option_map_e2e.rs:7:28: 7:29
|
|
||||||
_0 = Option::<i32>::Some(move _5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:20: 7:30
|
_0 = Option::<i32>::Some(move _5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:20: 7:30
|
||||||
StorageDead(_5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:29: 7:30
|
StorageDead(_5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:29: 7:30
|
||||||
goto -> bb4; // scope 1 at $DIR/simple_option_map_e2e.rs:10:1: 10:2
|
goto -> bb4; // scope 1 at $DIR/simple_option_map_e2e.rs:10:1: 10:2
|
||||||
}
|
}
|
||||||
|
|
||||||
bb4: {
|
bb4: {
|
||||||
StorageDead(_4); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:5: +1:22
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:21: +1:22
|
StorageDead(_2); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:21: +1:22
|
||||||
return; // scope 0 at $DIR/simple_option_map_e2e.rs:+2:2: +2:2
|
return; // scope 0 at $DIR/simple_option_map_e2e.rs:+2:2: +2:2
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,10 @@
|
||||||
let mut _5: Foo; // in scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
let mut _5: Foo; // in scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
let mut _6: (); // in scope 0 at $DIR/sroa.rs:+1:45: +1:47
|
let mut _6: (); // in scope 0 at $DIR/sroa.rs:+1:45: +1:47
|
||||||
let mut _7: std::option::Option<isize>; // in scope 0 at $DIR/sroa.rs:+1:60: +1:68
|
let mut _7: std::option::Option<isize>; // in scope 0 at $DIR/sroa.rs:+1:60: +1:68
|
||||||
|
+ let mut _8: u8; // in scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ let mut _9: (); // in scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ let mut _10: &str; // in scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ let mut _11: std::option::Option<isize>; // in scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/sroa.rs:+1:15: +1:16
|
debug a => _1; // in scope 1 at $DIR/sroa.rs:+1:15: +1:16
|
||||||
debug b => _2; // in scope 1 at $DIR/sroa.rs:+1:18: +1:19
|
debug b => _2; // in scope 1 at $DIR/sroa.rs:+1:18: +1:19
|
||||||
|
@ -26,26 +30,45 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_5); // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
- StorageLive(_5); // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ StorageLive(_8); // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ StorageLive(_9); // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ StorageLive(_10); // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ StorageLive(_11); // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ nop; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
StorageLive(_6); // scope 0 at $DIR/sroa.rs:+1:45: +1:47
|
StorageLive(_6); // scope 0 at $DIR/sroa.rs:+1:45: +1:47
|
||||||
_6 = (); // scope 0 at $DIR/sroa.rs:+1:45: +1:47
|
_6 = (); // scope 0 at $DIR/sroa.rs:+1:45: +1:47
|
||||||
StorageLive(_7); // scope 0 at $DIR/sroa.rs:+1:60: +1:68
|
StorageLive(_7); // scope 0 at $DIR/sroa.rs:+1:60: +1:68
|
||||||
_7 = Option::<isize>::Some(const -4_isize); // scope 0 at $DIR/sroa.rs:+1:60: +1:68
|
_7 = Option::<isize>::Some(const -4_isize); // scope 0 at $DIR/sroa.rs:+1:60: +1:68
|
||||||
_5 = Foo { a: const 5_u8, b: move _6, c: const "a", d: move _7 }; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
- _5 = Foo { a: const 5_u8, b: move _6, c: const "a", d: move _7 }; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ _8 = const 5_u8; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ _9 = move _6; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ _10 = const "a"; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/sroa.rs:57:52: 57:55
|
// + span: $DIR/sroa.rs:57:52: 57:55
|
||||||
// + literal: Const { ty: &str, val: Value(Slice(..)) }
|
// + literal: Const { ty: &str, val: Value(Slice(..)) }
|
||||||
|
+ _11 = move _7; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
|
+ nop; // scope 0 at $DIR/sroa.rs:+1:30: +1:70
|
||||||
StorageDead(_7); // scope 0 at $DIR/sroa.rs:+1:69: +1:70
|
StorageDead(_7); // scope 0 at $DIR/sroa.rs:+1:69: +1:70
|
||||||
StorageDead(_6); // scope 0 at $DIR/sroa.rs:+1:69: +1:70
|
StorageDead(_6); // scope 0 at $DIR/sroa.rs:+1:69: +1:70
|
||||||
StorageLive(_1); // scope 0 at $DIR/sroa.rs:+1:15: +1:16
|
StorageLive(_1); // scope 0 at $DIR/sroa.rs:+1:15: +1:16
|
||||||
_1 = (_5.0: u8); // scope 0 at $DIR/sroa.rs:+1:15: +1:16
|
- _1 = (_5.0: u8); // scope 0 at $DIR/sroa.rs:+1:15: +1:16
|
||||||
|
+ _1 = _8; // scope 0 at $DIR/sroa.rs:+1:15: +1:16
|
||||||
StorageLive(_2); // scope 0 at $DIR/sroa.rs:+1:18: +1:19
|
StorageLive(_2); // scope 0 at $DIR/sroa.rs:+1:18: +1:19
|
||||||
_2 = (_5.1: ()); // scope 0 at $DIR/sroa.rs:+1:18: +1:19
|
- _2 = (_5.1: ()); // scope 0 at $DIR/sroa.rs:+1:18: +1:19
|
||||||
|
+ _2 = _9; // scope 0 at $DIR/sroa.rs:+1:18: +1:19
|
||||||
StorageLive(_3); // scope 0 at $DIR/sroa.rs:+1:21: +1:22
|
StorageLive(_3); // scope 0 at $DIR/sroa.rs:+1:21: +1:22
|
||||||
_3 = (_5.2: &str); // scope 0 at $DIR/sroa.rs:+1:21: +1:22
|
- _3 = (_5.2: &str); // scope 0 at $DIR/sroa.rs:+1:21: +1:22
|
||||||
|
+ _3 = _10; // scope 0 at $DIR/sroa.rs:+1:21: +1:22
|
||||||
StorageLive(_4); // scope 0 at $DIR/sroa.rs:+1:24: +1:25
|
StorageLive(_4); // scope 0 at $DIR/sroa.rs:+1:24: +1:25
|
||||||
_4 = (_5.3: std::option::Option<isize>); // scope 0 at $DIR/sroa.rs:+1:24: +1:25
|
- _4 = (_5.3: std::option::Option<isize>); // scope 0 at $DIR/sroa.rs:+1:24: +1:25
|
||||||
StorageDead(_5); // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
- StorageDead(_5); // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
||||||
|
+ _4 = _11; // scope 0 at $DIR/sroa.rs:+1:24: +1:25
|
||||||
|
+ StorageDead(_8); // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
||||||
|
+ StorageDead(_9); // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
||||||
|
+ StorageDead(_10); // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
||||||
|
+ StorageDead(_11); // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
||||||
|
+ nop; // scope 0 at $DIR/sroa.rs:+1:70: +1:71
|
||||||
_0 = const (); // scope 0 at $DIR/sroa.rs:+0:15: +6:2
|
_0 = const (); // scope 0 at $DIR/sroa.rs:+0:15: +6:2
|
||||||
StorageDead(_4); // scope 0 at $DIR/sroa.rs:+6:1: +6:2
|
StorageDead(_4); // scope 0 at $DIR/sroa.rs:+6:1: +6:2
|
||||||
StorageDead(_3); // scope 0 at $DIR/sroa.rs:+6:1: +6:2
|
StorageDead(_3); // scope 0 at $DIR/sroa.rs:+6:1: +6:2
|
||||||
|
|
|
@ -6,15 +6,23 @@
|
||||||
let mut _0: f32; // return place in scope 0 at $DIR/sroa.rs:+0:27: +0:30
|
let mut _0: f32; // return place in scope 0 at $DIR/sroa.rs:+0:27: +0:30
|
||||||
let mut _2: structs::U; // in scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
let mut _2: structs::U; // in scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
let mut _3: f32; // in scope 0 at $DIR/sroa.rs:+6:18: +6:19
|
let mut _3: f32; // in scope 0 at $DIR/sroa.rs:+6:18: +6:19
|
||||||
|
+ let mut _4: f32; // in scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_2); // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
- StorageLive(_2); // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
|
+ StorageLive(_4); // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
|
+ nop; // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
StorageLive(_3); // scope 0 at $DIR/sroa.rs:+6:18: +6:19
|
StorageLive(_3); // scope 0 at $DIR/sroa.rs:+6:18: +6:19
|
||||||
_3 = _1; // scope 0 at $DIR/sroa.rs:+6:18: +6:19
|
_3 = _1; // scope 0 at $DIR/sroa.rs:+6:18: +6:19
|
||||||
_2 = U { _foo: const 0_usize, a: move _3 }; // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
- _2 = U { _foo: const 0_usize, a: move _3 }; // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
|
+ _4 = move _3; // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
|
+ nop; // scope 0 at $DIR/sroa.rs:+6:5: +6:21
|
||||||
StorageDead(_3); // scope 0 at $DIR/sroa.rs:+6:20: +6:21
|
StorageDead(_3); // scope 0 at $DIR/sroa.rs:+6:20: +6:21
|
||||||
_0 = (_2.1: f32); // scope 0 at $DIR/sroa.rs:+6:5: +6:23
|
- _0 = (_2.1: f32); // scope 0 at $DIR/sroa.rs:+6:5: +6:23
|
||||||
StorageDead(_2); // scope 0 at $DIR/sroa.rs:+7:1: +7:2
|
- StorageDead(_2); // scope 0 at $DIR/sroa.rs:+7:1: +7:2
|
||||||
|
+ _0 = _4; // scope 0 at $DIR/sroa.rs:+6:5: +6:23
|
||||||
|
+ StorageDead(_4); // scope 0 at $DIR/sroa.rs:+7:1: +7:2
|
||||||
|
+ nop; // scope 0 at $DIR/sroa.rs:+7:1: +7:2
|
||||||
return; // scope 0 at $DIR/sroa.rs:+7:2: +7:2
|
return; // scope 0 at $DIR/sroa.rs:+7:2: +7:2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue