From 4ba09ab8d226d4d362e466c7dc744f51869cecc3 Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Thu, 27 Sep 2018 15:31:20 +0200 Subject: [PATCH] Added compile codegen to backend trait --- src/librustc_codegen_llvm/base.rs | 9 +++++---- .../interfaces/backend.rs | 18 ++++++------------ src/librustc_codegen_llvm/interfaces/mod.rs | 2 +- src/librustc_codegen_llvm/lib.rs | 19 ++++++------------- 4 files changed, 18 insertions(+), 30 deletions(-) diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs index 74432870705..7f45e1e675b 100644 --- a/src/librustc_codegen_llvm/base.rs +++ b/src/librustc_codegen_llvm/base.rs @@ -56,6 +56,7 @@ use rustc_mir::monomorphize::item::DefPathBasedNames; use common::{self, IntPredicate, RealPredicate, TypeKind}; use meth; use mir; +use context::CodegenCx; use monomorphize::Instance; use monomorphize::partitioning::{CodegenUnit, CodegenUnitExt}; use rustc_codegen_utils::symbol_names_test; @@ -712,7 +713,7 @@ fn determine_cgu_reuse<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, } } -pub fn codegen_crate<'a, 'tcx, B: BackendMethods>( +pub fn codegen_crate( backend: B, tcx: TyCtxt<'a, 'tcx, 'tcx>, rx: mpsc::Receiver> @@ -858,7 +859,7 @@ pub fn codegen_crate<'a, 'tcx, B: BackendMethods>( &format!("codegen {}", cgu.name())) }); let start_time = Instant::now(); - let stats = compile_codegen_unit(tcx, *cgu.name()); + let stats = backend.compile_codegen_unit(tcx, *cgu.name()); all_stats.extend(stats); total_codegen_time += start_time.elapsed(); false @@ -1066,7 +1067,7 @@ impl CrateInfo { } } -fn compile_codegen_unit<'ll, 'tcx>(tcx: TyCtxt<'ll, 'tcx, 'tcx>, +pub fn compile_codegen_unit<'ll, 'tcx>(tcx: TyCtxt<'ll, 'tcx, 'tcx>, cgu_name: InternedString) -> Stats { let start_time = Instant::now(); @@ -1098,7 +1099,7 @@ fn compile_codegen_unit<'ll, 'tcx>(tcx: TyCtxt<'ll, 'tcx, 'tcx>, // Instantiate monomorphizations without filling out definitions yet... let llvm_module = backend.new_metadata(tcx.sess, &cgu_name.as_str()); let stats = { - let cx = backend.new_codegen_context(tcx, cgu, &llvm_module); + let cx = CodegenCx::new(tcx, cgu, &llvm_module); let mono_items = cx.codegen_unit .items_in_deterministic_order(cx.tcx); for &(mono_item, (linkage, visibility)) in &mono_items { diff --git a/src/librustc_codegen_llvm/interfaces/backend.rs b/src/librustc_codegen_llvm/interfaces/backend.rs index b34bb00682f..c6b78150b5f 100644 --- a/src/librustc_codegen_llvm/interfaces/backend.rs +++ b/src/librustc_codegen_llvm/interfaces/backend.rs @@ -11,15 +11,15 @@ use rustc::ty::layout::{HasTyCtxt, LayoutOf, TyLayout}; use rustc::ty::Ty; -use super::{CodegenMethods, CodegenObject}; -use monomorphize::partitioning::CodegenUnit; +use super::CodegenObject; use rustc::middle::allocator::AllocatorKind; use rustc::middle::cstore::EncodedMetadata; +use rustc::mir::mono::Stats; use rustc::session::Session; use rustc::ty::TyCtxt; use std::any::Any; use std::sync::mpsc::Receiver; -use std::sync::Arc; +use syntax_pos::symbol::InternedString; use time_graph::TimeGraph; use ModuleCodegen; @@ -71,15 +71,9 @@ pub trait BackendMethods { fn codegen_finished(&self, codegen: &Self::OngoingCodegen, tcx: TyCtxt); fn check_for_errors(&self, codegen: &Self::OngoingCodegen, sess: &Session); fn wait_for_signal_to_codegen_item(&self, codegen: &Self::OngoingCodegen); -} - -pub trait BackendCodegenCxMethods<'a, 'tcx: 'a>: BackendMethods { - type CodegenCx: CodegenMethods<'tcx>; - - fn new_codegen_context( + fn compile_codegen_unit<'a, 'tcx: 'a>( &self, tcx: TyCtxt<'a, 'tcx, 'tcx>, - codegen_unit: Arc>, - llvm_module: &'a Self::Module, - ) -> Self::CodegenCx; + cgu_name: InternedString, + ) -> Stats; } diff --git a/src/librustc_codegen_llvm/interfaces/mod.rs b/src/librustc_codegen_llvm/interfaces/mod.rs index 019c4410e67..e0ce05d0a84 100644 --- a/src/librustc_codegen_llvm/interfaces/mod.rs +++ b/src/librustc_codegen_llvm/interfaces/mod.rs @@ -22,7 +22,7 @@ mod type_; pub use self::abi::{AbiBuilderMethods, AbiMethods}; pub use self::asm::{AsmBuilderMethods, AsmMethods}; -pub use self::backend::{Backend, BackendCodegenCxMethods, BackendMethods, BackendTypes}; +pub use self::backend::{Backend, BackendMethods, BackendTypes}; pub use self::builder::BuilderMethods; pub use self::consts::ConstMethods; pub use self::debuginfo::{DebugInfoBuilderMethods, DebugInfoMethods}; diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index 8633722204d..395fbae6aad 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -72,12 +72,11 @@ use interfaces::*; use time_graph::TimeGraph; use std::sync::mpsc::Receiver; use back::write::{self, OngoingCodegen}; -use context::CodegenCx; -use monomorphize::partitioning::CodegenUnit; +use syntax_pos::symbol::InternedString; +use rustc::mir::mono::Stats; pub use llvm_util::target_features; use std::any::Any; -use std::sync::Arc; use std::sync::mpsc; use rustc_data_structures::sync::Lrc; @@ -188,18 +187,12 @@ impl BackendMethods for LlvmCodegenBackend { fn wait_for_signal_to_codegen_item(&self, codegen: &OngoingCodegen) { codegen.wait_for_signal_to_codegen_item() } -} - -impl<'a, 'tcx: 'a> BackendCodegenCxMethods<'a, 'tcx> for LlvmCodegenBackend { - type CodegenCx = CodegenCx<'a, 'tcx>; - - fn new_codegen_context( + fn compile_codegen_unit<'a, 'tcx: 'a>( &self, tcx: TyCtxt<'a, 'tcx, 'tcx>, - codegen_unit: Arc>, - llvm_module: &'a ModuleLlvm - ) -> CodegenCx<'a, 'tcx> { - CodegenCx::new(tcx, codegen_unit, llvm_module) + cgu_name: InternedString, + ) -> Stats { + base::compile_codegen_unit(tcx, cgu_name) } }