Skip to content

Commit 33513fa

Browse files
author
Markus Westerlind
committed
Avoid an intermediate Vec in mir simplify
1 parent dec8166 commit 33513fa

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/librustc_mir/transform/simplify.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
9494
self.strip_nops();
9595

9696
let mut start = START_BLOCK;
97-
let mut new_stmts = vec![];
9897

9998
loop {
10099
let mut changed = false;
@@ -119,13 +118,11 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
119118
while inner_changed {
120119
inner_changed = false;
121120
inner_changed |= self.simplify_branch(&mut terminator);
122-
inner_changed |= self.merge_successor(&mut new_stmts, &mut terminator);
121+
inner_changed |= self.merge_successor(bb, &mut terminator);
123122
changed |= inner_changed;
124123
}
125124

126-
let data = &mut self.basic_blocks[bb];
127-
data.statements.append(&mut new_stmts);
128-
data.terminator = Some(terminator);
125+
self.basic_blocks[bb].terminator = Some(terminator);
129126

130127
changed |= inner_changed;
131128
}
@@ -199,7 +196,7 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
199196
// merge a block with 1 `goto` predecessor to its parent
200197
fn merge_successor(
201198
&mut self,
202-
new_stmts: &mut Vec<Statement<'tcx>>,
199+
merge_into: BasicBlock,
203200
terminator: &mut Terminator<'tcx>,
204201
) -> bool {
205202
let target = match terminator.kind {
@@ -216,7 +213,9 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
216213
return false;
217214
}
218215
};
219-
new_stmts.extend(self.basic_blocks[target].statements.drain(..));
216+
217+
let (from, to) = self.basic_blocks.pick2_mut(target, merge_into);
218+
to.statements.append(&mut from.statements);
220219
self.pred_count[target] = 0;
221220

222221
true

0 commit comments

Comments
 (0)