From 33eee83737b399ccea5b916fc6249259ca618208 Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Thu, 30 Aug 2018 14:24:41 +0200 Subject: [PATCH] Removed code duplication for CommonWriteMethods --- src/librustc_codegen_llvm/back/write.rs | 18 ++++------- src/librustc_codegen_llvm/common.rs | 40 +++++++++++++++++-------- src/librustc_codegen_llvm/lib.rs | 20 ++----------- 3 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs index 3c32da43031..24f58ac59c1 100644 --- a/src/librustc_codegen_llvm/back/write.rs +++ b/src/librustc_codegen_llvm/back/write.rs @@ -24,7 +24,7 @@ use rustc::session::Session; use rustc::util::nodemap::FxHashMap; use time_graph::{self, TimeGraph, Timeline}; -use llvm::{self, DiagnosticInfo, PassManager, SMDiagnostic, BasicBlock, True}; +use llvm::{self, DiagnosticInfo, PassManager, SMDiagnostic, BasicBlock}; use llvm_util; use {CodegenResults, ModuleCodegen, CompiledModule, ModuleKind, // ModuleLlvm, CachedModuleCodegen}; @@ -47,6 +47,7 @@ use type_::Type; use context::{is_pie_binary, get_reloc_model}; use interfaces::{Backend, CommonWriteMethods}; +use common; use jobserver::{Client, Acquired}; use rustc_demangle; use value::Value; @@ -437,16 +438,11 @@ impl<'ll> Backend for CodegenContext<'ll> { impl CommonWriteMethods for CodegenContext<'ll> { fn val_ty(&self, v: &'ll Value) -> &'ll Type { - unsafe { - llvm::LLVMTypeOf(v) - } + common::val_ty(v) } fn c_bytes_in_context(&self, 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); - } + common::c_bytes_in_context(llcx, bytes) } fn c_struct_in_context( @@ -455,11 +451,7 @@ fn c_struct_in_context( elts: &[&'a Value], packed: bool, ) -> &'a Value { - unsafe { - llvm::LLVMConstStructInContext(llcx, - elts.as_ptr(), elts.len() as c_uint, - packed as llvm::Bool) - } + common::c_struct_in_context(llcx, elts, packed) } } diff --git a/src/librustc_codegen_llvm/common.rs b/src/librustc_codegen_llvm/common.rs index ba8d92d37ac..80f8bbeabda 100644 --- a/src/librustc_codegen_llvm/common.rs +++ b/src/librustc_codegen_llvm/common.rs @@ -399,18 +399,38 @@ fn const_to_opt_u128(v: &'ll Value, sign_ext: bool) -> Option { } } +pub fn val_ty(v: &'ll Value) -> &'ll Type { + unsafe { + llvm::LLVMTypeOf(v) + } +} + +pub fn c_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 c_struct_in_context( + llcx: &'a llvm::Context, + elts: &[&'a Value], + packed: bool, +) -> &'a Value { + unsafe { + llvm::LLVMConstStructInContext(llcx, + elts.as_ptr(), elts.len() as c_uint, + packed as Bool) + } +} + impl<'ll, 'tcx : 'll> CommonWriteMethods for CodegenCx<'ll, 'tcx> { fn val_ty(&self, v: &'ll Value) -> &'ll Type { - unsafe { - llvm::LLVMTypeOf(v) - } + val_ty(v) } fn c_bytes_in_context(&self, 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); - } + c_bytes_in_context(llcx, bytes) } fn c_struct_in_context( @@ -419,11 +439,7 @@ fn c_struct_in_context( elts: &[&'a Value], packed: bool, ) -> &'a Value { - unsafe { - llvm::LLVMConstStructInContext(llcx, - elts.as_ptr(), elts.len() as c_uint, - packed as Bool) - } + c_struct_in_context(llcx, elts, packed) } } diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index 2ef90c03c67..e228dc044f1 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -76,7 +76,6 @@ use std::any::Any; use std::sync::mpsc; use std::marker::PhantomData; -use libc::{c_uint, c_char}; use rustc_data_structures::sync::Lrc; use rustc::dep_graph::DepGraph; @@ -361,20 +360,11 @@ fn llmod(&self) -> &llvm::Module { impl CommonWriteMethods for ModuleLlvm<'ll> { fn val_ty(&self, v: &'ll Value) -> &'ll Type { - unsafe { - llvm::LLVMTypeOf(v) - } + common::val_ty(v) } fn c_bytes_in_context(&self, 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, - llvm::True); - } + common::c_bytes_in_context(llcx, bytes) } fn c_struct_in_context( @@ -383,11 +373,7 @@ fn c_struct_in_context( elts: &[&'a Value], packed: bool, ) -> &'a Value { - unsafe { - llvm::LLVMConstStructInContext(llcx, - elts.as_ptr(), elts.len() as c_uint, - packed as llvm::Bool) - } + common::c_struct_in_context(llcx, elts, packed) } } -- 2.44.0