diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2014-05-27 10:06:22 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2014-05-27 10:06:22 +0000 |
commit | 4cc8d9d2df6f618f133f6d5ec1019333a0d942e5 (patch) | |
tree | 5d62ebd89439d627b40ecb8026ad31c4827dbfae /gcc/lra.c | |
parent | 9921417d94eb2b25ed60b1eafaaf5888164221a4 (diff) | |
download | gcc-4cc8d9d2df6f618f133f6d5ec1019333a0d942e5.zip gcc-4cc8d9d2df6f618f133f6d5ec1019333a0d942e5.tar.gz gcc-4cc8d9d2df6f618f133f6d5ec1019333a0d942e5.tar.bz2 |
system.h (TEST_BIT): New macro.
gcc/
* system.h (TEST_BIT): New macro.
* recog.h (alternative_mask): New type.
(ALL_ALTERNATIVES, ALTERNATIVE_BIT): New macros.
(recog_data_d): Replace alternative_enabled_p array with
enabled_alternatives.
(target_recog): New structure.
(default_target_recog, this_target_recog): Declare.
(get_enabled_alternatives, recog_init): Likewise.
* recog.c (default_target_recog, this_target_recog): New variables.
(get_enabled_alternatives): New function.
(extract_insn): Use it.
(recog_init): New function.
(preprocess_constraints, constrain_operands): Adjust for change to
recog_data.
* postreload.c (reload_cse_simplify_operands): Likewise.
* reload.c (find_reloads): Likewise.
* ira-costs.c (record_reg_classes): Likewise.
* ira-lives.c (single_reg_class): Likewise. Fix bug in which
all alternatives after a disabled one would be skipped.
(ira_implicitly_set_insn_hard_regs): Likewise.
* ira.c (ira_setup_alts): Adjust for change to recog_data.
* lra-int.h (lra_insn_recog_data): Replace alternative_enabled_p
with enabled_alternatives.
* lra.c (free_insn_recog_data): Update accordingly.
(lra_update_insn_recog_data): Likewise.
(lra_set_insn_recog_data): Likewise. Use get_enabled_alternatives.
* lra-constraints.c (process_alt_operands): Likewise. Handle
only_alternative as part of the enabled mask.
* target-globals.h (this_target_recog): Declare.
(target_globals): Add a recog field.
(restore_target_globals): Restore this_target_recog.
* target-globals.c: Include recog.h.
(default_target_globals): Initialize recog field.
(save_target_globals): Likewise.
* reginfo.c (reinit_regs): Call recog_init.
* toplev.c (backend_init_target): Likewise.
From-SVN: r210964
Diffstat (limited to 'gcc/lra.c')
-rw-r--r-- | gcc/lra.c | 37 |
1 files changed, 8 insertions, 29 deletions
@@ -724,8 +724,6 @@ free_insn_recog_data (lra_insn_recog_data_t data) free (data->dup_loc); if (data->arg_hard_regs != NULL) free (data->arg_hard_regs); - if (HAVE_ATTR_enabled && data->alternative_enabled_p != NULL) - free (data->alternative_enabled_p); if (data->icode < 0 && NONDEBUG_INSN_P (data->insn)) { if (data->insn_static_data->operand_alternative != NULL) @@ -1072,7 +1070,7 @@ lra_set_insn_recog_data (rtx insn) data->insn_static_data = &debug_insn_static_data; data->dup_loc = NULL; data->arg_hard_regs = NULL; - data->alternative_enabled_p = NULL; + data->enabled_alternatives = ALL_ALTERNATIVES; data->operand_loc = XNEWVEC (rtx *, 1); data->operand_loc[0] = &INSN_VAR_LOCATION_LOC (insn); return data; @@ -1132,7 +1130,7 @@ lra_set_insn_recog_data (rtx insn) = (insn_static_data->operand[i].constraint[0] == '=' ? OP_OUT : insn_static_data->operand[i].constraint[0] == '+' ? OP_INOUT : OP_IN); - data->alternative_enabled_p = NULL; + data->enabled_alternatives = ALL_ALTERNATIVES; } else { @@ -1159,27 +1157,7 @@ lra_set_insn_recog_data (rtx insn) memcpy (locs, recog_data.dup_loc, n * sizeof (rtx *)); } data->dup_loc = locs; - if (HAVE_ATTR_enabled) - { - bool *bp; - - n = insn_static_data->n_alternatives; - lra_assert (n >= 0); - data->alternative_enabled_p = bp = XNEWVEC (bool, n); - /* Cache the insn because we don't want to call extract_insn - from get_attr_enabled as extract_insn modifies - which_alternative. The attribute enabled should not depend - on insn operands, operand modes, operand types, and operand - constraints. It should depend on the architecture. If it - is not true, we should rewrite this file code to use - extract_insn instead of less expensive insn_extract. */ - recog_data.insn = insn; - for (i = 0; i < n; i++) - { - which_alternative = i; - bp[i] = get_attr_enabled (insn); - } - } + data->enabled_alternatives = get_enabled_alternatives (insn); } if (GET_CODE (PATTERN (insn)) == CLOBBER || GET_CODE (PATTERN (insn)) == USE) insn_static_data->hard_regs = NULL; @@ -1370,18 +1348,19 @@ lra_update_insn_recog_data (rtx insn) #ifdef ENABLE_CHECKING { int i; - bool *bp; + alternative_mask enabled; n = insn_static_data->n_alternatives; - bp = data->alternative_enabled_p; - lra_assert (n >= 0 && bp != NULL); + enabled = data->enabled_alternatives; + lra_assert (n >= 0); /* Cache the insn to prevent extract_insn call from get_attr_enabled. */ recog_data.insn = insn; for (i = 0; i < n; i++) { which_alternative = i; - lra_assert (bp[i] == get_attr_enabled (insn)); + lra_assert (TEST_BIT (enabled, i) + == (bool) get_attr_enabled (insn)); } } #endif |