diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2018-09-24 12:13:23 +1000 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2018-09-24 18:45:49 +1000 |
| commit | e221b24cb6d0a5331bfa04a546cea16f22c41988 (patch) | |
| tree | cfc81641ec3e2e8ca136d7ef06696e159419c682 | |
| parent | a577f900a9c23806915d2a10b217c9335b1ecf52 (diff) | |
| download | rust-e221b24cb6d0a5331bfa04a546cea16f22c41988.tar.gz rust-e221b24cb6d0a5331bfa04a546cea16f22c41988.zip | |
Shrink StatementKind::InlineAsm.
This shrinks StatementKind from 64 bytes to 48 bytes on 64-bit.
| -rw-r--r-- | src/librustc/mir/mod.rs | 4 | ||||
| -rw-r--r-- | src/librustc/ty/structural_impls.rs | 10 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/mod.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/invalidation.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/build/expr/stmt.rs | 6 | ||||
| -rw-r--r-- | src/librustc_mir/dataflow/move_paths/builder.rs | 2 |
6 files changed, 21 insertions, 9 deletions
diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index ab1304acf2a..6e9f5a7a215 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -1633,8 +1633,8 @@ pub enum StatementKind<'tcx> { /// Execute a piece of inline Assembly. InlineAsm { asm: Box<InlineAsm>, - outputs: Vec<Place<'tcx>>, - inputs: Vec<Operand<'tcx>>, + outputs: Box<[Place<'tcx>]>, + inputs: Box<[Operand<'tcx>]>, }, /// Assert the given places to be valid inhabitants of their type. These statements are diff --git a/src/librustc/ty/structural_impls.rs b/src/librustc/ty/structural_impls.rs index bd9dfc6b855..aab268c07c4 100644 --- a/src/librustc/ty/structural_impls.rs +++ b/src/librustc/ty/structural_impls.rs @@ -720,6 +720,16 @@ impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Vec<T> { } } +impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Box<[T]> { + fn super_fold_with<'gcx: 'tcx, F: TypeFolder<'gcx, 'tcx>>(&self, folder: &mut F) -> Self { + self.iter().map(|t| t.fold_with(folder)).collect::<Vec<_>>().into_boxed_slice() + } + + fn super_visit_with<V: TypeVisitor<'tcx>>(&self, visitor: &mut V) -> bool { + self.iter().any(|t| t.visit_with(visitor)) + } +} + impl<'tcx, T:TypeFoldable<'tcx>> TypeFoldable<'tcx> for ty::Binder<T> { fn super_fold_with<'gcx: 'tcx, F: TypeFolder<'gcx, 'tcx>>(&self, folder: &mut F) -> Self { self.map_bound_ref(|ty| ty.fold_with(folder)) diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs index 06884875598..ae0a06294bf 100644 --- a/src/librustc_mir/borrow_check/mod.rs +++ b/src/librustc_mir/borrow_check/mod.rs @@ -528,7 +528,7 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx ref inputs, } => { let context = ContextKind::InlineAsm.new(location); - for (o, output) in asm.outputs.iter().zip(outputs) { + for (o, output) in asm.outputs.iter().zip(outputs.iter()) { if o.is_indirect { // FIXME(eddyb) indirect inline asm outputs should // be encoeded through MIR place derefs instead. @@ -555,7 +555,7 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx ); } } - for input in inputs { + for input in inputs.iter() { self.consume_operand(context, (input, span), flow_state); } } diff --git a/src/librustc_mir/borrow_check/nll/invalidation.rs b/src/librustc_mir/borrow_check/nll/invalidation.rs index cd760746c12..b755482b49a 100644 --- a/src/librustc_mir/borrow_check/nll/invalidation.rs +++ b/src/librustc_mir/borrow_check/nll/invalidation.rs @@ -118,7 +118,7 @@ impl<'cg, 'cx, 'tcx, 'gcx> Visitor<'tcx> for InvalidationGenerator<'cg, 'cx, 'tc ref inputs, } => { let context = ContextKind::InlineAsm.new(location); - for (o, output) in asm.outputs.iter().zip(outputs) { + for (o, output) in asm.outputs.iter().zip(outputs.iter()) { if o.is_indirect { // FIXME(eddyb) indirect inline asm outputs should // be encoeded through MIR place derefs instead. @@ -137,7 +137,7 @@ impl<'cg, 'cx, 'tcx, 'gcx> Visitor<'tcx> for InvalidationGenerator<'cg, 'cx, 'tc ); } } - for input in inputs { + for input in inputs.iter() { self.consume_operand(context, input); } } diff --git a/src/librustc_mir/build/expr/stmt.rs b/src/librustc_mir/build/expr/stmt.rs index 0086cff46e5..32f09599ace 100644 --- a/src/librustc_mir/build/expr/stmt.rs +++ b/src/librustc_mir/build/expr/stmt.rs @@ -143,11 +143,13 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { let outputs = outputs .into_iter() .map(|output| unpack!(block = this.as_place(block, output))) - .collect(); + .collect::<Vec<_>>() + .into_boxed_slice(); let inputs = inputs .into_iter() .map(|input| unpack!(block = this.as_local_operand(block, input))) - .collect(); + .collect::<Vec<_>>() + .into_boxed_slice(); this.cfg.push( block, Statement { diff --git a/src/librustc_mir/dataflow/move_paths/builder.rs b/src/librustc_mir/dataflow/move_paths/builder.rs index 63adcb5132a..2884b15ca47 100644 --- a/src/librustc_mir/dataflow/move_paths/builder.rs +++ b/src/librustc_mir/dataflow/move_paths/builder.rs @@ -290,7 +290,7 @@ impl<'b, 'a, 'gcx, 'tcx> Gatherer<'b, 'a, 'gcx, 'tcx> { self.gather_init(output, InitKind::Deep); } } - for input in inputs { + for input in inputs.iter() { self.gather_operand(input); } } |
