X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftype.c;h=77020be977a32fefaaa65b3b167703869af3c2f0;hb=288b414e4d82e0aa0d4b4348d8c387db02142cdb;hp=1978b4b90aa3991d2e8fca65e94eabb33068d690;hpb=146b796a5c1e2a1055249ab62152e7cc7e4e4cbe;p=libfirm diff --git a/ir/tr/type.c b/ir/tr/type.c index 1978b4b90..77020be97 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -69,6 +69,7 @@ /*-----------------------------------------------------------------*/ ir_type *firm_none_type; ir_type *get_none_type(void) { return firm_none_type; } +ir_type *firm_code_type; ir_type *get_code_type(void) { return firm_code_type; } ir_type *firm_unknown_type; ir_type *get_unknown_type(void) { return firm_unknown_type; } @@ -96,6 +97,10 @@ void firm_init_type(dbg_info *builtin_db, unsigned def_cc_mask) { set_type_state (firm_none_type, layout_fixed); remove_irp_type(firm_none_type); + firm_code_type = new_type(tpop_code, mode_ANY, new_id_from_str("type_code"), builtin_db); + set_type_state(firm_code_type, layout_fixed); + remove_irp_type(firm_code_type); + firm_unknown_type = new_type(tpop_unknown, mode_ANY, new_id_from_str("type_unknown"), builtin_db); set_type_size_bytes(firm_unknown_type, 0); set_type_state (firm_unknown_type, layout_fixed); @@ -113,7 +118,7 @@ void (inc_master_type_visited)(void) { _inc_master_type_visited(); } * Creates a new type representation. */ ir_type * -new_type(tp_op *type_op, ir_mode *mode, ident *name, dbg_info *db) { +new_type(const tp_op *type_op, ir_mode *mode, ident *name, dbg_info *db) { ir_type *res; int node_size; @@ -148,7 +153,8 @@ new_type(tp_op *type_op, ir_mode *mode, ident *name, dbg_info *db) { void free_type(ir_type *tp) { const tp_op *op = get_type_tpop(tp); - if ((get_type_tpop(tp) == tpop_none) || (get_type_tpop(tp) == tpop_unknown)) + if ((get_type_tpop(tp) == tpop_none) || (get_type_tpop(tp) == tpop_unknown) + || (get_type_tpop(tp) == tpop_code)) return; /* Remove from list of all types */ remove_irp_type(tp); @@ -2046,6 +2052,11 @@ int is_compound_type(const ir_type *tp) { return tp->type_op->flags & TP_OP_FLAG_COMPOUND; } +int is_code_type(const ir_type *tp) { + assert(tp && tp->kind == k_type); + return tp->type_op == tpop_code; +} + /* Checks, whether a type is a frame type */ int is_frame_type(const ir_type *tp) { return tp->flags & tf_frame_type;