From 155e94f32d8af374cf149c72f6ed37673626c146 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 7 Jun 2006 15:18:04 +0000 Subject: [PATCH] value parameter types have now a flag to distinguish from others entities of value parameter types havy allovation "parameter" [r7883] --- ir/tr/type.c | 11 +++++++++-- ir/tr/type.h | 5 +++++ ir/tr/type_t.h | 9 +++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/ir/tr/type.c b/ir/tr/type.c index 1eca6d4d0..0119736ee 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -1153,6 +1153,7 @@ static INLINE ir_type * build_value_type(ident *name, int len, tp_ent_pair *tps) { int i; ir_type *res = new_type_struct(name); + res->flags |= tf_value_param_type; /* Remove type from type list. Must be treated differently than other types. */ remove_irp_type(res); for (i = 0; i < len; i++) { @@ -1160,6 +1161,7 @@ build_value_type(ident *name, int len, tp_ent_pair *tps) { ir_type *elt_type = tps[i].tp ? tps[i].tp : res; tps[i].ent = new_entity(res, mangle_u(name, get_type_ident(elt_type)), elt_type); + set_entity_allocation(tps[i].ent, allocation_parameter); } return res; } @@ -1926,12 +1928,17 @@ int is_compound_type(const ir_type *tp) { return tp->type_op->flags & TP_OP_FLAG_COMPOUND; } -/* Checks, whether a type is a frame ir_type */ +/* Checks, whether a type is a frame type */ int is_frame_type(const ir_type *tp) { return tp->flags & tf_frame_type; } -/* Checks, whether a type is a lowered ir_type */ +/* Checks, whether a type is a value parameter type */ +int is_value_param_type(const ir_type *tp) { + return tp->flags & tf_value_param_type; +} + +/* Checks, whether a type is a lowered type */ int is_lowered_type(const ir_type *tp) { return tp->flags & tf_lowered_type; } diff --git a/ir/tr/type.h b/ir/tr/type.h index d4da08947..48a1d5185 100644 --- a/ir/tr/type.h +++ b/ir/tr/type.h @@ -1274,6 +1274,11 @@ int is_compound_type(const ir_type *tp); */ int is_frame_type(const ir_type *tp); +/** + * Checks, whether a type is a value parameter type. + */ +int is_value_param_type(const ir_type *tp); + /** * Checks, whether a type is a lowered type. */ diff --git a/ir/tr/type_t.h b/ir/tr/type_t.h index 987ae1d57..a8c9cb4f0 100644 --- a/ir/tr/type_t.h +++ b/ir/tr/type_t.h @@ -126,10 +126,11 @@ typedef union { /** Additional type flags. */ enum type_flags { - tf_none = 0, /**< No flags. */ - tf_frame_type = 1, /**< Set if this is a frame type. */ - tf_lowered_type = 2, /**< Set if this is a lowered type. */ - tf_layout_fixed = 4 /**< Set if the layout of a type is fixed */ + tf_none = 0, /**< No flags. */ + tf_frame_type = 1, /**< Set if this is a frame type. */ + tf_value_param_type = 2, /**< Set if this is a value param type. */ + tf_lowered_type = 4, /**< Set if this is a lowered type. */ + tf_layout_fixed = 8 /**< Set if the layout of a type is fixed */ }; /** the structure of a type */ -- 2.20.1