Removed code duplication for CommonWriteMethods

This commit is contained in:
Denis Merigoux 2018-08-30 14:24:41 +02:00 committed by Eduard-Mihai Burtescu
parent 4cc18d3de5
commit 33eee83737
3 changed files with 36 additions and 42 deletions

View file

@ -24,7 +24,7 @@ use rustc::session::config::{self, OutputFilenames, OutputType, Passes, Sanitize
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 syntax_pos::symbol::Symbol;
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 @@ impl CommonWriteMethods for CodegenContext<'ll> {
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)
}
}

View file

@ -399,18 +399,38 @@ impl<'ll, 'tcx : 'll> CommonMethods for CodegenCx<'ll, 'tcx> {
}
}
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 @@ impl<'ll, 'tcx : 'll> CommonWriteMethods for CodegenCx<'ll, 'tcx> {
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)
}
}

View file

@ -76,7 +76,6 @@ pub use llvm_util::target_features;
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 @@ impl ModuleLlvm<'ll> {
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 @@ impl CommonWriteMethods for ModuleLlvm<'ll> {
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)
}
}