size_t n_dimensions; /**< Number of array dimensions. */
ir_node **lower_bound; /**< Lower bounds of dimensions. Usually all 0. */
ir_node **upper_bound; /**< Upper bounds or dimensions. */
- int *order; /**< Ordering of dimensions. */
+ size_t *order; /**< Ordering of dimensions. */
ir_type *element_type; /**< The type of the array elements. */
ir_entity *element_ent; /**< entity for the array elements, to be used for
element selection with a Sel node. */
static inline ir_visited_t _get_master_type_visited(void) { return firm_type_visited; }
static inline void _inc_master_type_visited(void) { ++firm_type_visited; }
-static inline ir_type *get_type_unlowered(const ir_type *tp)
+static inline int is_lowered_type(const ir_type *tp)
{
- assert (is_lowered_type(tp));
- return tp->assoc_type;
+ return tp->flags & tf_lowered_type;
}
-static inline ir_type *get_type_lowered(const ir_type *tp)
+/**
+ * Gets the lowered/unlowered type of a type or NULL if this type
+ * has no lowered/unlowered one.
+ */
+static inline ir_type *get_associated_type(const ir_type *tp)
{
- assert (tp->assoc_type == NULL || is_lowered_type(tp->assoc_type));
return tp->assoc_type;
}
+static inline void set_lowered_type(ir_type *tp, ir_type *lowered_type)
+{
+ assert (is_type(tp) && is_type(lowered_type));
+ lowered_type->flags |= tf_lowered_type;
+ tp->assoc_type = lowered_type;
+ lowered_type->assoc_type = tp;
+}
static inline void *_get_type_link(const ir_type *tp)
{