Add new_regular
and new_allocator
to ModuleCodegen
This commit is contained in:
parent
f32ca1afaf
commit
9431427cc3
6 changed files with 23 additions and 28 deletions
|
@ -632,17 +632,16 @@ pub unsafe fn optimize_thin_module(
|
||||||
Arc::new(SyncContext::new(context))
|
Arc::new(SyncContext::new(context))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let module = ModuleCodegen {
|
let module = ModuleCodegen::new_regular(
|
||||||
module_llvm: GccContext {
|
thin_module.name().to_string(),
|
||||||
|
GccContext {
|
||||||
context,
|
context,
|
||||||
should_combine_object_files,
|
should_combine_object_files,
|
||||||
// TODO(antoyo): use the correct relocation model here.
|
// TODO(antoyo): use the correct relocation model here.
|
||||||
relocation_model: RelocModel::Pic,
|
relocation_model: RelocModel::Pic,
|
||||||
temp_dir: None,
|
temp_dir: None,
|
||||||
},
|
},
|
||||||
name: thin_module.name().to_string(),
|
);
|
||||||
kind: ModuleKind::Regular,
|
|
||||||
};
|
|
||||||
/*{
|
/*{
|
||||||
let target = &*module.module_llvm.tm;
|
let target = &*module.module_llvm.tm;
|
||||||
let llmod = module.module_llvm.llmod();
|
let llmod = module.module_llvm.llmod();
|
||||||
|
|
|
@ -4,10 +4,10 @@ use std::sync::Arc;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use gccjit::{CType, Context, FunctionType, GlobalKind};
|
use gccjit::{CType, Context, FunctionType, GlobalKind};
|
||||||
|
use rustc_codegen_ssa::ModuleCodegen;
|
||||||
use rustc_codegen_ssa::base::maybe_create_entry_wrapper;
|
use rustc_codegen_ssa::base::maybe_create_entry_wrapper;
|
||||||
use rustc_codegen_ssa::mono_item::MonoItemExt;
|
use rustc_codegen_ssa::mono_item::MonoItemExt;
|
||||||
use rustc_codegen_ssa::traits::DebugInfoCodegenMethods;
|
use rustc_codegen_ssa::traits::DebugInfoCodegenMethods;
|
||||||
use rustc_codegen_ssa::{ModuleCodegen, ModuleKind};
|
|
||||||
use rustc_middle::dep_graph;
|
use rustc_middle::dep_graph;
|
||||||
use rustc_middle::mir::mono::Linkage;
|
use rustc_middle::mir::mono::Linkage;
|
||||||
#[cfg(feature = "master")]
|
#[cfg(feature = "master")]
|
||||||
|
@ -237,16 +237,15 @@ pub fn compile_codegen_unit(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ModuleCodegen {
|
ModuleCodegen::new_regular(
|
||||||
name: cgu_name.to_string(),
|
cgu_name.to_string(),
|
||||||
module_llvm: GccContext {
|
GccContext {
|
||||||
context: Arc::new(SyncContext::new(context)),
|
context: Arc::new(SyncContext::new(context)),
|
||||||
relocation_model: tcx.sess.relocation_model(),
|
relocation_model: tcx.sess.relocation_model(),
|
||||||
should_combine_object_files: false,
|
should_combine_object_files: false,
|
||||||
temp_dir: None,
|
temp_dir: None,
|
||||||
},
|
},
|
||||||
kind: ModuleKind::Regular,
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
(module, cost)
|
(module, cost)
|
||||||
|
|
|
@ -306,11 +306,8 @@ fn fat_lto(
|
||||||
assert!(!serialized_modules.is_empty(), "must have at least one serialized module");
|
assert!(!serialized_modules.is_empty(), "must have at least one serialized module");
|
||||||
let (buffer, name) = serialized_modules.remove(0);
|
let (buffer, name) = serialized_modules.remove(0);
|
||||||
info!("no in-memory regular modules to choose from, parsing {:?}", name);
|
info!("no in-memory regular modules to choose from, parsing {:?}", name);
|
||||||
ModuleCodegen {
|
let llvm_module = ModuleLlvm::parse(cgcx, &name, buffer.data(), dcx)?;
|
||||||
module_llvm: ModuleLlvm::parse(cgcx, &name, buffer.data(), dcx)?,
|
ModuleCodegen::new_regular(name.into_string().unwrap(), llvm_module)
|
||||||
name: name.into_string().unwrap(),
|
|
||||||
kind: ModuleKind::Regular,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
|
@ -778,11 +775,7 @@ pub(crate) unsafe fn optimize_thin_module(
|
||||||
// crates but for locally codegened modules we may be able to reuse
|
// crates but for locally codegened modules we may be able to reuse
|
||||||
// that LLVM Context and Module.
|
// that LLVM Context and Module.
|
||||||
let module_llvm = ModuleLlvm::parse(cgcx, module_name, thin_module.data(), dcx)?;
|
let module_llvm = ModuleLlvm::parse(cgcx, module_name, thin_module.data(), dcx)?;
|
||||||
let mut module = ModuleCodegen {
|
let mut module = ModuleCodegen::new_regular(thin_module.name(), module_llvm);
|
||||||
module_llvm,
|
|
||||||
name: thin_module.name().to_string(),
|
|
||||||
kind: ModuleKind::Regular,
|
|
||||||
};
|
|
||||||
{
|
{
|
||||||
let target = &*module.module_llvm.tm;
|
let target = &*module.module_llvm.tm;
|
||||||
let llmod = module.module_llvm.llmod();
|
let llmod = module.module_llvm.llmod();
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
|
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
|
use rustc_codegen_ssa::ModuleCodegen;
|
||||||
use rustc_codegen_ssa::base::maybe_create_entry_wrapper;
|
use rustc_codegen_ssa::base::maybe_create_entry_wrapper;
|
||||||
use rustc_codegen_ssa::mono_item::MonoItemExt;
|
use rustc_codegen_ssa::mono_item::MonoItemExt;
|
||||||
use rustc_codegen_ssa::traits::*;
|
use rustc_codegen_ssa::traits::*;
|
||||||
use rustc_codegen_ssa::{ModuleCodegen, ModuleKind};
|
|
||||||
use rustc_data_structures::small_c_str::SmallCStr;
|
use rustc_data_structures::small_c_str::SmallCStr;
|
||||||
use rustc_middle::dep_graph;
|
use rustc_middle::dep_graph;
|
||||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
|
||||||
|
@ -133,11 +133,7 @@ pub(crate) fn compile_codegen_unit(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ModuleCodegen {
|
ModuleCodegen::new_regular(cgu_name.to_string(), llvm_module)
|
||||||
name: cgu_name.to_string(),
|
|
||||||
module_llvm: llvm_module,
|
|
||||||
kind: ModuleKind::Regular,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
(module, cost)
|
(module, cost)
|
||||||
|
|
|
@ -686,7 +686,7 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
|
||||||
submit_codegened_module_to_llvm(
|
submit_codegened_module_to_llvm(
|
||||||
&backend,
|
&backend,
|
||||||
&ongoing_codegen.coordinator.sender,
|
&ongoing_codegen.coordinator.sender,
|
||||||
ModuleCodegen { name: llmod_id, module_llvm, kind: ModuleKind::Allocator },
|
ModuleCodegen::new_allocator(llmod_id, module_llvm),
|
||||||
cost,
|
cost,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,14 @@ pub struct ModuleCodegen<M> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<M> ModuleCodegen<M> {
|
impl<M> ModuleCodegen<M> {
|
||||||
|
pub fn new_regular(name: impl Into<String>, module: M) -> Self {
|
||||||
|
Self { name: name.into(), module_llvm: module, kind: ModuleKind::Regular }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_allocator(name: impl Into<String>, module: M) -> Self {
|
||||||
|
Self { name: name.into(), module_llvm: module, kind: ModuleKind::Allocator }
|
||||||
|
}
|
||||||
|
|
||||||
pub fn into_compiled_module(
|
pub fn into_compiled_module(
|
||||||
self,
|
self,
|
||||||
emit_obj: bool,
|
emit_obj: bool,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue