From a1d0d4f9439640d8694ebb7fa905f4e328d5febd Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Thu, 6 Sep 2018 14:44:51 -0700 Subject: [PATCH] Removing LLVM content from CommonMethods -> ConstMethods --- src/librustc_codegen_llvm/abi.rs | 2 +- src/librustc_codegen_llvm/asm.rs | 2 +- src/librustc_codegen_llvm/back/write.rs | 29 +++-------------- src/librustc_codegen_llvm/base.rs | 10 +++--- src/librustc_codegen_llvm/builder.rs | 2 +- src/librustc_codegen_llvm/callee.rs | 2 +- src/librustc_codegen_llvm/common.rs | 32 ++++--------------- src/librustc_codegen_llvm/consts.rs | 2 +- src/librustc_codegen_llvm/debuginfo/gdb.rs | 2 +- .../debuginfo/metadata.rs | 2 +- src/librustc_codegen_llvm/glue.rs | 2 +- .../interfaces/backend.rs | 2 +- .../interfaces/{common.rs => consts.rs} | 13 +------- src/librustc_codegen_llvm/interfaces/mod.rs | 4 +-- src/librustc_codegen_llvm/interfaces/type_.rs | 4 ++- src/librustc_codegen_llvm/intrinsic.rs | 2 +- src/librustc_codegen_llvm/lib.rs | 30 ----------------- src/librustc_codegen_llvm/meth.rs | 2 +- src/librustc_codegen_llvm/mir/block.rs | 2 +- src/librustc_codegen_llvm/mir/constant.rs | 2 +- src/librustc_codegen_llvm/mir/mod.rs | 2 +- src/librustc_codegen_llvm/mir/operand.rs | 2 +- src/librustc_codegen_llvm/mir/place.rs | 2 +- src/librustc_codegen_llvm/mir/rvalue.rs | 2 +- src/librustc_codegen_llvm/type_.rs | 23 +++++++++---- 25 files changed, 55 insertions(+), 124 deletions(-) rename src/librustc_codegen_llvm/interfaces/{common.rs => consts.rs} (83%) diff --git a/src/librustc_codegen_llvm/abi.rs b/src/librustc_codegen_llvm/abi.rs index 0d570bc8adab..7de657a49186 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 0a1cc1e36717..ecd371e82468 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 6977b1285099..8972a7e8f992 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 0fab55972bf6..6257d32527f3 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 e55c942f606a..10165c20860d 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 a58692d5f411..0d93bd0ce9c0 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 fb049b0c9a8b..6783807e5635 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 2bc9ab084352..72cb696c54cd 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 a2df65b73b1c..45c692c6250d 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 14b263380eb4..5581b926ccd0 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 fa2514b0ce89..919d80a9d6b0 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 a2c80ef82c78..696d88b3dbcd 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 similarity index 83% rename from src/librustc_codegen_llvm/interfaces/common.rs rename to src/librustc_codegen_llvm/interfaces/consts.rs index 04b2d18db950..2366fefd941c 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 3e9c7eb881d1..93c46aed4acb 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 31022140519b..b2867985c8d8 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; 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 0af014ac681d..f9e31e6145c1 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 f3dc9ca00022..f8f50326f0e3 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 73c220dbfda2..5cc106a22555 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 781271ffaa70..5d7eab6d3bed 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 0731f27732cf..deb10b03ba5f 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 4a31b4d3a4ba..fd379de95ec0 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 be9107160dad..508ba263ce8a 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 2570be8154e5..aa4ecc1df89f 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 199bb474dd12..abd197bf4343 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 1ef1417ab4eb..f34e725c3a43 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) + } } }