Refactor float Primitive
s to a separate Float
type
This commit is contained in:
parent
8cef37dbb6
commit
3769fddba2
23 changed files with 156 additions and 96 deletions
|
@ -306,17 +306,15 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
|||
self.assume_scalar_range(bx, imm, from_scalar, from_backend_ty);
|
||||
|
||||
imm = match (from_scalar.primitive(), to_scalar.primitive()) {
|
||||
(Int(..) | F16 | F32 | F64 | F128, Int(..) | F16 | F32 | F64 | F128) => {
|
||||
bx.bitcast(imm, to_backend_ty)
|
||||
}
|
||||
(Int(..) | Float(_), Int(..) | Float(_)) => bx.bitcast(imm, to_backend_ty),
|
||||
(Pointer(..), Pointer(..)) => bx.pointercast(imm, to_backend_ty),
|
||||
(Int(..), Pointer(..)) => bx.ptradd(bx.const_null(bx.type_ptr()), imm),
|
||||
(Pointer(..), Int(..)) => bx.ptrtoint(imm, to_backend_ty),
|
||||
(F16 | F32 | F64 | F128, Pointer(..)) => {
|
||||
(Float(_), Pointer(..)) => {
|
||||
let int_imm = bx.bitcast(imm, bx.cx().type_isize());
|
||||
bx.ptradd(bx.const_null(bx.type_ptr()), int_imm)
|
||||
}
|
||||
(Pointer(..), F16 | F32 | F64 | F128) => {
|
||||
(Pointer(..), Float(_)) => {
|
||||
let int_imm = bx.ptrtoint(imm, bx.cx().type_isize());
|
||||
bx.bitcast(int_imm, to_backend_ty)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ use rustc_middle::bug;
|
|||
use rustc_middle::ty::layout::TyAndLayout;
|
||||
use rustc_middle::ty::{self, Ty};
|
||||
use rustc_target::abi::call::{ArgAbi, CastTarget, FnAbi, Reg};
|
||||
use rustc_target::abi::{AddressSpace, Integer};
|
||||
use rustc_target::abi::{AddressSpace, Float, Integer};
|
||||
|
||||
// This depends on `Backend` and not `BackendTypes`, because consumers will probably want to use
|
||||
// `LayoutOf` or `HasTyCtxt`. This way, they don't have to add a constraint on it themselves.
|
||||
|
@ -65,6 +65,16 @@ pub trait DerivedTypeMethods<'tcx>: BaseTypeMethods<'tcx> + MiscMethods<'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
fn type_from_float(&self, f: Float) -> Self::Type {
|
||||
use Float::*;
|
||||
match f {
|
||||
F16 => self.type_f16(),
|
||||
F32 => self.type_f32(),
|
||||
F64 => self.type_f64(),
|
||||
F128 => self.type_f128(),
|
||||
}
|
||||
}
|
||||
|
||||
fn type_needs_drop(&self, ty: Ty<'tcx>) -> bool {
|
||||
ty.needs_drop(self.tcx(), ty::ParamEnv::reveal_all())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue