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-03 16:56:24 +0200
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2018-11-16 15:08:18 +0200
commit015e4441f5c540300477a7937a1517d407bc8436 (patch)
treecc2104db0ba7b33703e0f59749f5ec8b287bc5b6 /src/librustc_codegen_llvm
parentc0a428ee702329b0ad818a67a6ecc9617df267c7 (diff)
downloadrust-015e4441f5c540300477a7937a1517d407bc8436.tar.gz
rust-015e4441f5c540300477a7937a1517d407bc8436.zip
Finished moving backend-agnostic code to rustc_codegen_ssa
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/abi.rs9
-rw-r--r--src/librustc_codegen_llvm/asm.rs6
-rw-r--r--src/librustc_codegen_llvm/attributes.rs2
-rw-r--r--src/librustc_codegen_llvm/back/link.rs3
-rw-r--r--src/librustc_codegen_llvm/back/write.rs3
-rw-r--r--src/librustc_codegen_llvm/base.rs56
-rw-r--r--src/librustc_codegen_llvm/builder.rs12
-rw-r--r--src/librustc_codegen_llvm/callee.rs6
-rw-r--r--src/librustc_codegen_llvm/common.rs13
-rw-r--r--src/librustc_codegen_llvm/consts.rs11
-rw-r--r--src/librustc_codegen_llvm/context.rs19
-rw-r--r--src/librustc_codegen_llvm/debuginfo/create_scope_map.rs2
-rw-r--r--src/librustc_codegen_llvm/debuginfo/gdb.rs2
-rw-r--r--src/librustc_codegen_llvm/debuginfo/metadata.rs3
-rw-r--r--src/librustc_codegen_llvm/debuginfo/mod.rs15
-rw-r--r--src/librustc_codegen_llvm/debuginfo/source_loc.rs4
-rw-r--r--src/librustc_codegen_llvm/debuginfo/type_names.rs2
-rw-r--r--src/librustc_codegen_llvm/debuginfo/utils.rs2
-rw-r--r--src/librustc_codegen_llvm/declare.rs2
-rw-r--r--src/librustc_codegen_llvm/intrinsic.rs13
-rw-r--r--src/librustc_codegen_llvm/lib.rs22
-rw-r--r--src/librustc_codegen_llvm/mono_item.rs5
-rw-r--r--src/librustc_codegen_llvm/type_.rs10
-rw-r--r--src/librustc_codegen_llvm/type_of.rs2
24 files changed, 90 insertions, 134 deletions
diff --git a/src/librustc_codegen_llvm/abi.rs b/src/librustc_codegen_llvm/abi.rs
index 4c2ff2db8ad..d0e22908728 100644
--- a/src/librustc_codegen_llvm/abi.rs
+++ b/src/librustc_codegen_llvm/abi.rs
@@ -9,16 +9,17 @@
 // except according to those terms.
 
 use llvm::{self, AttributePlace};
-use builder::{Builder, MemFlags};
+use rustc_codegen_ssa::MemFlags;
+use builder::Builder;
 use context::CodegenCx;
-use mir::place::PlaceRef;
-use mir::operand::OperandValue;
+use rustc_codegen_ssa::mir::place::PlaceRef;
+use rustc_codegen_ssa::mir::operand::OperandValue;
 use type_::Type;
 use type_of::{LayoutLlvmExt, PointerKind};
 use value::Value;
 use rustc_target::abi::call::ArgType;
 
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use rustc_target::abi::{HasDataLayout, LayoutOf, Size, TyLayout, Abi as LayoutAbi};
 use rustc::ty::{self, Ty, Instance};
diff --git a/src/librustc_codegen_llvm/asm.rs b/src/librustc_codegen_llvm/asm.rs
index 8cbc2cba7de..c0e7f949809 100644
--- a/src/librustc_codegen_llvm/asm.rs
+++ b/src/librustc_codegen_llvm/asm.rs
@@ -15,10 +15,10 @@ use builder::Builder;
 use value::Value;
 
 use rustc::hir;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
-use mir::place::PlaceRef;
-use mir::operand::OperandValue;
+use rustc_codegen_ssa::mir::place::PlaceRef;
+use rustc_codegen_ssa::mir::operand::OperandValue;
 
 use std::ffi::CString;
 use libc::{c_uint, c_char};
