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-10-01 10:32:09 +0200
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2018-11-16 14:40:16 +0200
commitb02e5cce169212bd4efe5857bc719d6ed47a53fc (patch)
tree1e2f764304be421ed8b51400f97988890144343d /src/librustc_codegen_llvm
parentb06836e71a1358021c24a000be26612b5fcbee79 (diff)
downloadrust-b02e5cce169212bd4efe5857bc719d6ed47a53fc.tar.gz
rust-b02e5cce169212bd4efe5857bc719d6ed47a53fc.zip
Moved Backend interface into rustc_codegen_utils
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/back/lto.rs3
-rw-r--r--src/librustc_codegen_llvm/back/write.rs4
-rw-r--r--src/librustc_codegen_llvm/base.rs26
-rw-r--r--src/librustc_codegen_llvm/interfaces/asm.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/backend.rs80
-rw-r--r--src/librustc_codegen_llvm/interfaces/builder.rs3
-rw-r--r--src/librustc_codegen_llvm/interfaces/debuginfo.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/declare.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/intrinsic.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/misc.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/mod.rs8
-rw-r--r--src/librustc_codegen_llvm/interfaces/statics.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/type_.rs2
-rw-r--r--src/librustc_codegen_llvm/lib.rs54
14 files changed, 16 insertions, 176 deletions
diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs
index 5eb2e28a2a8..de69531fa8b 100644
--- a/src/librustc_codegen_llvm/back/lto.rs
+++ b/src/librustc_codegen_llvm/back/lto.rs
@@ -24,7 +24,8 @@ use rustc::util::common::time_ext;
 use rustc_data_structures::fx::FxHashMap;
 use rustc_codegen_utils::symbol_export;
 use time_graph::Timeline;
-use {ModuleCodegen, ModuleLlvm, ModuleKind};
+use ModuleLlvm;
+use rustc_codegen_utils::{ModuleCodegen, ModuleKind};
 
 use libc;
 
diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs
index 72820f967af..d96dd93e3e2 100644
--- a/src/librustc_codegen_llvm/back/write.rs
+++ b/src/librustc_codegen_llvm/back/write.rs
@@ -26,8 +26,8 @@ use rustc::util::nodemap::FxHashMap;
 use time_graph::{self, TimeGraph, Timeline};
 use llvm::{self, DiagnosticInfo, PassManager, SMDiagnostic};
 use llvm_util;
-use {CodegenResults, ModuleCodegen, CompiledModule, ModuleKind, ModuleLlvm,
-     CachedModuleCodegen};
+use {CodegenResults, ModuleLlvm};
+use rustc_codegen_utils::{ModuleCodegen, ModuleKind, CachedModuleCodegen, CompiledModule};
 use CrateInfo;
 use rustc::hir::def_id::{CrateNum, LOCAL_CRATE};
 use rustc::ty::TyCtxt;
diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs
index 5a11bade274..d8f5c25714f 100644
--- a/src/librustc_codegen_llvm/base.rs
+++ b/src/librustc_codegen_llvm/base.rs
@@ -24,9 +24,7 @@
 //!     int) and rec(x=int, y=int, z=int) will have the same llvm::Type.
 
 use super::ModuleLlvm;
-use super::ModuleCodegen;
-use super::ModuleKind;
-use super::CachedModuleCodegen;
+use rustc_codegen_utils::{ModuleCodegen, ModuleKind, CachedModuleCodegen};
 use super::LlvmCodegenBackend;
 
 use abi;
@@ -1197,25 +1195,3 @@ pub fn visibility_to_llvm(linkage: Visibility) -> llvm::Visibility {
         Visibility::Protected => llvm::Visibility::Protected,
     }
 }
