Commit 6b5c87957b

William Sengir <william@sengir.com>
2022-03-26 23:45:30
stage2: handle vectors in `Value.intFitsInType`
1 parent ca1ab38
Changed files (1)
src/value.zig
@@ -1671,6 +1671,7 @@ pub const Value = extern union {
     }
 
     /// Asserts the value is an integer, and the destination type is ComptimeInt or Int.
+    /// Vectors are also accepted. Vector results are reduced with AND.
     pub fn intFitsInType(self: Value, ty: Type, target: Target) bool {
         switch (self.tag()) {
             .zero,
@@ -1767,6 +1768,16 @@ pub const Value = extern union {
                 else => unreachable,
             },
 
+            .aggregate => {
+                assert(ty.zigTypeTag() == .Vector);
+                for (self.castTag(.aggregate).?.data) |elem| {
+                    if (!elem.intFitsInType(ty.scalarType(), target)) {
+                        return false;
+                    }
+                }
+                return true;
+            },
+
             else => unreachable,
         }
     }