diff options
| author | Denis Merigoux <denis.merigoux@gmail.com> | 2018-10-01 10:32:09 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-11-16 14:40:16 +0200 |
| commit | b02e5cce169212bd4efe5857bc719d6ed47a53fc (patch) | |
| tree | 1e2f764304be421ed8b51400f97988890144343d /src/librustc_codegen_llvm | |
| parent | b06836e71a1358021c24a000be26612b5fcbee79 (diff) | |
| download | rust-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.rs | 3 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/back/write.rs | 4 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/base.rs | 26 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/asm.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/backend.rs | 80 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/builder.rs | 3 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/debuginfo.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/declare.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/intrinsic.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/misc.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/mod.rs | 8 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/statics.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/interfaces/type_.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/lib.rs | 54 |
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, |
