Auto merge of #105545 - erikdesjardins:ptrclean, r=bjorn3
cleanup: remove pointee types This can't be merged until the oldest LLVM version we support uses opaque pointers, which will be the case after #114148. (Also note `-Cllvm-args="-opaque-pointers=0"` can technically be used in LLVM 15, though I don't think we should support that configuration.) I initially hoped this would provide some minor perf win, but in https://github.com/rust-lang/rust/pull/105412#issuecomment-1341224450 it had very little impact, so this is only valuable as a cleanup. As a followup, this will enable #96242 to be resolved. r? `@ghost` `@rustbot` label S-blocked
This commit is contained in:
commit
3cde1943af
@ -27,7 +27,6 @@ use rustc_codegen_ssa::traits::{
|
|||||||
BaseTypeMethods,
|
BaseTypeMethods,
|
||||||
BuilderMethods,
|
BuilderMethods,
|
||||||
ConstMethods,
|
ConstMethods,
|
||||||
DerivedTypeMethods,
|
|
||||||
LayoutTypeMethods,
|
LayoutTypeMethods,
|
||||||
HasCodegen,
|
HasCodegen,
|
||||||
OverflowOp,
|
OverflowOp,
|
||||||
|
@ -16,6 +16,10 @@ use crate::context::CodegenCx;
|
|||||||
use crate::type_of::LayoutGccExt;
|
use crate::type_of::LayoutGccExt;
|
||||||
|
|
||||||
impl<'gcc, 'tcx> CodegenCx<'gcc, 'tcx> {
|
impl<'gcc, 'tcx> CodegenCx<'gcc, 'tcx> {
|
||||||
|
pub fn const_ptrcast(&self, val: RValue<'gcc>, ty: Type<'gcc>) -> RValue<'gcc> {
|
||||||
|
self.context.new_cast(None, val, ty)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn const_bytes(&self, bytes: &[u8]) -> RValue<'gcc> {
|
pub fn const_bytes(&self, bytes: &[u8]) -> RValue<'gcc> {
|
||||||
bytes_in_context(self, bytes)
|
bytes_in_context(self, bytes)
|
||||||
}
|
}
|
||||||
@ -242,10 +246,6 @@ impl<'gcc, 'tcx> ConstMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
|
|||||||
const_alloc_to_gcc(self, alloc)
|
const_alloc_to_gcc(self, alloc)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn const_ptrcast(&self, val: RValue<'gcc>, ty: Type<'gcc>) -> RValue<'gcc> {
|
|
||||||
self.context.new_cast(None, val, ty)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn const_bitcast(&self, value: RValue<'gcc>, typ: Type<'gcc>) -> RValue<'gcc> {
|
fn const_bitcast(&self, value: RValue<'gcc>, typ: Type<'gcc>) -> RValue<'gcc> {
|
||||||
if value.get_type() == self.bool_type.make_pointer() {
|
if value.get_type() == self.bool_type.make_pointer() {
|
||||||
if let Some(pointee) = typ.get_pointee() {
|
if let Some(pointee) = typ.get_pointee() {
|
||||||
|
@ -12,7 +12,7 @@ use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
|
|||||||
use rustc_codegen_ssa::mir::place::PlaceRef;
|
use rustc_codegen_ssa::mir::place::PlaceRef;
|
||||||
use rustc_codegen_ssa::traits::{ArgAbiMethods, BaseTypeMethods, BuilderMethods, ConstMethods, IntrinsicCallMethods};
|
use rustc_codegen_ssa::traits::{ArgAbiMethods, BaseTypeMethods, BuilderMethods, ConstMethods, IntrinsicCallMethods};
|
||||||
#[cfg(feature="master")]
|
#[cfg(feature="master")]
|
||||||
use rustc_codegen_ssa::traits::{DerivedTypeMethods, MiscMethods};
|
use rustc_codegen_ssa::traits::MiscMethods;
|
||||||
use rustc_codegen_ssa::errors::InvalidMonomorphization;
|
use rustc_codegen_ssa::errors::InvalidMonomorphization;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::ty::{self, Instance, Ty};
|
use rustc_middle::ty::{self, Instance, Ty};
|
||||||
|
26
src/type_.rs
26
src/type_.rs
@ -54,6 +54,23 @@ impl<'gcc, 'tcx> CodegenCx<'gcc, 'tcx> {
|
|||||||
self.u128_type
|
self.u128_type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn type_ptr_to(&self, ty: Type<'gcc>) -> Type<'gcc> {
|
||||||
|
ty.make_pointer()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn type_ptr_to_ext(&self, ty: Type<'gcc>, _address_space: AddressSpace) -> Type<'gcc> {
|
||||||
|
// TODO(antoyo): use address_space, perhaps with TYPE_ADDR_SPACE?
|
||||||
|
ty.make_pointer()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn type_i8p(&self) -> Type<'gcc> {
|
||||||
|
self.type_ptr_to(self.type_i8())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn type_i8p_ext(&self, address_space: AddressSpace) -> Type<'gcc> {
|
||||||
|
self.type_ptr_to_ext(self.type_i8(), address_space)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn type_pointee_for_align(&self, align: Align) -> Type<'gcc> {
|
pub fn type_pointee_for_align(&self, align: Align) -> Type<'gcc> {
|
||||||
// FIXME(eddyb) We could find a better approximation if ity.align < align.
|
// FIXME(eddyb) We could find a better approximation if ity.align < align.
|
||||||
let ity = Integer::approximate_align(self, align);
|
let ity = Integer::approximate_align(self, align);
|
||||||
@ -149,13 +166,12 @@ impl<'gcc, 'tcx> BaseTypeMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn type_ptr_to(&self, ty: Type<'gcc>) -> Type<'gcc> {
|
fn type_ptr(&self) -> Type<'gcc> {
|
||||||
ty.make_pointer()
|
self.type_ptr_to(self.type_void())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn type_ptr_to_ext(&self, ty: Type<'gcc>, _address_space: AddressSpace) -> Type<'gcc> {
|
fn type_ptr_ext(&self, address_space: AddressSpace) -> Type<'gcc> {
|
||||||
// TODO(antoyo): use address_space, perhaps with TYPE_ADDR_SPACE?
|
self.type_ptr_to_ext(self.type_void(), address_space)
|
||||||
ty.make_pointer()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn element_type(&self, ty: Type<'gcc>) -> Type<'gcc> {
|
fn element_type(&self, ty: Type<'gcc>) -> Type<'gcc> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user