diff --git a/src/librustc_codegen_llvm/attributes.rs b/src/librustc_codegen_llvm/attributes.rs
index 7570d22c4df..a6ecd1ab55d 100644
--- a/src/librustc_codegen_llvm/attributes.rs
+++ b/src/librustc_codegen_llvm/attributes.rs
@@ -21,7 +21,7 @@ use rustc::ty::query::Providers;
 use rustc_data_structures::sync::Lrc;
 use rustc_data_structures::fx::FxHashMap;
 use rustc_target::spec::PanicStrategy;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use attributes;
 use llvm::{self, Attribute};
diff --git a/src/librustc_codegen_llvm/back/link.rs b/src/librustc_codegen_llvm/back/link.rs
index 111637b6aa9..e3143e89f79 100644
--- a/src/librustc_codegen_llvm/back/link.rs
+++ b/src/librustc_codegen_llvm/back/link.rs
@@ -22,7 +22,8 @@ use rustc::session::search_paths::PathKind;
 use rustc::session::Session;
 use rustc::middle::cstore::{NativeLibrary, LibSource, NativeLibraryKind};
 use rustc::middle::dependency_format::Linkage;
-use {CodegenResults, CrateInfo};
+use rustc_codegen_ssa::CrateInfo;
+use CodegenResults;
 use rustc::util::common::time;
 use rustc_fs_util::fix_windows_verbatim_for_gcc;
 use rustc::hir::def_id::CrateNum;
diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs
index 60cfe203e40..1e167046daf 100644
--- a/src/librustc_codegen_llvm/back/write.rs
+++ b/src/librustc_codegen_llvm/back/write.rs
@@ -27,8 +27,7 @@ use time_graph::{self, TimeGraph, Timeline};
 use llvm::{self, DiagnosticInfo, PassManager, SMDiagnostic};
 use llvm_util;
 use {CodegenResults, ModuleLlvm};
-use rustc_codegen_ssa::{ModuleCodegen, ModuleKind, CachedModuleCodegen, CompiledModule};
-use CrateInfo;
+use rustc_codegen_ssa::{ModuleCodegen, ModuleKind, CachedModuleCodegen, CompiledModule, CrateInfo};
 use rustc::hir::def_id::{CrateNum, LOCAL_CRATE};
 use rustc::ty::TyCtxt;
 use rustc::util::common::{time_ext, time_depth, set_time_depth, print_time_passes_entry};
diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs
index bd396e89e07..5f8601cb6da 100644
--- a/src/librustc_codegen_llvm/base.rs
+++ b/src/librustc_codegen_llvm/base.rs
@@ -24,68 +24,34 @@
 //!     int) and rec(x=int, y=int, z=int) will have the same llvm::Type.
 
 use super::ModuleLlvm;
-use rustc_codegen_ssa::{ModuleCodegen, ModuleKind, CachedModuleCodegen};
+use rustc_codegen_ssa::{ModuleCodegen, ModuleKind};
+use rustc_codegen_ssa::base::maybe_create_entry_wrapper;
 use super::LlvmCodegenBackend;
 
-use abi;
 use back::write;
 use llvm;
 use metadata;
-use rustc::dep_graph::cgu_reuse_tracker::CguReuse;
-use rustc::hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
-use rustc::middle::lang_items::StartFnLangItem;
-use rustc::middle::weak_lang_items;
-use rustc::mir::mono::{Linkage, Visibility, Stats, CodegenUnitNameBuilder};
+use rustc::mir::mono::{Linkage, Visibility, Stats};
 use rustc::middle::cstore::{EncodedMetadata};
-use rustc::ty::{self, Ty, TyCtxt};
-use rustc::ty::layout::{self, Align, TyLayout, LayoutOf, HasTyCtxt};
-use rustc::ty::query::Providers;
-use rustc::middle::cstore::{self, LinkagePreference};
+use rustc::ty::TyCtxt;
 use rustc::middle::exported_symbols;
-use rustc::util::common::{time, print_time_passes_entry};
-use rustc::util::profiling::ProfileCategory;
-use rustc::session::config::{self, DebugInfo, EntryFnType, Lto};
-use rustc::session::Session;
-use rustc_incremental;
-use mir::place::PlaceRef;
-use builder::{Builder, MemFlags};
-use callee;
-use rustc_mir::monomorphize::item::DefPathBasedNames;
+use rustc::session::config::{self, DebugInfo};
+use builder::Builder;
 use common;
