about summary refs log tree commit diff
path: root/src/librustc_codegen_llvm
diff options
context:
space:
mode:
authorDenis Merigoux <denis.merigoux@gmail.com>2018-09-27 15:31:20 +0200
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2018-11-16 14:38:19 +0200
commit4ba09ab8d226d4d362e466c7dc744f51869cecc3 (patch)
tree82a296d3629b96a2185bca2b6e9d3e04113d164b /src/librustc_codegen_llvm
parent6819e6e6e1c049b5e70ebd4fde791623e7ed2aaa (diff)
downloadrust-4ba09ab8d226d4d362e466c7dc744f51869cecc3.tar.gz
rust-4ba09ab8d226d4d362e466c7dc744f51869cecc3.zip
Added compile codegen to backend trait
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/base.rs9
-rw-r--r--src/librustc_codegen_llvm/interfaces/backend.rs18
-rw-r--r--src/librustc_codegen_llvm/interfaces/mod.rs2
-rw-r--r--src/librustc_codegen_llvm/lib.rs19
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<B: BackendMethods>(
     backend: B,
     tcx: TyCtxt<'a, 'tcx, 'tcx>,
     rx: mpsc::Receiver<Box<dyn Any + Send>>
@@ -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<CodegenUnit<'tcx>>,
-        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<CodegenUnit<'tcx>>,
-        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)
     }
 }