stage2: handle vectors in Value.intFitsInType

This commit is contained in:
William Sengir 2022-03-26 15:45:30 -07:00 committed by Andrew Kelley
parent ca1ab38d3a
commit 6b5c87957b

View File

@ -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,
}
}