-use rustc_codegen_ssa::common::{RealPredicate, TypeKind, IntPredicate};
-use meth;
-use mir;
 use context::CodegenCx;
-use monomorphize::Instance;
-use monomorphize::partitioning::{CodegenUnit, CodegenUnitExt};
-use rustc_codegen_utils::symbol_names_test;
-use time_graph;
-use mono_item::{MonoItem, MonoItemExt};
-
-use rustc::util::nodemap::FxHashMap;
-use CrateInfo;
+use monomorphize::partitioning::CodegenUnitExt;
+use rustc_codegen_ssa::mono_item::MonoItemExt;
 use rustc_data_structures::small_c_str::SmallCStr;
-use rustc_data_structures::sync::Lrc;
 
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
-use std::any::Any;
-use std::cmp;
 use std::ffi::CString;
-use std::marker;
-use std::ops::{Deref, DerefMut};
-use std::sync::mpsc;
-use std::time::{Instant, Duration};
-use syntax_pos::Span;
+use std::time::Instant;
 use syntax_pos::symbol::InternedString;
-use syntax::attr;
-use rustc::hir::{self, CodegenFnAttrs};
+use rustc::hir::CodegenFnAttrs;
 
 use value::Value;
 
-use mir::operand::OperandValue;
-
-use rustc_codegen_utils::check_for_rustc_errors_attr;
 
 pub(crate) fn write_metadata<'a, 'gcx>(
     tcx: TyCtxt<'a, 'gcx, 'gcx>,
diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs
index 40fddef8be3..144ee3dd260 100644
--- a/src/librustc_codegen_llvm/builder.rs
+++ b/src/librustc_codegen_llvm/builder.rs
@@ -11,7 +11,7 @@
 use llvm::{AtomicRmwBinOp, AtomicOrdering, SynchronizationScope, AsmDialect};
 use llvm::{self, False, BasicBlock};
 use rustc_codegen_ssa::common::{IntPredicate, TypeKind, RealPredicate};
-use rustc_codegen_ssa;
+use rustc_codegen_ssa::{self, MemFlags};
 use common::Funclet;
 use context::CodegenCx;
 use type_::Type;
@@ -22,11 +22,11 @@ use rustc::ty::{self, Ty, TyCtxt};
 use rustc::ty::layout::{self, Align, Size, TyLayout};
 use rustc::session::config;
 use rustc_data_structures::small_c_str::SmallCStr;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 use syntax;
-use base;
-use mir::operand::{OperandValue, OperandRef};
-use mir::place::PlaceRef;
+use rustc_codegen_ssa::base::to_immediate;
+use rustc_codegen_ssa::mir::operand::{OperandValue, OperandRef};
+use rustc_codegen_ssa::mir::place::PlaceRef;
 use std::borrow::Cow;
 use std::ops::Range;
 use std::ptr;
@@ -582,7 +582,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
                 }
                 load
             });
