X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firargs.c;h=9bf7b3c8a41bfe2a96c44206953d99f868b82dd5;hb=ad7dcd5e09ab2e082a395b7b26de2074b9be9320;hp=2e8af2484be89601adedf9a061b5dd92de310fd3;hpb=198667e739c74a08f216e53cd1ba3938f0d233b0;p=libfirm diff --git a/ir/ir/irargs.c b/ir/ir/irargs.c index 2e8af2484..9bf7b3c8a 100644 --- a/ir/ir/irargs.c +++ b/ir/ir/irargs.c @@ -14,6 +14,8 @@ # include "config.h" #endif +#ifdef WITH_LIBCORE + #include "bitset.h" #include @@ -29,17 +31,17 @@ /** * identify a firm object type */ -static int firm_get_lc_arg_type(const lc_arg_occ_t *occ) { +static int firm_get_arg_type(const lc_arg_occ_t *occ) { /* Firm objects are always pointer */ return lc_arg_type_ptr; } -static int firm_get_lc_arg_type_int(const lc_arg_occ_t *occ) { +static int firm_get_arg_type_int(const lc_arg_occ_t *occ) { return lc_arg_type_int; } -static int bitset_get_lc_arg_type(const lc_arg_occ_t *occ) { +static int bitset_get_arg_type(const lc_arg_occ_t *occ) { return lc_arg_type_ptr; } @@ -84,6 +86,15 @@ static int firm_emit_dbg(lc_appendable_t *app, return lc_arg_append(app, occ, buf, strlen(buf)); } +/** + * Beware: do not set the entity ld_name + */ +static const char *get_entity_ld_name_ex(entity *ent) { + if (ent->ld_name) + return get_entity_ld_name(ent); + return get_entity_name(ent); +} + /** * emit a Firm object */ @@ -99,6 +110,7 @@ static int firm_emit(lc_appendable_t *app, char add[64]; char buf[256]; char tv[256]; + entity *ent; buf[0] = '\0'; add[0] = '\0'; @@ -113,7 +125,7 @@ static int firm_emit(lc_appendable_t *app, break; case k_entity: snprintf(buf, sizeof(buf), "%s%s", A("ent"), - isupper(occ->conversion) ? get_entity_ld_name(X): get_entity_name(X)); + isupper(occ->conversion) ? get_entity_ld_name_ex(X): get_entity_name(X)); snprintf(add, sizeof(add), "[%ld]", get_entity_nr(X)); break; case k_type: @@ -161,23 +173,29 @@ static int firm_emit(lc_appendable_t *app, snprintf(buf, sizeof(buf), "%s%s", A("op"), get_op_name(X)); break; case k_ir_compound_graph_path: - strncat(buf, A("cgp"), sizeof(buf)); - n = get_compound_graph_path_length(X); + for (i = 0; i < n; ++i) { - entity *ent = get_compound_graph_path_node(X, i); + ent = get_compound_graph_path_node(X, i); + + strncat(buf, ".", sizeof(buf)); strncat(buf, get_entity_name(ent), sizeof(buf)); - if (i < n - 1) - strncat(buf, ".", sizeof(buf)); + if (is_Array_type(get_entity_owner(ent))) { + snprintf(add, sizeof(add), "[%d]", + get_compound_graph_path_array_index(X, i)); + strncat(buf, add, sizeof(buf)); + } } + add[0] = '\0'; break; + default: snprintf(buf, sizeof(buf), "UNKWN"); snprintf(add, sizeof(add), "[%p]", X); } } - if(occ->flag_plus) + if (occ->flag_plus) strncat(buf, add, sizeof(buf)); return lc_arg_append(app, occ, buf, strlen(buf)); @@ -224,18 +242,18 @@ static int firm_emit_pnc(lc_appendable_t *app, return lc_arg_append(app, occ, p, strlen(p)); } -lc_arg_env_t *firm_get_lc_arg_env(void) +lc_arg_env_t *firm_get_arg_env(void) { #define X(name, letter) {"firm:" name, letter} static lc_arg_env_t *env = NULL; - static lc_arg_handler_t firm_handler = { firm_get_lc_arg_type, firm_emit }; - static lc_arg_handler_t ident_handler = { firm_get_lc_arg_type, firm_emit_ident }; - static lc_arg_handler_t indent_handler = { firm_get_lc_arg_type_int, firm_emit_indent }; - static lc_arg_handler_t pnc_handler = { firm_get_lc_arg_type_int, firm_emit_pnc }; - static lc_arg_handler_t bitset_handler = { bitset_get_lc_arg_type, bitset_emit }; - static lc_arg_handler_t debug_handler = { firm_get_lc_arg_type, firm_emit_dbg }; + static lc_arg_handler_t firm_handler = { firm_get_arg_type, firm_emit }; + static lc_arg_handler_t ident_handler = { firm_get_arg_type, firm_emit_ident }; + static lc_arg_handler_t indent_handler = { firm_get_arg_type_int, firm_emit_indent }; + static lc_arg_handler_t pnc_handler = { firm_get_arg_type_int, firm_emit_pnc }; + static lc_arg_handler_t bitset_handler = { bitset_get_arg_type, bitset_emit }; + static lc_arg_handler_t debug_handler = { firm_get_arg_type, firm_emit_dbg }; static struct { const char *name; @@ -251,6 +269,7 @@ lc_arg_env_t *firm_get_lc_arg_env(void) X("mode", 'm'), X("block", 'B'), X("pnc", '='), + X("cg_path", 'P'), }; int i; @@ -266,9 +285,11 @@ lc_arg_env_t *firm_get_lc_arg_env(void) lc_arg_register(env, "firm:ident", 'I', &ident_handler); lc_arg_register(env, "firm:indent", 'D', &indent_handler); lc_arg_register(env, "firm:pnc", '=', &pnc_handler); - lc_arg_register(env, "firm:dbg_info", 'g', &debug_handler); + lc_arg_register(env, "firm:dbg_info", 'G', &debug_handler); /* lc_arg_register(env, "firm:bitset", 'b', &bitset_handler); */ } return env; } + +#endif /* WITH_LIBCORE */