]> git.lizzy.rs Git - rust.git/commitdiff
Simplify some handling of target_pointer_width
authorMark Rousskov <mark.simulacrum@gmail.com>
Thu, 26 Jul 2018 18:22:10 +0000 (12:22 -0600)
committerMark Rousskov <mark.simulacrum@gmail.com>
Sat, 4 Aug 2018 12:54:36 +0000 (06:54 -0600)
src/librustc_codegen_llvm/intrinsic.rs
src/librustc_codegen_llvm/mir/rvalue.rs

index 06a5c34a4cae058ce7c9b94431fb8120543b7ba6..0b5a6757333f252c2c32b4b993c7bd5322b5c477 100644 (file)
@@ -1778,14 +1778,7 @@ macro_rules! arith {
 fn int_type_width_signed(ty: Ty, cx: &CodegenCx) -> Option<(u64, bool)> {
     match ty.sty {
         ty::TyInt(t) => Some((match t {
-            ast::IntTy::Isize => {
-                match &cx.tcx.sess.target.target.target_pointer_width[..] {
-                    "16" => 16,
-                    "32" => 32,
-                    "64" => 64,
-                    tws => bug!("Unsupported target word size for isize: {}", tws),
-                }
-            },
+            ast::IntTy::Isize => cx.tcx.sess.target.isize_ty.bit_width().unwrap() as u64,
             ast::IntTy::I8 => 8,
             ast::IntTy::I16 => 16,
             ast::IntTy::I32 => 32,
@@ -1793,14 +1786,7 @@ fn int_type_width_signed(ty: Ty, cx: &CodegenCx) -> Option<(u64, bool)> {
             ast::IntTy::I128 => 128,
         }, true)),
         ty::TyUint(t) => Some((match t {
-            ast::UintTy::Usize => {
-                match &cx.tcx.sess.target.target.target_pointer_width[..] {
-                    "16" => 16,
-                    "32" => 32,
-                    "64" => 64,
-                    tws => bug!("Unsupported target word size for usize: {}", tws),
-                }
-            },
+            ast::UintTy::Usize => cx.tcx.sess.target.usize_ty.bit_width().unwrap() as u64,
             ast::UintTy::U8 => 8,
             ast::UintTy::U16 => 16,
             ast::UintTy::U32 => 32,
@@ -1813,14 +1799,9 @@ fn int_type_width_signed(ty: Ty, cx: &CodegenCx) -> Option<(u64, bool)> {
 
 // Returns the width of a float TypeVariant
 // Returns None if the type is not a float
-fn float_type_width<'tcx>(sty: &ty::TypeVariants<'tcx>)
-        -> Option<u64> {
-    use rustc::ty::TyFloat;
+fn float_type_width<'tcx>(sty: &ty::TypeVariants<'tcx>) -> Option<u64> {
     match *sty {
-        TyFloat(t) => Some(match t {
-            ast::FloatTy::F32 => 32,
-            ast::FloatTy::F64 => 64,
-        }),
+        ty::TyFloat(t) => Some(t.bit_width() as u64),
         _ => None,
     }
 }
index 02b5c27840eabbcf4461fac8b47187952882accf..dda33ae3fecdfde329941b07cc606f34322b9a85 100644 (file)
@@ -733,18 +733,8 @@ fn get_overflow_intrinsic(oop: OverflowOp, bx: &Builder<'_, 'll, '_>, ty: Ty) ->
     let tcx = bx.tcx();
 
     let new_sty = match ty.sty {
-        TyInt(Isize) => match &tcx.sess.target.target.target_pointer_width[..] {
-            "16" => TyInt(I16),
-            "32" => TyInt(I32),
-            "64" => TyInt(I64),
-            _ => panic!("unsupported target word size")
-        },
-        TyUint(Usize) => match &tcx.sess.target.target.target_pointer_width[..] {
-            "16" => TyUint(U16),
-            "32" => TyUint(U32),
-            "64" => TyUint(U64),
-            _ => panic!("unsupported target word size")
-        },
+        TyInt(Isize) => TyInt(tcx.sess.target.isize_ty),
+        TyUint(Usize) => TyUint(tcx.sess.target.usize_ty),
         ref t @ TyUint(_) | ref t @ TyInt(_) => t.clone(),
         _ => panic!("tried to get overflow intrinsic for op applied to non-int type")
     };