|
@@ -261,6 +261,7 @@ struct TypeProc {
|
|
TYPE_KIND(SimdVector, struct { \
|
|
TYPE_KIND(SimdVector, struct { \
|
|
i64 count; \
|
|
i64 count; \
|
|
Type *elem; \
|
|
Type *elem; \
|
|
|
|
+ Type *generic_count; \
|
|
}) \
|
|
}) \
|
|
TYPE_KIND(RelativePointer, struct { \
|
|
TYPE_KIND(RelativePointer, struct { \
|
|
Type *pointer_type; \
|
|
Type *pointer_type; \
|
|
@@ -1085,10 +1086,11 @@ Type *alloc_type_bit_set() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-Type *alloc_type_simd_vector(i64 count, Type *elem) {
|
|
|
|
|
|
+Type *alloc_type_simd_vector(i64 count, Type *elem, Type *generic_count=nullptr) {
|
|
Type *t = alloc_type(Type_SimdVector);
|
|
Type *t = alloc_type(Type_SimdVector);
|
|
t->SimdVector.count = count;
|
|
t->SimdVector.count = count;
|
|
t->SimdVector.elem = elem;
|
|
t->SimdVector.elem = elem;
|
|
|
|
+ t->SimdVector.generic_count = generic_count;
|
|
return t;
|
|
return t;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2078,6 +2080,11 @@ bool is_type_polymorphic(Type *t, bool or_specialized=false) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
return is_type_polymorphic(t->Array.elem, or_specialized);
|
|
return is_type_polymorphic(t->Array.elem, or_specialized);
|
|
|
|
+ case Type_SimdVector:
|
|
|
|
+ if (t->SimdVector.generic_count != nullptr) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return is_type_polymorphic(t->SimdVector.elem, or_specialized);
|
|
case Type_DynamicArray:
|
|
case Type_DynamicArray:
|
|
return is_type_polymorphic(t->DynamicArray.elem, or_specialized);
|
|
return is_type_polymorphic(t->DynamicArray.elem, or_specialized);
|
|
case Type_Slice:
|
|
case Type_Slice:
|