-
-// FIXME(mw): Anything that is produced via DepGraph::with_task() must implement
-//            the HashStable trait. Normally DepGraph::with_task() calls are
-//            hidden behind queries, but CGU creation is a special case in two
-//            ways: (1) it's not a query and (2) CGU are output nodes, so their
-//            Fingerprints are not actually needed. It remains to be clarified
-//            how exactly this case will be handled in the red/green system but
-//            for now we content ourselves with providing a no-op HashStable
-//            implementation for CGUs.
-mod temp_stable_hash_impls {
-    use rustc_data_structures::stable_hasher::{StableHasherResult, StableHasher,
-                                               HashStable};
-    use {ModuleCodegen, ModuleLlvm};
-
-    impl<HCX> HashStable<HCX> for ModuleCodegen<ModuleLlvm> {
-        fn hash_stable<W: StableHasherResult>(&self,
-                                              _: &mut HCX,
-                                              _: &mut StableHasher<W>) {
-            // do nothing
-        }
-    }
-}
diff --git a/src/librustc_codegen_llvm/interfaces/asm.rs b/src/librustc_codegen_llvm/interfaces/asm.rs
index 33c751cc1d9..ffe9679fcd6 100644
--- a/src/librustc_codegen_llvm/interfaces/asm.rs
+++ b/src/librustc_codegen_llvm/interfaces/asm.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use super::HasCodegen;
 use mir::place::PlaceRef;
 use rustc::hir::{GlobalAsm, InlineAsm};
diff --git a/src/librustc_codegen_llvm/interfaces/backend.rs b/src/librustc_codegen_llvm/interfaces/backend.rs
deleted file mode 100644
index d21e39769af..00000000000
--- a/src/librustc_codegen_llvm/interfaces/backend.rs
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use rustc::ty::layout::{HasTyCtxt, LayoutOf, TyLayout};
-use rustc::ty::Ty;
-
-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 syntax_pos::symbol::InternedString;
-use time_graph::TimeGraph;
-use ModuleCodegen;
-
-pub trait BackendTypes {
-    type Value: CodegenObject;
-    type BasicBlock: Copy;
-    type Type: CodegenObject;
-    type Context;
-    type Funclet;
-
-    type DIScope: Copy;
-}
-
-pub trait Backend<'tcx>:
-    BackendTypes + HasTyCtxt<'tcx> + LayoutOf<Ty = Ty<'tcx>, TyLayout = TyLayout<'tcx>>
-{
-}
-
-impl<'tcx, T> Backend<'tcx> for T where
-    Self: BackendTypes + HasTyCtxt<'tcx> + LayoutOf<Ty = Ty<'tcx>, TyLayout = TyLayout<'tcx>>
-{}
-
-pub trait BackendMethods {
-    type Module;
-    type OngoingCodegen;
-
-    fn new_metadata(&self, sess: &Session, mod_name: &str) -> Self::Module;
-    fn write_metadata<'b, 'gcx>(
-        &self,
-        tcx: TyCtxt<'b, 'gcx, 'gcx>,
-        metadata: &Self::Module,
-    ) -> EncodedMetadata;
-    fn codegen_allocator(&self, tcx: TyCtxt, mods: &Self::Module, kind: AllocatorKind);
-
-    fn start_async_codegen(
-        &self,
-        tcx: TyCtxt,
-        time_graph: Option<TimeGraph>,
-        metadata: EncodedMetadata,
-        coordinator_receive: Receiver<Box<dyn Any + Send>>,
-        total_cgus: usize,
-    ) -> Self::OngoingCodegen;
-    fn submit_pre_codegened_module_to_llvm(
-        &self,
-        codegen: &Self::OngoingCodegen,
-        tcx: TyCtxt,
-        module: ModuleCodegen<Self::Module>,
-    );
-    fn codegen_aborted(codegen: Self::OngoingCodegen);
-    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);
-    fn compile_codegen_unit<'a, 'tcx: 'a>(
-        &self,
-        tcx: TyCtxt<'a, 'tcx, 'tcx>,
-        cgu_name: InternedString,
-    ) -> Stats;
-}
diff --git a/src/librustc_codegen_llvm/interfaces/builder.rs b/src/librustc_codegen_llvm/interfaces/builder.rs
index 61e60d55e09..74a31975a39 100644
--- a/src/librustc_codegen_llvm/interfaces/builder.rs
+++ b/src/librustc_codegen_llvm/interfaces/builder.rs
@@ -213,7 +213,8 @@ pub trait BuilderMethods<'a, 'tcx: 'a>:
     fn set_cleanup(&self, landing_pad: Self::Value);
     fn resume(&self, exn: Self::Value) -> Self::Value;
     fn cleanup_pad(&self, parent: Option<Self::Value>, args: &[Self::Value]) -> Self::Funclet;
