Do not clone Mir unnecessarily
This commit is contained in:
parent
f5a702dc78
commit
8ec0b3a12a
@ -63,7 +63,8 @@ macro_rules! newtype_index {
|
||||
}
|
||||
|
||||
/// Lowered representation of a single function.
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
// Do not implement clone for Mir, its easy to do so accidently and its kind of expensive.
|
||||
#[derive(RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Mir<'tcx> {
|
||||
/// List of basic blocks. References to basic block use a newtyped index type `BasicBlock`
|
||||
/// that indexes into this vector.
|
||||
|
@ -37,13 +37,14 @@ use super::analyze::CleanupKind;
|
||||
use super::constant::Const;
|
||||
use super::lvalue::{LvalueRef};
|
||||
use super::operand::OperandRef;
|
||||
use super::operand::OperandValue::*;
|
||||
use super::operand::OperandValue::{Pair, Ref, Immediate};
|
||||
|
||||
use std::cell::Ref as CellRef;
|
||||
|
||||
impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {
|
||||
pub fn trans_block(&mut self, bb: mir::BasicBlock) {
|
||||
let mut bcx = self.bcx(bb);
|
||||
let mir = self.mir.clone();
|
||||
let data = &mir[bb];
|
||||
let data = &CellRef::clone(&self.mir)[bb];
|
||||
|
||||
debug!("trans_block({:?}={:?})", bb, data);
|
||||
|
||||
@ -228,7 +229,7 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {
|
||||
}
|
||||
|
||||
mir::TerminatorKind::Drop { ref location, target, unwind } => {
|
||||
let ty = location.ty(&mir, bcx.tcx()).to_ty(bcx.tcx());
|
||||
let ty = location.ty(&self.mir, bcx.tcx()).to_ty(bcx.tcx());
|
||||
let ty = bcx.monomorphize(&ty);
|
||||
|
||||
// Double check for necessity to drop
|
||||
|
Loading…
x
Reference in New Issue
Block a user