-            OperandValue::Immediate(base::to_immediate(self, llval, place.layout))
+            OperandValue::Immediate(to_immediate(self, llval, place.layout))
         } else if let layout::Abi::ScalarPair(ref a, ref b) = place.layout.abi {
             let load = |i, scalar: &layout::Scalar| {
                 let llptr = self.struct_gep(place.llval, i as u64);
diff --git a/src/librustc_codegen_llvm/callee.rs b/src/librustc_codegen_llvm/callee.rs
index d5b398d8a33..e7c6cc50eba 100644
--- a/src/librustc_codegen_llvm/callee.rs
+++ b/src/librustc_codegen_llvm/callee.rs
@@ -19,12 +19,10 @@ use llvm;
 use monomorphize::Instance;
 use context::CodegenCx;
 use value::Value;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
-use rustc::hir::def_id::DefId;
-use rustc::ty::{self, TypeFoldable};
+use rustc::ty::TypeFoldable;
 use rustc::ty::layout::{LayoutOf, HasTyCtxt};
-use rustc::ty::subst::Substs;
 
 /// Codegens a reference to a fn/method item, monomorphizing and
 /// inlining as it goes.
diff --git a/src/librustc_codegen_llvm/common.rs b/src/librustc_codegen_llvm/common.rs
index 2211ec5247f..11fc67fb92b 100644
--- a/src/librustc_codegen_llvm/common.rs
+++ b/src/librustc_codegen_llvm/common.rs
@@ -13,29 +13,22 @@
 //! Code that is useful in various codegen modules.
 
 use llvm::{self, True, False, Bool, BasicBlock, OperandBundleDef};
-use rustc::hir::def_id::DefId;
-use rustc::middle::lang_items::LangItem;
 use abi;
-use base;
 use consts;
 use type_::Type;
 use type_of::LayoutLlvmExt;
 use value::Value;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
-use rustc::ty::{Ty, TyCtxt};
 use rustc::ty::layout::{HasDataLayout, LayoutOf, self, TyLayout, Size};
 use rustc::mir::interpret::{Scalar, AllocType, Allocation};
-use rustc::hir;
-use mir::constant::const_alloc_to_llvm;
-use mir::place::PlaceRef;
-use rustc_codegen_ssa::common::TypeKind;
+use consts::const_alloc_to_llvm;
+use rustc_codegen_ssa::mir::place::PlaceRef;
 
 use libc::{c_uint, c_char};
 
 use syntax::symbol::LocalInternedString;
 use syntax::ast::Mutability;
-use syntax_pos::Span;
 
 pub use context::CodegenCx;
 
diff --git a/src/librustc_codegen_llvm/consts.rs b/src/librustc_codegen_llvm/consts.rs
index 8a5a817f574..f8876207b2e 100644
--- a/src/librustc_codegen_llvm/consts.rs
+++ b/src/librustc_codegen_llvm/consts.rs
@@ -11,21 +11,24 @@
 use libc::c_uint;
 use llvm::{self, SetUnnamedAddr, True};
 use rustc::hir::def_id::DefId;
+use rustc::mir::interpret::{ConstValue, Allocation, read_target_uint,
+    Pointer, ErrorHandled, GlobalId};
 use rustc::hir::Node;
 use debuginfo;
-use base;
 use monomorphize::MonoItem;
 use common::CodegenCx;
 use monomorphize::Instance;
 use syntax_pos::Span;
+use rustc_target::abi::HasDataLayout;
 use syntax_pos::symbol::LocalInternedString;
+use base;
 use type_::Type;
 use type_of::LayoutLlvmExt;
 use value::Value;
 use rustc::ty::{self, Ty};
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
-use rustc::ty::layout::{Align, LayoutOf};
+use rustc::ty::layout::{self, Size, Align, LayoutOf};
 
 use rustc::hir::{self, CodegenFnAttrs, CodegenFnAttrFlags};
 
@@ -360,7 +363,7 @@ impl StaticMethods<'tcx> for CodegenCx<'ll, 'tcx> {
         unsafe {
             let attrs = self.tcx.codegen_fn_attrs(def_id);
 
-            let (v, alloc) = match ::mir::codegen_static_initializer(&self, def_id) {
+            let (v, alloc) = match codegen_static_initializer(&self, def_id) {
                 Ok(v) => v,
                 // Error has already been reported
                 Err(_) => return,
diff --git a/src/librustc_codegen_llvm/context.rs b/src/librustc_codegen_llvm/context.rs
index 3eb9728e90c..2e229c0f4d1 100644
--- a/src/librustc_codegen_llvm/context.rs
+++ b/src/librustc_codegen_llvm/context.rs
@@ -14,15 +14,13 @@ use llvm_util;
 use rustc::dep_graph::DepGraphSafe;
 use rustc::hir;
 use debuginfo;
-use callee;
-use base;
 use monomorphize::Instance;
 use value::Value;
 
 use monomorphize::partitioning::CodegenUnit;
 use type_::Type;
 use type_of::PointeeInfo;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 use libc::c_uint;
 
 use rustc_data_structures::base_n;
@@ -34,6 +32,9 @@ use rustc::ty::layout::{LayoutError, LayoutOf, Size, TyLayout, VariantIdx};
 use rustc::ty::{self, Ty, TyCtxt};
 use rustc::util::nodemap::FxHashMap;
 use rustc_target::spec::{HasTargetSpec, Target};
+use rustc_codegen_ssa::callee::resolve_and_get_fn;
+use rustc_codegen_ssa::base::wants_msvc_seh;
+use callee::get_fn;
 
 use std::ffi::CStr;
 use std::cell::{Cell, RefCell};
@@ -327,7 +328,7 @@ impl MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
     }
 
     fn get_fn(&self, instance: Instance<'tcx>) -> &'ll Value {
-        callee::get_fn(&&self,instance)
+        get_fn(&&self,instance)
     }
 
     fn get_param(&self, llfn: &'ll Value, index: c_uint) -> &'ll Value {
@@ -360,11 +361,11 @@ impl MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
         }
         let tcx = self.tcx;
         let llfn = match tcx.lang_items().eh_personality() {
-            Some(def_id) if !base::wants_msvc_seh(self.sess()) => {
-                callee::resolve_and_get_fn(self, def_id, tcx.intern_substs(&[]))
+            Some(def_id) if !wants_msvc_seh(self.sess()) => {
+                resolve_and_get_fn(self, def_id, tcx.intern_substs(&[]))
             }
             _ => {
-                let name = if base::wants_msvc_seh(self.sess()) {
+                let name = if wants_msvc_seh(self.sess()) {
                     "__CxxFrameHandler3"
                 } else {
                     "rust_eh_personality"
@@ -390,7 +391,7 @@ impl MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
         let tcx = self.tcx;
         assert!(self.sess().target.target.options.custom_unwind_resume);
         if let Some(def_id) = tcx.lang_items().eh_unwind_resume() {
-            let llfn = callee::resolve_and_get_fn(self, def_id, tcx.intern_substs(&[]));
+            let llfn = resolve_and_get_fn(self, def_id, tcx.intern_substs(&[]));
             unwresume.set(Some(llfn));
             return llfn;
         }
@@ -446,7 +447,7 @@ impl MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
         attributes::apply_target_cpu_attr(self, llfn)
     }
 
-    fn closure_env_needs_indirect_debuginfo(&self) {
+    fn closure_env_needs_indirect_debuginfo(&self) -> bool {
         llvm_util::get_major_version() < 6
     }
 
diff --git a/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs b/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs
index 8eb266f8069..c18e126e520 100644
--- a/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs
+++ b/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use super::{FunctionDebugContext, FunctionDebugContextData};
+use rustc_codegen_ssa::debuginfo::{FunctionDebugContext, FunctionDebugContextData, MirDebugScope};
 use super::metadata::file_metadata;
 use super::utils::{DIB, span_start};
 
diff --git a/src/librustc_codegen_llvm/debuginfo/gdb.rs b/src/librustc_codegen_llvm/debuginfo/gdb.rs
index 607920091bc..26e359f39cf 100644
--- a/src/librustc_codegen_llvm/debuginfo/gdb.rs
+++ b/src/librustc_codegen_llvm/debuginfo/gdb.rs
@@ -16,7 +16,7 @@ use common::CodegenCx;
 use builder::Builder;
 use rustc::session::config::DebugInfo;
 use value::Value;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use syntax::attr;
 
diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs
index 81d10609e2f..8a72fef49d7 100644
--- a/src/librustc_codegen_llvm/debuginfo/metadata.rs
+++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs
@@ -17,9 +17,8 @@ use super::utils::{debug_context, DIB, span_start,
 use super::namespace::mangled_name_of_instance;
 use super::type_names::compute_debuginfo_type_name;
 use super::{CrateDebugContext};
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 use abi;
-use interfaces::ConstMethods;
 use value::Value;
 
 use llvm;
diff --git a/src/librustc_codegen_llvm/debuginfo/mod.rs b/src/librustc_codegen_llvm/debuginfo/mod.rs
index ddd346e99d5..67ef7918668 100644
--- a/src/librustc_codegen_llvm/debuginfo/mod.rs
+++ b/src/librustc_codegen_llvm/debuginfo/mod.rs
@@ -11,8 +11,8 @@
 // See doc.rs for documentation.
 mod doc;
 
-use self::VariableAccess::*;
-use self::VariableKind::*;
+use rustc_codegen_ssa::debuginfo::VariableAccess::*;
+use rustc_codegen_ssa::debuginfo::VariableKind::*;
 
 use self::utils::{DIB, span_start, create_DIArray, is_node_local_to_unit};
 use self::namespace::mangled_name_of_instance;
@@ -38,6 +38,8 @@ use rustc::util::nodemap::{DefIdMap, FxHashMap, FxHashSet};
 use rustc_data_structures::small_c_str::SmallCStr;
 use rustc_data_structures::indexed_vec::IndexVec;
 use value::Value;
+use rustc_codegen_ssa::debuginfo::{FunctionDebugContext, MirDebugScope, VariableAccess,
+    VariableKind, FunctionDebugContextData};
 
 use libc::c_uint;
 use std::cell::{Cell, RefCell};
@@ -47,7 +49,7 @@ use syntax_pos::{self, Span, Pos};
 use syntax::ast;
 use syntax::symbol::{Symbol, InternedString};
 use rustc::ty::layout::{self, LayoutOf, HasTyCtxt};
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 pub mod gdb;
 mod utils;
@@ -57,8 +59,7 @@ pub mod metadata;
 mod create_scope_map;
 mod source_loc;
 
-pub use self::create_scope_map::{create_mir_scopes, MirDebugScope};
-pub use self::source_loc::start_emitting_source_locations;
+pub use self::create_scope_map::{create_mir_scopes};
 pub use self::metadata::create_global_var_metadata;
 pub use self::metadata::extend_scope_to_file;
 pub use self::source_loc::set_source_location;
@@ -542,12 +543,12 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
         finalize(self)
     }
 
-    fn debuginfo_upvar_decls_ops_sequence(&self, byte_offset_of_var_in_env: u64) -> &[i64] {
+    fn debuginfo_upvar_decls_ops_sequence(&self, byte_offset_of_var_in_env: u64) -> [i64; 4] {
         unsafe {
             [llvm::LLVMRustDIBuilderCreateOpDeref(),
              llvm::LLVMRustDIBuilderCreateOpPlusUconst(),
              byte_offset_of_var_in_env as i64,
              llvm::LLVMRustDIBuilderCreateOpDeref()]
-        };
+        }
     }
 }
diff --git a/src/librustc_codegen_llvm/debuginfo/source_loc.rs b/src/librustc_codegen_llvm/debuginfo/source_loc.rs
index a4fe912d1d7..e4065b6ef36 100644
--- a/src/librustc_codegen_llvm/debuginfo/source_loc.rs
+++ b/src/librustc_codegen_llvm/debuginfo/source_loc.rs
@@ -12,12 +12,12 @@ use self::InternalDebugLocation::*;
 
 use super::utils::{debug_context, span_start};
 use super::metadata::UNKNOWN_COLUMN_NUMBER;
-use super::FunctionDebugContext;
+use rustc_codegen_ssa::debuginfo::FunctionDebugContext;
 
 use llvm;
 use llvm::debuginfo::DIScope;
 use builder::Builder;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use libc::c_uint;
 use syntax_pos::{Span, Pos};
diff --git a/src/librustc_codegen_llvm/debuginfo/type_names.rs b/src/librustc_codegen_llvm/debuginfo/type_names.rs
index 5fbeb2124ac..d8fd8b7f7f4 100644
--- a/src/librustc_codegen_llvm/debuginfo/type_names.rs
+++ b/src/librustc_codegen_llvm/debuginfo/type_names.rs
@@ -14,7 +14,7 @@ use common::CodegenCx;
 use rustc::hir::def_id::DefId;
 use rustc::ty::subst::Substs;
 use rustc::ty::{self, Ty};
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use rustc::hir;
 
diff --git a/src/librustc_codegen_llvm/debuginfo/utils.rs b/src/librustc_codegen_llvm/debuginfo/utils.rs
index 2d1ec840882..ddd1a176957 100644
--- a/src/librustc_codegen_llvm/debuginfo/utils.rs
+++ b/src/librustc_codegen_llvm/debuginfo/utils.rs
@@ -19,7 +19,7 @@ use rustc::ty::DefIdTree;
 use llvm;
 use llvm::debuginfo::{DIScope, DIBuilder, DIDescriptor, DIArray};
 use common::{CodegenCx};
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use syntax_pos::{self, Span};
 
diff --git a/src/librustc_codegen_llvm/declare.rs b/src/librustc_codegen_llvm/declare.rs
index b5c64adb427..135780048ae 100644
--- a/src/librustc_codegen_llvm/declare.rs
+++ b/src/librustc_codegen_llvm/declare.rs
@@ -31,7 +31,7 @@ use abi::{Abi, FnType, FnTypeExt};
 use attributes;
 use context::CodegenCx;
 use type_::Type;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 use value::Value;
 
 /// Declare a function.
diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs
index c7b36cc5891..86a41fb05d1 100644
--- a/src/librustc_codegen_llvm/intrinsic.rs
+++ b/src/librustc_codegen_llvm/intrinsic.rs
@@ -15,11 +15,12 @@ use intrinsics::{self, Intrinsic};
 use llvm;
 use llvm_util;
 use abi::{Abi, FnType, LlvmType, PassMode};
-use mir::place::PlaceRef;
-use mir::operand::{OperandRef, OperandValue};
-use base::*;
+use rustc_codegen_ssa::MemFlags;
+use rustc_codegen_ssa::mir::place::PlaceRef;
+use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
+use rustc_codegen_ssa::glue;
+use rustc_codegen_ssa::base::{to_immediate, wants_msvc_seh, compare_simd_types};
 use context::CodegenCx;
-use glue;
 use type_::Type;
 use type_of::LayoutLlvmExt;
 use rustc::ty::{self, Ty};
@@ -28,10 +29,10 @@ use rustc_codegen_ssa::common::TypeKind;
 use rustc::hir;
 use syntax::ast;
 use syntax::symbol::Symbol;
-use builder::{Builder, MemFlags};
+use builder::Builder;
 use value::Value;
 
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use rustc::session::Session;
 use syntax_pos::Span;
diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs
index 41796d24d9e..560d266e926 100644
--- a/src/librustc_codegen_llvm/lib.rs
+++ b/src/librustc_codegen_llvm/lib.rs
@@ -40,6 +40,7 @@ use back::write::create_target_machine;
 use syntax_pos::symbol::Symbol;
 
 extern crate flate2;
+#[macro_use] extern crate bitflags;
 extern crate libc;
 #[macro_use] extern crate rustc;
 extern crate jobserver;
@@ -66,7 +67,7 @@ extern crate cc; // Used to locate MSVC
 extern crate tempfile;
 extern crate memmap;
 
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 use time_graph::TimeGraph;
 use std::sync::mpsc::Receiver;
 use back::write::{self, OngoingCodegen};
@@ -76,22 +77,17 @@ use rustc::mir::mono::Stats;
 pub use llvm_util::target_features;
 use std::any::Any;
 use std::sync::mpsc;
-use rustc_data_structures::sync::Lrc;
 
 use rustc::dep_graph::DepGraph;
-use rustc::hir::def_id::CrateNum;
 use rustc::middle::allocator::AllocatorKind;
 use rustc::middle::cstore::{EncodedMetadata, MetadataLoader};
-use rustc::middle::cstore::{NativeLibrary, CrateSource, LibSource};
-use rustc::middle::lang_items::LangItem;
 use rustc::session::{Session, CompileIncomplete};
 use rustc::session::config::{OutputFilenames, OutputType, PrintRequest};
 use rustc::ty::{self, TyCtxt};
 use rustc::util::time_graph;
-use rustc::util::nodemap::{FxHashSet, FxHashMap};
 use rustc::util::profiling::ProfileCategory;
 use rustc_mir::monomorphize;
-use rustc_codegen_ssa::{interfaces, ModuleCodegen, CompiledModule};
+use rustc_codegen_ssa::{ModuleCodegen, CompiledModule, CachedModuleCodegen, CrateInfo};
 use rustc_codegen_utils::codegen_backend::CodegenBackend;
 use rustc_data_structures::svh::Svh;
 
@@ -157,7 +153,7 @@ impl BackendMethods for LlvmCodegenBackend {
     ) -> OngoingCodegen {
         write::start_async_codegen(tcx, time_graph, metadata, coordinator_receive, total_cgus)
     }
-    fn submit_pre_codegened_module_to_llvm(
+    fn submit_pre_codegened_module_to_backend(
         &self,
         codegen: &OngoingCodegen,
         tcx: TyCtxt,
@@ -165,10 +161,10 @@ impl BackendMethods for LlvmCodegenBackend {
     ) {
         codegen.submit_pre_codegened_module_to_llvm(tcx, module)
     }
-    fn submit_pre_lto_module_to_llvm(&self, tcx: TyCtxt, module: CachedModuleCodegen) {
+    fn submit_pre_lto_module_to_backend(&self, tcx: TyCtxt, module: CachedModuleCodegen) {
         write::submit_pre_lto_module_to_llvm(tcx, module)
     }
-    fn submit_post_lto_module_to_llvm(&self, tcx: TyCtxt, module: CachedModuleCodegen) {
+    fn submit_post_lto_module_to_backend(&self, tcx: TyCtxt, module: CachedModuleCodegen) {
         write::submit_post_lto_module_to_llvm(tcx, module)
     }
     fn codegen_aborted(codegen: OngoingCodegen) {
@@ -260,13 +256,13 @@ impl CodegenBackend for LlvmCodegenBackend {
     fn provide(&self, providers: &mut ty::query::Providers) {
         rustc_codegen_utils::symbol_export::provide(providers);
         rustc_codegen_utils::symbol_names::provide(providers);
-        base::provide_both(providers);
+        rustc_codegen_ssa::base::provide_both(providers);
         attributes::provide(providers);
     }
 
     fn provide_extern(&self, providers: &mut ty::query::Providers) {
         rustc_codegen_utils::symbol_export::provide_extern(providers);
-        base::provide_both(providers);
+        rustc_codegen_ssa::base::provide_both(providers);
         attributes::provide_extern(providers);
     }
 
@@ -275,7 +271,7 @@ impl CodegenBackend for LlvmCodegenBackend {
         tcx: TyCtxt<'a, 'tcx, 'tcx>,
         rx: mpsc::Receiver<Box<dyn Any + Send>>
     ) -> Box<dyn Any> {
-        box base::codegen_crate(LlvmCodegenBackend(()), tcx, rx)
+        box rustc_codegen_ssa::base::codegen_crate(LlvmCodegenBackend(()), tcx, rx)
     }
 
     fn join_codegen_and_link(
diff --git a/src/librustc_codegen_llvm/mono_item.rs b/src/librustc_codegen_llvm/mono_item.rs
index 750e2ab0741..7111644ebb8 100644
--- a/src/librustc_codegen_llvm/mono_item.rs
+++ b/src/librustc_codegen_llvm/mono_item.rs
@@ -14,14 +14,11 @@ use context::CodegenCx;
 use llvm;
 use monomorphize::Instance;
 use type_of::LayoutLlvmExt;
-use rustc::hir;
-use rustc::hir::def::Def;
 use rustc::hir::def_id::{DefId, LOCAL_CRATE};
 use rustc::mir::mono::{Linkage, Visibility};
 use rustc::ty::TypeFoldable;
 use rustc::ty::layout::{LayoutOf, HasTyCtxt};
-use std::fmt;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 pub use rustc::mir::mono::MonoItem;
 
diff --git a/src/librustc_codegen_llvm/type_.rs b/src/librustc_codegen_llvm/type_.rs
index d21542a50fb..e22177ce31d 100644
--- a/src/librustc_codegen_llvm/type_.rs
+++ b/src/librustc_codegen_llvm/type_.rs
@@ -15,7 +15,7 @@ pub use llvm::Type;
 use llvm;
 use llvm::{Bool, False, True};
 use context::CodegenCx;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 use value::Value;
 
 
@@ -400,11 +400,11 @@ impl LayoutTypeMethods<'tcx> for CodegenCx<'ll, 'tcx> {
     fn is_backend_immediate(&self, layout: TyLayout<'tcx>) -> bool {
         layout.is_llvm_immediate()
     }
-    fn is_backend_scalar_pair(&self, ty: &TyLayout<'tcx>) -> bool {
-        ty.is_llvm_scalar_pair()
+    fn is_backend_scalar_pair(&self, layout: TyLayout<'tcx>) -> bool {
+        layout.is_llvm_scalar_pair()
     }
-    fn backend_field_index(&self, ty: &TyLayout<'tcx>, index: usize) -> u64 {
-        ty.llvm_field_index()
+    fn backend_field_index(&self, layout: TyLayout<'tcx>, index: usize) -> u64 {
+        layout.llvm_field_index(index)
     }
     fn scalar_pair_element_backend_type<'a>(
         &self,
diff --git a/src/librustc_codegen_llvm/type_of.rs b/src/librustc_codegen_llvm/type_of.rs
index de87b522439..880da34137d 100644
--- a/src/librustc_codegen_llvm/type_of.rs
+++ b/src/librustc_codegen_llvm/type_of.rs
@@ -16,7 +16,7 @@ use rustc::ty::layout::{self, Align, LayoutOf, Size, TyLayout};
 use rustc_target::abi::FloatTy;
 use rustc_mir::monomorphize::item::DefPathBasedNames;
 use type_::Type;
-use interfaces::*;
+use rustc_codegen_ssa::interfaces::*;
 
 use std::fmt::Write;