-    fn cleanup_ret(&self, funclet: &Self::Funclet, unwind: Option<Self::BasicBlock>) -> Self::Value;
+    fn cleanup_ret(&self, funclet: &Self::Funclet, unwind: Option<Self::BasicBlock>)
+        -> Self::Value;
     fn catch_pad(&self, parent: Self::Value, args: &[Self::Value]) -> Self::Funclet;
     fn catch_ret(&self, funclet: &Self::Funclet, unwind: Self::BasicBlock) -> Self::Value;
     fn catch_switch(
diff --git a/src/librustc_codegen_llvm/interfaces/debuginfo.rs b/src/librustc_codegen_llvm/interfaces/debuginfo.rs
index 4e24e12bc68..24f6cb85c7b 100644
--- a/src/librustc_codegen_llvm/interfaces/debuginfo.rs
+++ b/src/librustc_codegen_llvm/interfaces/debuginfo.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use super::HasCodegen;
 use debuginfo::{FunctionDebugContext, MirDebugScope, VariableAccess, VariableKind};
 use monomorphize::Instance;
diff --git a/src/librustc_codegen_llvm/interfaces/declare.rs b/src/librustc_codegen_llvm/interfaces/declare.rs
index 5c9aedd1a3b..373220fd345 100644
--- a/src/librustc_codegen_llvm/interfaces/declare.rs
+++ b/src/librustc_codegen_llvm/interfaces/declare.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use monomorphize::Instance;
 use rustc::hir::def_id::DefId;
 use rustc::mir::mono::{Linkage, Visibility};
diff --git a/src/librustc_codegen_llvm/interfaces/intrinsic.rs b/src/librustc_codegen_llvm/interfaces/intrinsic.rs
index 5f2994c1a83..1ea377b5a1d 100644
--- a/src/librustc_codegen_llvm/interfaces/intrinsic.rs
+++ b/src/librustc_codegen_llvm/interfaces/intrinsic.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use super::HasCodegen;
 use abi::FnType;
 use mir::operand::OperandRef;
diff --git a/src/librustc_codegen_llvm/interfaces/misc.rs b/src/librustc_codegen_llvm/interfaces/misc.rs
index 2557b51b76d..6e6af597a76 100644
--- a/src/librustc_codegen_llvm/interfaces/misc.rs
+++ b/src/librustc_codegen_llvm/interfaces/misc.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use libc::c_uint;
 use monomorphize::partitioning::CodegenUnit;
 use rustc::mir::mono::Stats;
diff --git a/src/librustc_codegen_llvm/interfaces/mod.rs b/src/librustc_codegen_llvm/interfaces/mod.rs
index f1040020aff..61aa7e29326 100644
--- a/src/librustc_codegen_llvm/interfaces/mod.rs
+++ b/src/librustc_codegen_llvm/interfaces/mod.rs
@@ -10,7 +10,6 @@
 
 mod abi;
 mod asm;
-mod backend;
 mod builder;
 mod consts;
 mod debuginfo;
@@ -22,7 +21,6 @@ mod type_;
 
 pub use self::abi::{AbiBuilderMethods, AbiMethods};
 pub use self::asm::{AsmBuilderMethods, AsmMethods};
-pub use self::backend::{Backend, BackendMethods, BackendTypes};
 pub use self::builder::BuilderMethods;
 pub use self::consts::ConstMethods;
 pub use self::debuginfo::{DebugInfoBuilderMethods, DebugInfoMethods};
@@ -33,8 +31,7 @@ pub use self::statics::StaticMethods;
 pub use self::type_::{
     ArgTypeMethods, BaseTypeMethods, DerivedTypeMethods, LayoutTypeMethods, TypeMethods,
 };
-
-use std::fmt;
+pub use rustc_codegen_utils::interfaces::{Backend, BackendMethods, BackendTypes, CodegenObject};
 
 pub trait CodegenMethods<'tcx>:
     Backend<'tcx>
@@ -76,6 +73,3 @@ pub trait HasCodegen<'tcx>: Backend<'tcx> {
             DIScope = Self::DIScope,
         >;
 }
-
-pub trait CodegenObject: Copy + PartialEq + fmt::Debug {}
-impl<T: Copy + PartialEq + fmt::Debug> CodegenObject for T {}
diff --git a/src/librustc_codegen_llvm/interfaces/statics.rs b/src/librustc_codegen_llvm/interfaces/statics.rs
index 0feb9d5255f..27748a8dd42 100644
--- a/src/librustc_codegen_llvm/interfaces/statics.rs
+++ b/src/librustc_codegen_llvm/interfaces/statics.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use rustc::hir::def_id::DefId;
 use rustc::ty::layout::Align;
 
diff --git a/src/librustc_codegen_llvm/interfaces/type_.rs b/src/librustc_codegen_llvm/interfaces/type_.rs
index a03bcac5ecd..775ca2d2d02 100644
--- a/src/librustc_codegen_llvm/interfaces/type_.rs
+++ b/src/librustc_codegen_llvm/interfaces/type_.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::backend::Backend;
+use super::Backend;
 use super::HasCodegen;
 use mir::place::PlaceRef;
 use rustc::ty::layout::TyLayout;
diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs
index 395fbae6aad..e8f488ab04c 100644
--- a/src/librustc_codegen_llvm/lib.rs
+++ b/src/librustc_codegen_llvm/lib.rs
@@ -37,7 +37,6 @@
 #![feature(static_nobundle)]
 
 use back::write::create_target_machine;
-use rustc::dep_graph::WorkProduct;
 use syntax_pos::symbol::Symbol;
 
 #[macro_use] extern crate bitflags;
@@ -67,7 +66,6 @@ extern crate cc; // Used to locate MSVC
 extern crate tempfile;
 extern crate memmap;
 
-use back::bytecode::RLIB_BYTECODE_EXTENSION;
 use interfaces::*;
 use time_graph::TimeGraph;
 use std::sync::mpsc::Receiver;
@@ -93,7 +91,7 @@ use rustc::util::time_graph;
 use rustc::util::nodemap::{FxHashSet, FxHashMap};
 use rustc::util::profiling::ProfileCategory;
 use rustc_mir::monomorphize;
-use rustc_codegen_utils::{CompiledModule, ModuleKind};
+use rustc_codegen_utils::{ModuleCodegen, CompiledModule};
 use rustc_codegen_utils::codegen_backend::CodegenBackend;
 use rustc_data_structures::svh::Svh;
 
@@ -329,56 +327,6 @@ pub fn __rustc_codegen_backend() -> Box<dyn CodegenBackend> {
     LlvmCodegenBackend::new()
 }
 
-pub struct ModuleCodegen<M> {
-    /// The name of the module. When the crate may be saved between
-    /// compilations, incremental compilation requires that name be
-    /// unique amongst **all** crates.  Therefore, it should contain
-    /// something unique to this crate (e.g., a module path) as well
-    /// as the crate name and disambiguator.
-    /// We currently generate these names via CodegenUnit::build_cgu_name().
-    name: String,
-    module_llvm: M,
-    kind: ModuleKind,
-}
-
-struct CachedModuleCodegen {
-    name: String,
-    source: WorkProduct,
-}
-
-impl ModuleCodegen<ModuleLlvm> {
-    fn into_compiled_module(self,
-                            emit_obj: bool,
-                            emit_bc: bool,
-                            emit_bc_compressed: bool,
-                            outputs: &OutputFilenames) -> CompiledModule {
-        let object = if emit_obj {
-            Some(outputs.temp_path(OutputType::Object, Some(&self.name)))
-        } else {
-            None
-        };
-        let bytecode = if emit_bc {
-            Some(outputs.temp_path(OutputType::Bitcode, Some(&self.name)))
-        } else {
-            None
-        };
-        let bytecode_compressed = if emit_bc_compressed {
-            Some(outputs.temp_path(OutputType::Bitcode, Some(&self.name))
-                        .with_extension(RLIB_BYTECODE_EXTENSION))
-        } else {
-            None
-        };
-
-        CompiledModule {
-            name: self.name.clone(),
-            kind: self.kind,
-            object,
-            bytecode,
-            bytecode_compressed,
-        }
-    }
-}
-
 pub struct ModuleLlvm {
     llcx: &'static mut llvm::Context,
     llmod_raw: *const llvm::Module,