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-06 14:44:51 -0700
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2018-11-16 14:11:59 +0200
commita1d0d4f9439640d8694ebb7fa905f4e328d5febd (patch)
tree447f51146f100f004852565c52e10e7b3eabb260 /src/librustc_codegen_llvm
parente224f063e8b7ea16302d0b048b9272dfe8465734 (diff)
downloadrust-a1d0d4f9439640d8694ebb7fa905f4e328d5febd.tar.gz
rust-a1d0d4f9439640d8694ebb7fa905f4e328d5febd.zip
Removing LLVM content from CommonMethods -> ConstMethods
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/abi.rs2
-rw-r--r--src/librustc_codegen_llvm/asm.rs2
-rw-r--r--src/librustc_codegen_llvm/back/write.rs29
-rw-r--r--src/librustc_codegen_llvm/base.rs10
-rw-r--r--src/librustc_codegen_llvm/builder.rs2
-rw-r--r--src/librustc_codegen_llvm/callee.rs2
-rw-r--r--src/librustc_codegen_llvm/common.rs32
-rw-r--r--src/librustc_codegen_llvm/consts.rs2
-rw-r--r--src/librustc_codegen_llvm/debuginfo/gdb.rs2
-rw-r--r--src/librustc_codegen_llvm/debuginfo/metadata.rs2
-rw-r--r--src/librustc_codegen_llvm/glue.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/backend.rs2
-rw-r--r--src/librustc_codegen_llvm/interfaces/consts.rs (renamed from src/librustc_codegen_llvm/interfaces/common.rs)13
-rw-r--r--src/librustc_codegen_llvm/interfaces/mod.rs4
-rw-r--r--src/librustc_codegen_llvm/interfaces/type_.rs4
-rw-r--r--src/librustc_codegen_llvm/intrinsic.rs2
-rw-r--r--src/librustc_codegen_llvm/lib.rs30
-rw-r--r--src/librustc_codegen_llvm/meth.rs2
-rw-r--r--src/librustc_codegen_llvm/mir/block.rs2
-rw-r--r--src/librustc_codegen_llvm/mir/constant.rs2
-rw-r--r--src/librustc_codegen_llvm/mir/mod.rs2
-rw-r--r--src/librustc_codegen_llvm/mir/operand.rs2
-rw-r--r--src/librustc_codegen_llvm/mir/place.rs2
-rw-r--r--src/librustc_codegen_llvm/mir/rvalue.rs2
-rw-r--r--src/librustc_codegen_llvm/type_.rs23
25 files changed, 55 insertions, 124 deletions
diff --git a/src/librustc_codegen_llvm/abi.rs b/src/librustc_codegen_llvm/abi.rs
index 0d570bc8ada..7de657a4918 100644
--- a/src/librustc_codegen_llvm/abi.rs
+++ b/src/librustc_codegen_llvm/abi.rs
@@ -18,7 +18,7 @@ use type_::Type;
 use type_of::{LayoutLlvmExt, PointerKind};
 use value::Value;
 
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use rustc_target::abi::{HasDataLayout, LayoutOf, Size, TyLayout, Abi as LayoutAbi};
 use rustc::ty::{self, Ty};
diff --git a/src/librustc_codegen_llvm/asm.rs b/src/librustc_codegen_llvm/asm.rs
index 0a1cc1e3671..ecd371e8246 100644
--- a/src/librustc_codegen_llvm/asm.rs
+++ b/src/librustc_codegen_llvm/asm.rs
@@ -15,7 +15,7 @@ use builder::Builder;
 use value::Value;
 
 use rustc::hir;
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use mir::place::PlaceRef;
 use mir::operand::OperandValue;
diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs
index 6977b128509..8972a7e8f99 100644
--- a/src/librustc_codegen_llvm/back/write.rs
+++ b/src/librustc_codegen_llvm/back/write.rs
@@ -49,7 +49,6 @@ use context::{is_pie_binary, get_reloc_model};
 use common;
 use jobserver::{Client, Acquired};
 use rustc_demangle;
-use value::Value;
 use std::marker::PhantomData;
 
 use std::any::Any;
