make it more clear which functions create fresh AllocId
This commit is contained in:
parent
a5b81faef0
commit
90d894e122
@ -3,7 +3,7 @@
|
|||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||||
use rustc_middle::mir::interpret::{
|
use rustc_middle::mir::interpret::{
|
||||||
read_target_uint, AllocId, ConstAllocation, ConstValue, ErrorHandled, GlobalAlloc, Scalar,
|
read_target_uint, AllocId, ConstValue, ErrorHandled, GlobalAlloc, Scalar,
|
||||||
};
|
};
|
||||||
|
|
||||||
use cranelift_module::*;
|
use cranelift_module::*;
|
||||||
@ -200,17 +200,14 @@ pub(crate) fn codegen_const_value<'tcx>(
|
|||||||
CValue::by_val(val, layout)
|
CValue::by_val(val, layout)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ConstValue::Indirect { alloc_id, offset } => {
|
ConstValue::Indirect { alloc_id, offset } => CValue::by_ref(
|
||||||
let alloc = fx.tcx.global_alloc(alloc_id).unwrap_memory();
|
pointer_for_allocation(fx, alloc_id)
|
||||||
// FIXME: avoid creating multiple allocations for the same AllocId?
|
.offset_i64(fx, i64::try_from(offset.bytes()).unwrap()),
|
||||||
CValue::by_ref(
|
layout,
|
||||||
pointer_for_allocation(fx, alloc)
|
),
|
||||||
.offset_i64(fx, i64::try_from(offset.bytes()).unwrap()),
|
|
||||||
layout,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
ConstValue::Slice { data, start, end } => {
|
ConstValue::Slice { data, start, end } => {
|
||||||
let ptr = pointer_for_allocation(fx, data)
|
let alloc_id = fx.tcx.reserve_and_set_memory_alloc(data);
|
||||||
|
let ptr = pointer_for_allocation(fx, alloc_id)
|
||||||
.offset_i64(fx, i64::try_from(start).unwrap())
|
.offset_i64(fx, i64::try_from(start).unwrap())
|
||||||
.get_addr(fx);
|
.get_addr(fx);
|
||||||
let len = fx
|
let len = fx
|
||||||
@ -224,9 +221,9 @@ pub(crate) fn codegen_const_value<'tcx>(
|
|||||||
|
|
||||||
fn pointer_for_allocation<'tcx>(
|
fn pointer_for_allocation<'tcx>(
|
||||||
fx: &mut FunctionCx<'_, '_, 'tcx>,
|
fx: &mut FunctionCx<'_, '_, 'tcx>,
|
||||||
alloc: ConstAllocation<'tcx>,
|
alloc_id: AllocId,
|
||||||
) -> crate::pointer::Pointer {
|
) -> crate::pointer::Pointer {
|
||||||
let alloc_id = fx.tcx.create_memory_alloc(alloc);
|
let alloc = fx.tcx.global_alloc(alloc_id).unwrap_memory();
|
||||||
let data_id = data_id_for_alloc_id(
|
let data_id = data_id_for_alloc_id(
|
||||||
&mut fx.constants_cx,
|
&mut fx.constants_cx,
|
||||||
&mut *fx.module,
|
&mut *fx.module,
|
||||||
@ -357,6 +354,7 @@ fn define_all_allocs(tcx: TyCtxt<'_>, module: &mut dyn Module, cx: &mut Constant
|
|||||||
unreachable!()
|
unreachable!()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
// FIXME: should we have a cache so we don't do this multiple times for the same `ConstAllocation`?
|
||||||
let data_id = *cx.anon_allocs.entry(alloc_id).or_insert_with(|| {
|
let data_id = *cx.anon_allocs.entry(alloc_id).or_insert_with(|| {
|
||||||
module.declare_anonymous_data(alloc.inner().mutability.is_mut(), false).unwrap()
|
module.declare_anonymous_data(alloc.inner().mutability.is_mut(), false).unwrap()
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user