1 //! Drivers are responsible for calling [`codegen_fn`] or [`codegen_static`] for each mono item and
2 //! performing any further actions like JIT executing or writing object files.
4 //! [`codegen_fn`]: crate::base::codegen_fn
5 //! [`codegen_static`]: crate::constant::codegen_static
7 use rustc_middle
::mir
::mono
::{Linkage as RLinkage, MonoItem, Visibility}
;
12 #[cfg(feature = "jit")]
15 fn predefine_mono_items
<'tcx
>(
17 module
: &mut dyn Module
,
18 mono_items
: &[(MonoItem
<'tcx
>, (RLinkage
, Visibility
))],
20 tcx
.prof
.generic_activity("predefine functions").run(|| {
21 let is_compiler_builtins
= tcx
.is_compiler_builtins(LOCAL_CRATE
);
22 for &(mono_item
, (linkage
, visibility
)) in mono_items
{
24 MonoItem
::Fn(instance
) => {
25 let name
= tcx
.symbol_name(instance
).name
;
26 let _inst_guard
= crate::PrintOnPanic(|| format
!("{:?} {}", instance
, name
));
28 get_function_sig(tcx
, module
.target_config().default_call_conv
, instance
);
29 let linkage
= crate::linkage
::get_clif_linkage(
35 module
.declare_function(name
, linkage
, &sig
).unwrap();
37 MonoItem
::Static(_
) | MonoItem
::GlobalAsm(_
) => {}