diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-05-12 01:38:26 +0300 |
|---|---|---|
| committer | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-05-12 01:43:04 +0300 |
| commit | c85501b9c18ab396096239a52350e12fa9d24db2 (patch) | |
| tree | 9e44936c6c89783648e6ddc678cb23d963cb2b85 /src/librustc_mir | |
| parent | 2b97174ada7fb1854269558ed2cf3b089e58beee (diff) | |
| download | rust-c85501b9c18ab396096239a52350e12fa9d24db2.tar.gz rust-c85501b9c18ab396096239a52350e12fa9d24db2.zip | |
box large variants in MIR
Operand: 72 -> 24 B Statement: 192 -> 96 B Terminator: 256 -> 112 B librustc translation memory usage: 1795 -> 1669 MB next step would be interning lvalues, I suppose?
Diffstat (limited to 'src/librustc_mir')
| -rw-r--r-- | src/librustc_mir/build/cfg.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/build/expr/as_operand.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/build/expr/as_rvalue.rs | 9 | ||||
| -rw-r--r-- | src/librustc_mir/build/expr/stmt.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/build/matches/test.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/build/misc.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/build/scope.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/shim.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/transform/copy_prop.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/transform/deaggregator.rs | 8 | ||||
| -rw-r--r-- | src/librustc_mir/transform/promote_consts.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/transform/qualify_consts.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/transform/simplify_branches.rs | 5 | ||||
| -rw-r--r-- | src/librustc_mir/transform/type_check.rs | 2 |
14 files changed, 26 insertions, 26 deletions
diff --git a/src/librustc_mir/build/cfg.rs b/src/librustc_mir/build/cfg.rs index c503b8c7fe0..40a78933aad 100644 --- a/src/librustc_mir/build/cfg.rs +++ b/src/librustc_mir/build/cfg.rs @@ -60,7 +60,7 @@ impl<'tcx> CFG<'tcx> { temp: &Lvalue<'tcx>, constant: Constant<'tcx>) { self.push_assign(block, source_info, temp, - Rvalue::Use(Operand::Constant(constant))); + Rvalue::Use(Operand::Constant(box constant))); } pub fn push_assign_unit(&mut self, @@ -68,7 +68,7 @@ impl<'tcx> CFG<'tcx> { source_info: SourceInfo, lvalue: &Lvalue<'tcx>) { self.push_assign(block, source_info, lvalue, Rvalue::Aggregate( - AggregateKind::Tuple, vec![] + box AggregateKind::Tuple, vec![] )); } diff --git a/src/librustc_mir/build/expr/as_operand.rs b/src/librustc_mir/build/expr/as_operand.rs index 22a36bb21d8..f7534737edc 100644 --- a/src/librustc_mir/build/expr/as_operand.rs +++ b/src/librustc_mir/build/expr/as_operand.rs @@ -66,7 +66,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { match category { Category::Constant => { let constant = this.as_constant(expr); - block.and(Operand::Constant(constant)) + block.and(Operand::Constant(box constant)) } Category::Lvalue | Category::Rvalue(..) => { diff --git a/src/librustc_mir/build/expr/as_rvalue.rs b/src/librustc_mir/build/expr/as_rvalue.rs index 8dc7745cd9e..46e2408c38d 100644 --- a/src/librustc_mir/build/expr/as_rvalue.rs +++ b/src/librustc_mir/build/expr/as_rvalue.rs @@ -166,7 +166,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { .map(|f| unpack!(block = this.as_operand(block, scope, f))) .collect(); - block.and(Rvalue::Aggregate(AggregateKind::Array(el_ty), fields)) + block.and(Rvalue::Aggregate(box AggregateKind::Array(el_ty), fields)) } ExprKind::Tuple { fields } => { // see (*) above // first process the set of fields @@ -175,14 +175,14 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { .map(|f| unpack!(block = this.as_operand(block, scope, f))) .collect(); - block.and(Rvalue::Aggregate(AggregateKind::Tuple, fields)) + block.and(Rvalue::Aggregate(box AggregateKind::Tuple, fields)) } ExprKind::Closure { closure_id, substs, upvars } => { // see (*) above let upvars = upvars.into_iter() .map(|upvar| unpack!(block = this.as_operand(block, scope, upvar))) .collect(); - block.and(Rvalue::Aggregate(AggregateKind::Closure(closure_id, substs), upvars)) + block.and(Rvalue::Aggregate(box AggregateKind::Closure(closure_id, substs), upvars)) } ExprKind::Adt { adt_def, variant_index, substs, fields, base @@ -215,7 +215,8 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { field_names.iter().filter_map(|n| fields_map.get(n).cloned()).collect() }; - let adt = AggregateKind::Adt(adt_def, variant_index, substs, active_field_index); + let adt = + box AggregateKind::Adt(adt_def, variant_index, substs, active_field_index); block.and(Rvalue::Aggregate(adt, fields)) } ExprKind::Assign { .. } | diff --git a/src/librustc_mir/build/expr/stmt.rs b/src/librustc_mir/build/expr/stmt.rs index c03432312b0..3c7ab373651 100644 --- a/src/librustc_mir/build/expr/stmt.rs +++ b/src/librustc_mir/build/expr/stmt.rs @@ -129,7 +129,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { this.cfg.push(block, Statement { source_info: source_info, kind: StatementKind::InlineAsm { - asm: asm.clone(), + asm: box asm.clone(), outputs: outputs, inputs: inputs }, diff --git a/src/librustc_mir/build/matches/test.rs b/src/librustc_mir/build/matches/test.rs index 0833342927f..28386fa598c 100644 --- a/src/librustc_mir/build/matches/test.rs +++ b/src/librustc_mir/build/matches/test.rs @@ -308,7 +308,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { let eq_block = self.cfg.start_new_block(); let cleanup = self.diverge_cleanup(); self.cfg.terminate(block, source_info, TerminatorKind::Call { - func: Operand::Constant(Constant { + func: Operand::Constant(box Constant { span: test.span, ty: mty, literal: method diff --git a/src/librustc_mir/build/misc.rs b/src/librustc_mir/build/misc.rs index 35a8b245f2b..6c93e073de6 100644 --- a/src/librustc_mir/build/misc.rs +++ b/src/librustc_mir/build/misc.rs @@ -40,7 +40,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { ty: Ty<'tcx>, literal: Literal<'tcx>) -> Operand<'tcx> { - let constant = Constant { + let constant = box Constant { span: span, ty: ty, literal: literal, @@ -49,7 +49,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { } pub fn unit_rvalue(&mut self) -> Rvalue<'tcx> { - Rvalue::Aggregate(AggregateKind::Tuple, vec![]) + Rvalue::Aggregate(box AggregateKind::Tuple, vec![]) } // Returns a zero literal operand for the appropriate type, works for diff --git a/src/librustc_mir/build/scope.rs b/src/librustc_mir/build/scope.rs index f9c08f34eaf..6043a696183 100644 --- a/src/librustc_mir/build/scope.rs +++ b/src/librustc_mir/build/scope.rs @@ -786,7 +786,7 @@ fn build_free<'a, 'gcx, 'tcx>(tcx: TyCtxt<'a, 'gcx, 'tcx>, let free_func = tcx.require_lang_item(lang_items::BoxFreeFnLangItem); let substs = tcx.intern_substs(&[Kind::from(data.item_ty)]); TerminatorKind::Call { - func: Operand::Constant(Constant { + func: Operand::Constant(box Constant { span: data.span, ty: tcx.type_of(free_func).subst(tcx, substs), literal: Literal::Value { diff --git a/src/librustc_mir/shim.rs b/src/librustc_mir/shim.rs index 1458ea7fdd6..a6f9952b23c 100644 --- a/src/librustc_mir/shim.rs +++ b/src/librustc_mir/shim.rs @@ -323,7 +323,7 @@ fn build_call_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>, let (callee, mut args) = match call_kind { CallKind::Indirect => (rcvr, vec![]), CallKind::Direct(def_id) => ( - Operand::Constant(Constant { + Operand::Constant(box Constant { span: span, ty: tcx.type_of(def_id).subst(tcx, param_env.free_substs), literal: Literal::Value { @@ -449,7 +449,7 @@ pub fn build_adt_ctor<'a, 'gcx, 'tcx>(infcx: &infer::InferCtxt<'a, 'gcx, 'tcx>, kind: StatementKind::Assign( Lvalue::Local(RETURN_POINTER), Rvalue::Aggregate( - AggregateKind::Adt(adt_def, variant_no, substs, None), + box AggregateKind::Adt(adt_def, variant_no, substs, None), (1..sig.inputs().len()+1).map(|i| { Operand::Consume(Lvalue::Local(Local::new(i))) }).collect() diff --git a/src/librustc_mir/transform/copy_prop.rs b/src/librustc_mir/transform/copy_prop.rs index fbb67161bac..08a4961c6cd 100644 --- a/src/librustc_mir/transform/copy_prop.rs +++ b/src/librustc_mir/transform/copy_prop.rs @@ -316,7 +316,7 @@ impl<'tcx> MutVisitor<'tcx> for ConstantPropagationVisitor<'tcx> { _ => return, } - *operand = Operand::Constant(self.constant.clone()); + *operand = Operand::Constant(box self.constant.clone()); self.uses_replaced += 1 } } diff --git a/src/librustc_mir/transform/deaggregator.rs b/src/librustc_mir/transform/deaggregator.rs index 4309f91c635..d21dbeafb5d 100644 --- a/src/librustc_mir/transform/deaggregator.rs +++ b/src/librustc_mir/transform/deaggregator.rs @@ -49,8 +49,8 @@ impl MirPass for Deaggregator { &Rvalue::Aggregate(ref agg_kind, ref operands) => (agg_kind, operands), _ => span_bug!(src_info.span, "expected aggregate, not {:?}", rhs), }; - let (adt_def, variant, substs) = match agg_kind { - &AggregateKind::Adt(adt_def, variant, substs, None) + let (adt_def, variant, substs) = match **agg_kind { + AggregateKind::Adt(adt_def, variant, substs, None) => (adt_def, variant, substs), _ => span_bug!(src_info.span, "expected struct, not {:?}", rhs), }; @@ -114,8 +114,8 @@ fn get_aggregate_statement_index<'a, 'tcx, 'b>(start: usize, &Rvalue::Aggregate(ref kind, ref operands) => (kind, operands), _ => continue, }; - let (adt_def, variant) = match kind { - &AggregateKind::Adt(adt_def, variant, _, None) => (adt_def, variant), + let (adt_def, variant) = match **kind { + AggregateKind::Adt(adt_def, variant, _, None) => (adt_def, variant), _ => continue, }; if operands.len() == 0 { diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index ed9a0d3809f..e1c4602b045 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -230,7 +230,7 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> { (if self.keep_original { rhs.clone() } else { - let unit = Rvalue::Aggregate(AggregateKind::Tuple, vec![]); + let unit = Rvalue::Aggregate(box AggregateKind::Tuple, vec![]); mem::replace(rhs, unit) }, statement.source_info) }; @@ -288,7 +288,7 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> { fn promote_candidate(mut self, candidate: Candidate) { let span = self.promoted.span; - let new_operand = Operand::Constant(Constant { + let new_operand = Operand::Constant(box Constant { span: span, ty: self.promoted.return_ty, literal: Literal::Promoted { diff --git a/src/librustc_mir/transform/qualify_consts.rs b/src/librustc_mir/transform/qualify_consts.rs index 0d592b4d72b..df837a32133 100644 --- a/src/librustc_mir/transform/qualify_consts.rs +++ b/src/librustc_mir/transform/qualify_consts.rs @@ -730,7 +730,7 @@ impl<'a, 'tcx> Visitor<'tcx> for Qualifier<'a, 'tcx, 'tcx> { } Rvalue::Aggregate(ref kind, _) => { - if let AggregateKind::Adt(def, ..) = *kind { + if let AggregateKind::Adt(def, ..) = **kind { if def.has_dtor(self.tcx) { self.add(Qualif::NEEDS_DROP); self.deny_drop(); diff --git a/src/librustc_mir/transform/simplify_branches.rs b/src/librustc_mir/transform/simplify_branches.rs index d21a6ddfdfb..1dcacb29c3e 100644 --- a/src/librustc_mir/transform/simplify_branches.rs +++ b/src/librustc_mir/transform/simplify_branches.rs @@ -37,7 +37,7 @@ impl MirPass for SimplifyBranches { for block in mir.basic_blocks_mut() { let terminator = block.terminator_mut(); terminator.kind = match terminator.kind { - TerminatorKind::SwitchInt { discr: Operand::Constant(Constant { + TerminatorKind::SwitchInt { discr: Operand::Constant(box Constant { literal: Literal::Value { ref value }, .. }), ref values, ref targets, .. } => { if let Some(ref constint) = value.to_const_int() { @@ -54,7 +54,7 @@ impl MirPass for SimplifyBranches { continue } }, - TerminatorKind::Assert { target, cond: Operand::Constant(Constant { + TerminatorKind::Assert { target, cond: Operand::Constant(box Constant { literal: Literal::Value { value: ConstVal::Bool(cond) }, .. @@ -66,4 +66,3 @@ impl MirPass for SimplifyBranches { } } } - diff --git a/src/librustc_mir/transform/type_check.rs b/src/librustc_mir/transform/type_check.rs index b325470ec81..be384218a41 100644 --- a/src/librustc_mir/transform/type_check.rs +++ b/src/librustc_mir/transform/type_check.rs @@ -534,7 +534,7 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> { fn is_box_free(&self, operand: &Operand<'tcx>) -> bool { match operand { - &Operand::Constant(Constant { + &Operand::Constant(box Constant { literal: Literal::Value { value: ConstVal::Function(def_id, _), .. }, .. |