@@ -428,24 +427,6 @@ impl CodegenContext<'ll> {
     }
 }
 
-
-impl CodegenContext<'ll> {
-    fn val_ty(&self, v: &'ll Value) -> &'ll Type {
-        common::val_ty(v)
-    }
-
-    fn const_bytes_in_context(&self, llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value {
-        common::const_bytes_in_context(llcx, bytes)
-    }
-
-    pub fn type_ptr_to(&self, ty: &'ll Type) -> &'ll Type {
-        unsafe {
-            llvm::LLVMPointerType(ty, 0)
-        }
-    }
-}
-
-
 pub struct DiagnosticHandlers<'a> {
     data: *mut (&'a CodegenContext<'a>, &'a Handler),
     llcx: &'a llvm::Context,
@@ -907,10 +888,10 @@ unsafe fn embed_bitcode(cgcx: &CodegenContext,
                         llcx: &llvm::Context,
                         llmod: &llvm::Module,
                         bitcode: Option<&[u8]>) {
-    let llconst = cgcx.const_bytes_in_context(llcx, bitcode.unwrap_or(&[]));
+    let llconst = common::bytes_in_context(llcx, bitcode.unwrap_or(&[]));
     let llglobal = llvm::LLVMAddGlobal(
         llmod,
-        cgcx.val_ty(llconst),
+        common::val_ty(llconst),
         "rustc.embedded.module\0".as_ptr() as *const _,
     );
     llvm::LLVMSetInitializer(llglobal, llconst);
@@ -927,10 +908,10 @@ unsafe fn embed_bitcode(cgcx: &CodegenContext,
     llvm::LLVMRustSetLinkage(llglobal, llvm::Linkage::PrivateLinkage);
     llvm::LLVMSetGlobalConstant(llglobal, llvm::True);
 
-    let llconst = cgcx.const_bytes_in_context(llcx, &[]);
+    let llconst = common::bytes_in_context(llcx, &[]);
     let llglobal = llvm::LLVMAddGlobal(
         llmod,
-        cgcx.val_ty(llconst),
+        common::val_ty(llconst),
         "rustc.embedded.cmdline\0".as_ptr() as *const _,
     );
     llvm::LLVMSetInitializer(llglobal, llconst);
@@ -2598,7 +2579,7 @@ fn create_msvc_imps(cgcx: &CodegenContext, llcx: &llvm::Context, llmod: &llvm::M
         "\x01__imp_"
     };
     unsafe {
-        let i8p_ty = Type::i8p_llcx(cgcx, llcx);
+        let i8p_ty = Type::i8p_llcx(llcx);
         let globals = base::iter_globals(llmod)
             .filter(|&val| {
                 llvm::LLVMRustGetLinkage(val) == llvm::Linkage::ExternalLinkage &&
diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs
index 0fab55972bf..6257d32527f 100644
--- a/src/librustc_codegen_llvm/base.rs
+++ b/src/librustc_codegen_llvm/base.rs
@@ -54,7 +54,7 @@ use attributes;
 use builder::{Builder, MemFlags};
 use callee;
 use rustc_mir::monomorphize::item::DefPathBasedNames;
-use common::{IntPredicate, RealPredicate};
+use common::{self, IntPredicate, RealPredicate};
 use consts;
 use context::CodegenCx;
 use debuginfo;
@@ -74,7 +74,7 @@ use rustc_data_structures::small_c_str::SmallCStr;
 use rustc_data_structures::sync::Lrc;
 use rustc_data_structures::indexed_vec::Idx;
 
-use interfaces::{BuilderMethods, CommonMethods, CommonWriteMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use std::any::Any;
 use std::cmp;
@@ -649,12 +649,12 @@ fn write_metadata<'a, 'gcx>(tcx: TyCtxt<'a, 'gcx, 'gcx>,
     DeflateEncoder::new(&mut compressed, Compression::fast())
         .write_all(&metadata.raw_data).unwrap();
 
-    let llmeta = llvm_module.const_bytes_in_context(metadata_llcx, &compressed);
-    let llconst = llvm_module.const_struct_in_context(metadata_llcx, &[llmeta], false);
+    let llmeta = common::bytes_in_context(metadata_llcx, &compressed);
+    let llconst = common::struct_in_context(metadata_llcx, &[llmeta], false);
     let name = exported_symbols::metadata_symbol_name(tcx);
     let buf = CString::new(name).unwrap();
     let llglobal = unsafe {
-        llvm::LLVMAddGlobal(metadata_llmod, llvm_module.val_ty(llconst), buf.as_ptr())
+        llvm::LLVMAddGlobal(metadata_llmod, common::val_ty(llconst), buf.as_ptr())
     };
     unsafe {
         llvm::LLVMSetInitializer(llglobal, llconst);
diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs
index e55c942f606..10165c20860 100644
--- a/src/librustc_codegen_llvm/builder.rs
+++ b/src/librustc_codegen_llvm/builder.rs
@@ -19,7 +19,7 @@ use rustc::ty::TyCtxt;
 use rustc::ty::layout::{Align, Size};
 use rustc::session::{config, Session};
 use rustc_data_structures::small_c_str::SmallCStr;
-use interfaces::{BuilderMethods, Backend, CommonMethods, CommonWriteMethods, TypeMethods};
+use interfaces::{BuilderMethods, Backend, ConstMethods, TypeMethods};
 use syntax;
 
 use std::borrow::Cow;
diff --git a/src/librustc_codegen_llvm/callee.rs b/src/librustc_codegen_llvm/callee.rs
index a58692d5f41..0d93bd0ce9c 100644
--- a/src/librustc_codegen_llvm/callee.rs
+++ b/src/librustc_codegen_llvm/callee.rs
@@ -22,7 +22,7 @@ use llvm;
 use monomorphize::Instance;
 use type_of::LayoutLlvmExt;
 use value::Value;
-use interfaces::CommonWriteMethods;
+use interfaces::TypeMethods;
 
 use rustc::hir::def_id::DefId;
 use rustc::ty::{self, TypeFoldable};
diff --git a/src/librustc_codegen_llvm/common.rs b/src/librustc_codegen_llvm/common.rs
index fb049b0c9a8..6783807e563 100644
--- a/src/librustc_codegen_llvm/common.rs
+++ b/src/librustc_codegen_llvm/common.rs
@@ -24,7 +24,7 @@ use declare;
 use type_::Type;
 use type_of::LayoutLlvmExt;
 use value::Value;
-use interfaces::{Backend, CommonMethods, CommonWriteMethods, TypeMethods};
+use interfaces::{Backend, ConstMethods, TypeMethods};
 
 use rustc::ty::{self, Ty, TyCtxt};
 use rustc::ty::layout::{HasDataLayout, LayoutOf};
@@ -201,7 +201,7 @@ impl Backend for CodegenCx<'ll, 'tcx> {
     type Context = &'ll llvm::Context;
 }
 
-impl<'ll, 'tcx: 'll> CommonMethods for CodegenCx<'ll, 'tcx> {
+impl<'ll, 'tcx: 'll> ConstMethods for CodegenCx<'ll, 'tcx> {
 
     // LLVM constant constructors.
     fn const_null(&self, t: &'ll Type) -> &'ll Value {
@@ -319,7 +319,7 @@ impl<'ll, 'tcx: 'll> CommonMethods for CodegenCx<'ll, 'tcx> {
         elts: &[&'ll Value],
         packed: bool
     ) -> &'ll Value {
-        &self.const_struct_in_context(&self.llcx, elts, packed)
+        struct_in_context(&self.llcx, elts, packed)
     }
 
     fn const_array(&self, ty: &'ll Type, elts: &[&'ll Value]) -> &'ll Value {
@@ -335,7 +335,7 @@ impl<'ll, 'tcx: 'll> CommonMethods for CodegenCx<'ll, 'tcx> {
     }
 
     fn const_bytes(&self, bytes: &[u8]) -> &'ll Value {
-        &self.const_bytes_in_context(&self.llcx, bytes)
+        bytes_in_context(&self.llcx, bytes)
     }
 
     fn const_get_elt(&self, v: &'ll Value, idx: u64) -> &'ll Value {
@@ -406,14 +406,14 @@ pub fn val_ty(v: &'ll Value) -> &'ll Type {
     }
 }
 
-pub fn const_bytes_in_context(llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value {
+pub fn bytes_in_context(llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value {
     unsafe {
         let ptr = bytes.as_ptr() as *const c_char;
         return llvm::LLVMConstStringInContext(llcx, ptr, bytes.len() as c_uint, True);
     }
 }
 
-pub fn const_struct_in_context(
+pub fn struct_in_context(
     llcx: &'a llvm::Context,
     elts: &[&'a Value],
     packed: bool,
@@ -425,26 +425,6 @@ pub fn const_struct_in_context(
     }
 }
 
-impl<'ll, 'tcx: 'll> CommonWriteMethods for CodegenCx<'ll, 'tcx> {
-    fn val_ty(&self, v: &'ll Value) -> &'ll Type {
-        val_ty(v)
-    }
-
-    fn const_bytes_in_context(&self, llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value {
-        const_bytes_in_context(llcx, bytes)
-    }
-
-    fn const_struct_in_context(
-        &self,
-        llcx: &'a llvm::Context,
-        elts: &[&'a Value],
-        packed: bool,
-    ) -> &'a Value {
-        const_struct_in_context(llcx, elts, packed)
-    }
-}
-
-
 #[inline]
 fn hi_lo_to_u128(lo: u64, hi: u64) -> u128 {
     ((hi as u128) << 64) | (lo as u128)
diff --git a/src/librustc_codegen_llvm/consts.rs b/src/librustc_codegen_llvm/consts.rs
index 2bc9ab08435..72cb696c54c 100644
--- a/src/librustc_codegen_llvm/consts.rs
+++ b/src/librustc_codegen_llvm/consts.rs
@@ -24,7 +24,7 @@ use type_::Type;
 use type_of::LayoutLlvmExt;
 use value::Value;
 use rustc::ty::{self, Ty};
-use interfaces::{CommonWriteMethods, TypeMethods};
+use interfaces::TypeMethods;
 
 use rustc::ty::layout::{Align, LayoutOf};
 
diff --git a/src/librustc_codegen_llvm/debuginfo/gdb.rs b/src/librustc_codegen_llvm/debuginfo/gdb.rs
index a2df65b73b1..45c692c6250 100644
--- a/src/librustc_codegen_llvm/debuginfo/gdb.rs
+++ b/src/librustc_codegen_llvm/debuginfo/gdb.rs
@@ -17,7 +17,7 @@ use builder::Builder;
 use declare;
 use rustc::session::config::DebugInfo;
 use value::Value;
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use syntax::attr;
 
diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs
index 14b263380eb..5581b926ccd 100644
--- a/src/librustc_codegen_llvm/debuginfo/metadata.rs
+++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs
@@ -18,7 +18,7 @@ use super::namespace::mangled_name_of_instance;
 use super::type_names::compute_debuginfo_type_name;
 use super::{CrateDebugContext};
 use abi;
-use interfaces::CommonMethods;
+use interfaces::ConstMethods;
 use value::Value;
 
 use llvm;
diff --git a/src/librustc_codegen_llvm/glue.rs b/src/librustc_codegen_llvm/glue.rs
index fa2514b0ce8..919d80a9d6b 100644
--- a/src/librustc_codegen_llvm/glue.rs
+++ b/src/librustc_codegen_llvm/glue.rs
@@ -20,7 +20,7 @@ use meth;
 use rustc::ty::layout::LayoutOf;
 use rustc::ty::{self, Ty};
 use value::Value;
-use interfaces::{BuilderMethods, CommonMethods};
+use interfaces::{BuilderMethods, ConstMethods};
 
 pub fn size_and_align_of_dst(
     bx: &Builder<'_, 'll, 'tcx>,
diff --git a/src/librustc_codegen_llvm/interfaces/backend.rs b/src/librustc_codegen_llvm/interfaces/backend.rs
index a2c80ef82c7..696d88b3dbc 100644
--- a/src/librustc_codegen_llvm/interfaces/backend.rs
+++ b/src/librustc_codegen_llvm/interfaces/backend.rs
@@ -13,7 +13,7 @@ use std::fmt::Debug;
 pub trait Backend {
     type Value: Debug + PartialEq;
     type BasicBlock;
-    type Type : Debug + PartialEq;
+    type Type: Debug + PartialEq;
     type TypeKind;
     type Context;
 }
diff --git a/src/librustc_codegen_llvm/interfaces/common.rs b/src/librustc_codegen_llvm/interfaces/consts.rs
index 04b2d18db95..2366fefd941 100644
--- a/src/librustc_codegen_llvm/interfaces/common.rs
+++ b/src/librustc_codegen_llvm/interfaces/consts.rs
@@ -11,7 +11,7 @@
 use super::Backend;
 use syntax::symbol::LocalInternedString;
 
-pub trait CommonMethods: Backend + CommonWriteMethods {
+pub trait ConstMethods: Backend {
     // Constant constructors
     fn const_null(&self, t: Self::Type) -> Self::Value;
     fn const_undef(&self, t: Self::Type) -> Self::Value;
@@ -52,14 +52,3 @@ pub trait CommonMethods: Backend + CommonWriteMethods {
     fn is_const_integral(&self, v: Self::Value) -> bool;
     fn is_const_real(&self, v: Self::Value) -> bool;
 }
-
-pub trait CommonWriteMethods: Backend {
-        fn val_ty(&self, v: Self::Value) -> Self::Type;
-        fn const_bytes_in_context(&self, llcx: Self::Context, bytes: &[u8]) -> Self::Value;
-        fn const_struct_in_context(
-            &self,
-            llcx: Self::Context,
-            elts: &[Self::Value],
-            packed: bool,
-        ) -> Self::Value;
-}
diff --git a/src/librustc_codegen_llvm/interfaces/mod.rs b/src/librustc_codegen_llvm/interfaces/mod.rs
index 3e9c7eb881d..93c46aed4ac 100644
--- a/src/librustc_codegen_llvm/interfaces/mod.rs
+++ b/src/librustc_codegen_llvm/interfaces/mod.rs
@@ -10,10 +10,10 @@
 
 mod builder;
 mod backend;
-mod common;
+mod consts;
 mod type_;
 
 pub use self::builder::BuilderMethods;
 pub use self::backend::Backend;
-pub use self::common::{CommonMethods, CommonWriteMethods};
+pub use self::consts::ConstMethods;
 pub use self::type_::TypeMethods;
diff --git a/src/librustc_codegen_llvm/interfaces/type_.rs b/src/librustc_codegen_llvm/interfaces/type_.rs
index 31022140519..b2867985c8d 100644
--- a/src/librustc_codegen_llvm/interfaces/type_.rs
+++ b/src/librustc_codegen_llvm/interfaces/type_.rs
@@ -10,7 +10,7 @@
 
 use super::backend::Backend;
 
-pub trait TypeMethods : Backend {
+pub trait TypeMethods: Backend {
     fn type_void(&self) -> Self::Type;
     fn type_metadata(&self) -> Self::Type;
     fn type_i1(&self) -> Self::Type;
@@ -38,4 +38,6 @@ pub trait TypeMethods : Backend {
     fn func_params_types(&self, ty: Self::Type) -> Vec<Self::Type>;
     fn float_width(&self, ty: Self::Type) -> usize;
     fn int_width(&self, ty: Self::Type) -> u64;
+
+    fn val_ty(&self, v: Self::Value) -> Self::Type;
 }
diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs
index 0af014ac681..f9e31e6145c 100644
--- a/src/librustc_codegen_llvm/intrinsic.rs
+++ b/src/librustc_codegen_llvm/intrinsic.rs
@@ -32,7 +32,7 @@ use syntax::symbol::Symbol;
 use builder::Builder;
 use value::Value;
 
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 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 f3dc9ca0002..f8f50326f0e 100644
--- a/src/librustc_codegen_llvm/lib.rs
+++ b/src/librustc_codegen_llvm/lib.rs
@@ -68,9 +68,6 @@ extern crate tempfile;
 extern crate memmap;
 
 use back::bytecode::RLIB_BYTECODE_EXTENSION;
-use interfaces::{Backend, CommonWriteMethods};
-use value::Value;
-use type_::Type;
 
 pub use llvm_util::target_features;
 use std::any::Any;
@@ -326,14 +323,6 @@ struct ModuleLlvm<'ll> {
     phantom: PhantomData<&'ll ()>
 }
 
-impl<'ll> Backend for ModuleLlvm<'ll> {
-    type Value = &'ll Value;
-    type BasicBlock = &'ll llvm::BasicBlock;
-    type Type = &'ll Type;
-    type TypeKind = llvm::TypeKind;
-    type Context = &'ll llvm::Context;
-}
-
 unsafe impl Send for ModuleLlvm<'ll> { }
 unsafe impl Sync for ModuleLlvm<'ll> { }
 
@@ -359,25 +348,6 @@ impl ModuleLlvm<'ll> {
     }
 }
 
-impl CommonWriteMethods for ModuleLlvm<'ll> {
-    fn val_ty(&self, v: &'ll Value) -> &'ll Type {
-        common::val_ty(v)
-    }
-
-    fn const_bytes_in_context(&self, llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value {
-        common::const_bytes_in_context(llcx, bytes)
-    }
-
-    fn const_struct_in_context(
-        &self,
-        llcx: &'a llvm::Context,
-        elts: &[&'a Value],
-        packed: bool,
-    ) -> &'a Value {
-        common::const_struct_in_context(llcx, elts, packed)
-    }
-}
-
 impl Drop for ModuleLlvm<'ll> {
     fn drop(&mut self) {
         unsafe {
diff --git a/src/librustc_codegen_llvm/meth.rs b/src/librustc_codegen_llvm/meth.rs
index 73c220dbfda..5cc106a2255 100644
--- a/src/librustc_codegen_llvm/meth.rs
+++ b/src/librustc_codegen_llvm/meth.rs
@@ -16,7 +16,7 @@ use consts;
 use monomorphize;
 use value::Value;
 
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use rustc::ty::{self, Ty};
 use rustc::ty::layout::HasDataLayout;
diff --git a/src/librustc_codegen_llvm/mir/block.rs b/src/librustc_codegen_llvm/mir/block.rs
index 781271ffaa7..5d7eab6d3be 100644
--- a/src/librustc_codegen_llvm/mir/block.rs
+++ b/src/librustc_codegen_llvm/mir/block.rs
@@ -26,7 +26,7 @@ use type_of::LayoutLlvmExt;
 use type_::Type;
 use value::Value;
 
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use syntax::symbol::Symbol;
 use syntax_pos::Pos;
diff --git a/src/librustc_codegen_llvm/mir/constant.rs b/src/librustc_codegen_llvm/mir/constant.rs
index 0731f27732c..deb10b03ba5 100644
--- a/src/librustc_codegen_llvm/mir/constant.rs
+++ b/src/librustc_codegen_llvm/mir/constant.rs
@@ -25,7 +25,7 @@ use type_::Type;
 use syntax::ast::Mutability;
 use syntax::source_map::Span;
 use value::Value;
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use super::super::callee;
 use super::FunctionCx;
diff --git a/src/librustc_codegen_llvm/mir/mod.rs b/src/librustc_codegen_llvm/mir/mod.rs
index 4a31b4d3a4b..fd379de95ec 100644
--- a/src/librustc_codegen_llvm/mir/mod.rs
+++ b/src/librustc_codegen_llvm/mir/mod.rs
@@ -24,7 +24,7 @@ use debuginfo::{self, declare_local, VariableAccess, VariableKind, FunctionDebug
 use monomorphize::Instance;
 use abi::{ArgTypeExt, FnType, FnTypeExt, PassMode};
 use value::Value;
-use interfaces::{BuilderMethods, CommonMethods};
+use interfaces::{BuilderMethods, ConstMethods};
 
 use syntax_pos::{DUMMY_SP, NO_EXPANSION, BytePos, Span};
 use syntax::symbol::keywords;
diff --git a/src/librustc_codegen_llvm/mir/operand.rs b/src/librustc_codegen_llvm/mir/operand.rs
index be9107160da..508ba263ce8 100644
--- a/src/librustc_codegen_llvm/mir/operand.rs
+++ b/src/librustc_codegen_llvm/mir/operand.rs
@@ -20,7 +20,7 @@ use value::Value;
 use type_of::LayoutLlvmExt;
 use glue;
 
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use std::fmt;
 
diff --git a/src/librustc_codegen_llvm/mir/place.rs b/src/librustc_codegen_llvm/mir/place.rs
index 2570be8154e..aa4ecc1df89 100644
--- a/src/librustc_codegen_llvm/mir/place.rs
+++ b/src/librustc_codegen_llvm/mir/place.rs
@@ -22,7 +22,7 @@ use value::Value;
 use glue;
 use mir::constant::const_alloc_to_llvm;
 
-use interfaces::{BuilderMethods, CommonMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use super::{FunctionCx, LocalRef};
 use super::operand::{OperandRef, OperandValue};
diff --git a/src/librustc_codegen_llvm/mir/rvalue.rs b/src/librustc_codegen_llvm/mir/rvalue.rs
index 199bb474dd1..abd197bf434 100644
--- a/src/librustc_codegen_llvm/mir/rvalue.rs
+++ b/src/librustc_codegen_llvm/mir/rvalue.rs
@@ -26,7 +26,7 @@ use type_::Type;
 use type_of::LayoutLlvmExt;
 use value::Value;
 
-use interfaces::{BuilderMethods, CommonMethods, CommonWriteMethods, TypeMethods};
+use interfaces::{BuilderMethods, ConstMethods, TypeMethods};
 
 use super::{FunctionCx, LocalRef};
 use super::operand::{OperandRef, OperandValue};
diff --git a/src/librustc_codegen_llvm/type_.rs b/src/librustc_codegen_llvm/type_.rs
index 1ef1417ab4e..f34e725c3a4 100644
--- a/src/librustc_codegen_llvm/type_.rs
+++ b/src/librustc_codegen_llvm/type_.rs
@@ -17,11 +17,12 @@ use llvm::{Bool, False, True, TypeKind};
 
 use context::CodegenCx;
 use interfaces::TypeMethods;
+use value::Value;
 
 use syntax::ast;
 use rustc::ty::layout::{self, Align, Size};
 use rustc_data_structures::small_c_str::SmallCStr;
-use back::write;
+use common;
 
 use std::fmt;
 
@@ -188,9 +189,7 @@ impl TypeMethods for CodegenCx<'ll, 'tcx> {
     fn type_ptr_to(&self, ty: &'ll Type) -> &'ll Type {
         assert_ne!(self.type_kind(ty), TypeKind::Function,
                    "don't call ptr_to on function types, use ptr_to_llvm_type on FnType instead");
-        unsafe {
-            llvm::LLVMPointerType(ty, 0)
-        }
+        ty.ptr_to()
     }
 
     fn element_type(&self, ty: &'ll Type) -> &'ll Type {
@@ -216,7 +215,7 @@ impl TypeMethods for CodegenCx<'ll, 'tcx> {
         }
     }
 
-    fn float_width(&self, ty : &'ll Type) -> usize {
+    fn float_width(&self, ty: &'ll Type) -> usize {
         match self.type_kind(ty) {
             TypeKind::Float => 32,
             TypeKind::Double => 64,
@@ -232,6 +231,10 @@ impl TypeMethods for CodegenCx<'ll, 'tcx> {
             llvm::LLVMGetIntTypeWidth(ty) as u64
         }
     }
+
+    fn val_ty(&self, v: &'ll Value) -> &'ll Type {
+        common::val_ty(v)
+    }
 }
 
 impl Type {
@@ -251,8 +254,14 @@ impl Type {
         }
     }
 
-    pub fn i8p_llcx(cx : &write::CodegenContext<'ll>, llcx: &'ll llvm::Context) -> &'ll Type {
-        cx.type_ptr_to(Type::i8_llcx(llcx))
+    pub fn i8p_llcx(llcx: &'ll llvm::Context) -> &'ll Type {
+        Type::i8_llcx(llcx).ptr_to()
+    }
+
+    fn ptr_to(&self) -> &Type {
+        unsafe {
+            llvm::LLVMPointerType(&self, 0)
+        }
     }
 }