Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 5f21ff2

Browse files
committed
Inline codegen_mono_item
1 parent 3f28a49 commit 5f21ff2

File tree

3 files changed

+37
-28
lines changed

3 files changed

+37
-28
lines changed

src/driver/aot.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc_codegen_ssa::{CodegenResults, CompiledModule, CrateInfo, ModuleKind};
88
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
99
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
1010
use rustc_middle::middle::cstore::EncodedMetadata;
11-
use rustc_middle::mir::mono::CodegenUnit;
11+
use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
1212
use rustc_session::cgu_reuse_tracker::CguReuse;
1313
use rustc_session::config::{DebugInfo, OutputType};
1414

@@ -148,7 +148,25 @@ fn module_codegen(tcx: TyCtxt<'_>, cgu_name: rustc_span::Symbol) -> ModuleCodege
148148
super::predefine_mono_items(&mut cx, &mono_items);
149149
for (mono_item, (linkage, visibility)) in mono_items {
150150
let linkage = crate::linkage::get_clif_linkage(mono_item, linkage, visibility);
151-
super::codegen_mono_item(&mut cx, mono_item, linkage);
151+
match mono_item {
152+
MonoItem::Fn(inst) => {
153+
cx.tcx.sess.time("codegen fn", || {
154+
crate::base::codegen_fn(&mut cx, inst, linkage)
155+
});
156+
}
157+
MonoItem::Static(def_id) => {
158+
crate::constant::codegen_static(&mut cx.constants_cx, def_id)
159+
}
160+
MonoItem::GlobalAsm(hir_id) => {
161+
let item = cx.tcx.hir().expect_item(hir_id);
162+
if let rustc_hir::ItemKind::GlobalAsm(rustc_hir::GlobalAsm { asm }) = item.kind {
163+
cx.global_asm.push_str(&*asm.as_str());
164+
cx.global_asm.push_str("\n\n");
165+
} else {
166+
bug!("Expected GlobalAsm found {:?}", item);
167+
}
168+
}
169+
}
152170
}
153171
let (mut module, global_asm, debug, mut unwind_context) =
154172
tcx.sess.time("finalize CodegenCx", || cx.finalize());

src/driver/jit.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::ffi::CString;
55
use std::os::raw::{c_char, c_int};
66

77
use rustc_codegen_ssa::CrateInfo;
8+
use rustc_middle::mir::mono::MonoItem;
89

910
use cranelift_simplejit::{SimpleJITBuilder, SimpleJITModule};
1011

@@ -73,12 +74,26 @@ pub(super) fn run_jit(tcx: TyCtxt<'_>) -> ! {
7374
super::predefine_mono_items(&mut cx, &mono_items);
7475
for (mono_item, (linkage, visibility)) in mono_items {
7576
let linkage = crate::linkage::get_clif_linkage(mono_item, linkage, visibility);
76-
super::codegen_mono_item(&mut cx, mono_item, linkage);
77+
match mono_item {
78+
MonoItem::Fn(inst) => {
79+
cx.tcx.sess.time("codegen fn", || {
80+
crate::base::codegen_fn(&mut cx, inst, linkage)
81+
});
82+
}
83+
MonoItem::Static(def_id) => {
84+
crate::constant::codegen_static(&mut cx.constants_cx, def_id)
85+
}
86+
MonoItem::GlobalAsm(hir_id) => {
87+
let item = cx.tcx.hir().expect_item(hir_id);
88+
tcx.sess
89+
.span_fatal(item.span, "Global asm is not supported in JIT mode");
90+
}
91+
}
7792
}
7893
tcx.sess.time("finalize CodegenCx", || cx.finalize())
7994
});
8095
if !global_asm.is_empty() {
81-
tcx.sess.fatal("Global asm is not supported in JIT mode");
96+
tcx.sess.fatal("Inline asm is not supported in JIT mode");
8297
}
8398
crate::main_shim::maybe_create_entry_wrapper(tcx, &mut jit_module, &mut unwind_context, true);
8499
crate::allocator::codegen(tcx, &mut jit_module, &mut unwind_context);

src/driver/mod.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,6 @@ fn predefine_mono_items<'tcx>(
6363
});
6464
}
6565

66-
fn codegen_mono_item<'tcx, M: Module>(
67-
cx: &mut crate::CodegenCx<'tcx, M>,
68-
mono_item: MonoItem<'tcx>,
69-
linkage: Linkage,
70-
) {
71-
match mono_item {
72-
MonoItem::Fn(inst) => {
73-
cx.tcx
74-
.sess
75-
.time("codegen fn", || crate::base::codegen_fn(cx, inst, linkage));
76-
}
77-
MonoItem::Static(def_id) => crate::constant::codegen_static(&mut cx.constants_cx, def_id),
78-
MonoItem::GlobalAsm(hir_id) => {
79-
let item = cx.tcx.hir().expect_item(hir_id);
80-
if let rustc_hir::ItemKind::GlobalAsm(rustc_hir::GlobalAsm { asm }) = item.kind {
81-
cx.global_asm.push_str(&*asm.as_str());
82-
cx.global_asm.push_str("\n\n");
83-
} else {
84-
bug!("Expected GlobalAsm found {:?}", item);
85-
}
86-
}
87-
}
88-
}
89-
9066
fn time<R>(tcx: TyCtxt<'_>, name: &'static str, f: impl FnOnce() -> R) -> R {
9167
if std::env::var("CG_CLIF_DISPLAY_CG_TIME")
9268
.as_ref()

0 commit comments

Comments
 (0)