diff --git a/src/abi/mod.rs b/src/abi/mod.rs index cde362e18347..b8bf2cf831a1 100644 --- a/src/abi/mod.rs +++ b/src/abi/mod.rs @@ -398,7 +398,7 @@ pub fn codegen_fn_prelude(fx: &mut FunctionCx<'_, '_, impl Backend>, start_ebb: fx.bcx .ins() - .jump(*fx.ebb_map.get(&START_BLOCK).unwrap(), &[]); + .jump(*fx.ebb_map.get(START_BLOCK).unwrap(), &[]); } pub fn codegen_terminator_call<'tcx>( diff --git a/src/base.rs b/src/base.rs index 81ca47fe6458..ac18ff6228a5 100644 --- a/src/base.rs +++ b/src/base.rs @@ -1,4 +1,5 @@ use rustc::ty::adjustment::PointerCast; +use rustc_index::vec::IndexVec; use crate::prelude::*; @@ -27,10 +28,7 @@ pub fn trans_fn<'clif, 'tcx, B: Backend + 'static>( // Predefine ebb's let start_ebb = bcx.create_ebb(); - let mut ebb_map: HashMap = HashMap::new(); - for (bb, _bb_data) in mir.basic_blocks().iter_enumerated() { - ebb_map.insert(bb, bcx.create_ebb()); - } + let ebb_map: IndexVec = (0..mir.basic_blocks().len()).map(|_| bcx.create_ebb()).collect(); // Make FunctionCx let pointer_type = cx.module.target_config().pointer_type(); diff --git a/src/common.rs b/src/common.rs index b14e8af79a8d..e5b932947ccc 100644 --- a/src/common.rs +++ b/src/common.rs @@ -1,5 +1,6 @@ use rustc::ty::layout::{Integer, Primitive}; use rustc_target::spec::{HasTargetSpec, Target}; +use rustc_index::vec::IndexVec; use cranelift_codegen::ir::{InstructionData, Opcode, ValueDef}; @@ -263,7 +264,7 @@ pub struct FunctionCx<'clif, 'tcx, B: Backend + 'static> { pub mir: &'tcx Body<'tcx>, pub bcx: FunctionBuilder<'clif>, - pub ebb_map: HashMap, + pub ebb_map: IndexVec, pub local_map: HashMap>, pub clif_comments: crate::pretty_clif::CommentWriter, @@ -341,7 +342,7 @@ impl<'tcx, B: Backend + 'static> FunctionCx<'_, 'tcx, B> { } pub fn get_ebb(&self, bb: BasicBlock) -> Ebb { - *self.ebb_map.get(&bb).unwrap() + *self.ebb_map.get(bb).unwrap() } pub fn get_local_place(&mut self, local: Local) -> CPlace<'tcx> {