about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2023-07-05 19:30:24 -0300
committerSantiago Pastorino <spastorino@gmail.com>2023-07-07 13:47:55 -0300
commit9ca51b92d4a056d22d3b3d22e54bbb29ed205a40 (patch)
treec486b3944102140be8b465900dbb0518a5407d77
parent42eccffce3e950e95d9e965d4dd58ecb44633d55 (diff)
Add Float ty to SMIR
-rw-r--r--compiler/rustc_smir/src/rustc_smir/mod.rs9
-rw-r--r--compiler/rustc_smir/src/stable_mir/ty.rs7
-rw-r--r--tests/ui-fulldeps/stable-mir/crate-info.rs10
3 files changed, 21 insertions, 5 deletions
diff --git a/compiler/rustc_smir/src/rustc_smir/mod.rs b/compiler/rustc_smir/src/rustc_smir/mod.rs
index adce55d639f..85d5bb00c4e 100644
--- a/compiler/rustc_smir/src/rustc_smir/mod.rs
+++ b/compiler/rustc_smir/src/rustc_smir/mod.rs
@@ -7,7 +7,7 @@
 //!
 //! For now, we are developing everything inside `rustc`, thus, we keep this module private.
 
-use crate::stable_mir::ty::{IntTy, RigidTy, TyKind, UintTy};
+use crate::stable_mir::ty::{FloatTy, IntTy, RigidTy, TyKind, UintTy};
 use crate::stable_mir::{self, Context};
 use rustc_middle::mir;
 use rustc_middle::ty::{self, Ty, TyCtxt};
@@ -81,14 +81,17 @@ impl<'tcx> Tables<'tcx> {
                 ty::IntTy::I128 => TyKind::RigidTy(RigidTy::Int(IntTy::I128)),
             },
             ty::Uint(uint_ty) => match uint_ty {
-                ty::UintTy::Usize => TyKind::RigidTy(RigidTy::Uint(stable_mir::ty::UintTy::Usize)),
+                ty::UintTy::Usize => TyKind::RigidTy(RigidTy::Uint(UintTy::Usize)),
                 ty::UintTy::U8 => TyKind::RigidTy(RigidTy::Uint(UintTy::U8)),
                 ty::UintTy::U16 => TyKind::RigidTy(RigidTy::Uint(UintTy::U16)),
                 ty::UintTy::U32 => TyKind::RigidTy(RigidTy::Uint(UintTy::U32)),
                 ty::UintTy::U64 => TyKind::RigidTy(RigidTy::Uint(UintTy::U64)),
                 ty::UintTy::U128 => TyKind::RigidTy(RigidTy::Uint(UintTy::U128)),
             },
-            ty::Float(_) => todo!(),
+            ty::Float(float_ty) => match float_ty {
+                ty::FloatTy::F32 => TyKind::RigidTy(RigidTy::Float(FloatTy::F32)),
+                ty::FloatTy::F64 => TyKind::RigidTy(RigidTy::Float(FloatTy::F64)),
+            },
             ty::Adt(_, _) => todo!(),
             ty::Foreign(_) => todo!(),
             ty::Str => todo!(),
diff --git a/compiler/rustc_smir/src/stable_mir/ty.rs b/compiler/rustc_smir/src/stable_mir/ty.rs
index 2db3bdb7af1..3181af46e9c 100644
--- a/compiler/rustc_smir/src/stable_mir/ty.rs
+++ b/compiler/rustc_smir/src/stable_mir/ty.rs
@@ -20,6 +20,7 @@ pub enum RigidTy {
     Char,
     Int(IntTy),
     Uint(UintTy),
+    Float(FloatTy),
     Tuple(Vec<Ty>),
 }
 
@@ -42,3 +43,9 @@ pub enum UintTy {
     U64,
     U128,
 }
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum FloatTy {
+    F32,
+    F64,
+}
diff --git a/tests/ui-fulldeps/stable-mir/crate-info.rs b/tests/ui-fulldeps/stable-mir/crate-info.rs
index 29cc6e78d88..3c0d684a4d7 100644
--- a/tests/ui-fulldeps/stable-mir/crate-info.rs
+++ b/tests/ui-fulldeps/stable-mir/crate-info.rs
@@ -67,7 +67,7 @@ fn test_stable_mir(tcx: TyCtxt<'_>) {
 
     let types = get_item(tcx, &items, (DefKind::Fn, "types")).unwrap();
     let body = types.body();
-    assert_eq!(body.locals.len(), 5);
+    assert_eq!(body.locals.len(), 6);
     assert_matches!(
         body.locals[0].kind(),
         stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
@@ -88,6 +88,12 @@ fn test_stable_mir(tcx: TyCtxt<'_>) {
         body.locals[4].kind(),
         stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Uint(stable_mir::ty::UintTy::U64))
     );
+    assert_matches!(
+        body.locals[5].kind(),
+        stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Float(
+            stable_mir::ty::FloatTy::F64
+        ))
+    );
 
     let drop = get_item(tcx, &items, (DefKind::Fn, "drop")).unwrap();
     let body = drop.body();
@@ -179,7 +185,7 @@ fn generate_input(path: &str) -> std::io::Result<()> {
         x_64.wrapping_add(y_64)
     }}
 
-    pub fn types(b: bool, _: char, _: i32, _: u64) -> bool {{
+    pub fn types(b: bool, _: char, _: i32, _: u64, _: f64) -> bool {{
         b
     }}