diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-06-11 16:59:17 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-06-11 16:59:17 +0000 |
commit | 694494638c9f211c1e27c6c08b0d8dc7656e24e8 (patch) | |
tree | ebbbc6a5c16fb2f71c030dc719d566bd7b2d0538 /gcc/lra-constraints.c | |
parent | e3c57fd265541f5124639cc88955fb68edcbcdc8 (diff) | |
download | gcc-694494638c9f211c1e27c6c08b0d8dc7656e24e8.tar.gz |
gcc/
* common.md: New file.
* doc/md.texi: Update description of generic, machine-independent
constraints.
* config/s390/constraints.md (e): Delete.
* Makefile.in (md_file): Include common.md.
* config/m32c/t-m32c (md_file): Likewise.
* genpreds.c (general_mem): New array.
(generic_constraint_letters): Remove constraints now defined by
common.md.
(add_constraint): Map TARGET_MEM_CONSTRAINT to general_mem.
Allow the first character to be '<' or '>' as well.
* genoutput.c (general_mem): New array.
(indep_constraints): Remove constraints now defined by common.md.
(note_constraint): Map TARGET_MEM_CONSTRAINT to general_mem.
Remove special handling of 'm'.
* ira-costs.c (record_reg_classes): Remove special handling of
constraints now defined by common.md.
* ira.c (ira_setup_alts, ira_get_dup_out_num): Likewise.
* ira-lives.c (single_reg_class): Likewise.
(ira_implicitly_set_insn_hard_regs): Likewise.
* lra-constraints.c (reg_class_from_constraints): Likewise.
(process_alt_operands, process_address, curr_insn_transform): Likewise.
* postreload.c (reload_cse_simplify_operands): Likewise.
* reload.c (push_secondary_reload, scratch_reload_class)
(find_reloads, alternative_allows_const_pool_ref): Likewise.
* reload1.c (maybe_fix_stack_asms): Likewise.
* targhooks.c (default_secondary_reload): Likewise.
* stmt.c (parse_output_constraint): Likewise.
* recog.c (preprocess_constraints): Likewise.
(constrain_operands, peep2_find_free_register): Likewise.
(asm_operand_ok): Likewise, but add a comment saying why 'o'
must be handled specially.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211475 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 118 |
1 files changed, 2 insertions, 116 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 284116df1e4..ab8fe3453c4 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -968,14 +968,7 @@ reg_class_from_constraints (const char *p) case ',': return op_class; - case 'p': - op_class = (reg_class_subunion - [op_class][base_reg_class (VOIDmode, ADDR_SPACE_GENERIC, - ADDRESS, SCRATCH)]); - break; - case 'g': - case 'r': op_class = reg_class_subunion[op_class][GENERAL_REGS]; break; @@ -1768,15 +1761,6 @@ process_alt_operands (int only_alternative) c = '\0'; break; - case '=': case '+': case '?': case '*': case '!': - case ' ': case '\t': - break; - - case '%': - /* We only support one commutative marker, the first - one. We already set commutative above. */ - break; - case '&': early_clobber_p = true; break; @@ -1909,105 +1893,11 @@ process_alt_operands (int only_alternative) break; } - case 'p': - cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC, - ADDRESS, SCRATCH); - this_alternative = reg_class_subunion[this_alternative][cl]; - IOR_HARD_REG_SET (this_alternative_set, - reg_class_contents[cl]); - if (costly_p) - { - this_costly_alternative - = reg_class_subunion[this_costly_alternative][cl]; - IOR_HARD_REG_SET (this_costly_alternative_set, - reg_class_contents[cl]); - } - win = true; - badop = false; - break; - - case TARGET_MEM_CONSTRAINT: - if (MEM_P (op) || spilled_pseudo_p (op)) - win = true; - /* We can put constant or pseudo value into memory - to satisfy the constraint. */ - if (CONST_POOL_OK_P (mode, op) || REG_P (op)) - badop = false; - constmemok = true; - break; - - case '<': - if (MEM_P (op) - && (GET_CODE (XEXP (op, 0)) == PRE_DEC - || GET_CODE (XEXP (op, 0)) == POST_DEC)) - win = true; - break; - - case '>': - if (MEM_P (op) - && (GET_CODE (XEXP (op, 0)) == PRE_INC - || GET_CODE (XEXP (op, 0)) == POST_INC)) - win = true; - break; - - /* Memory op whose address is not offsettable. */ - case 'V': - if (MEM_P (op) - && ! offsettable_nonstrict_memref_p (op)) - win = true; - break; - - /* Memory operand whose address is offsettable. */ - case 'o': - if ((MEM_P (op) - && offsettable_nonstrict_memref_p (op)) - || spilled_pseudo_p (op)) - win = true; - /* We can put constant or pseudo value into memory - or make memory address offsetable to satisfy the - constraint. */ - if (CONST_POOL_OK_P (mode, op) || MEM_P (op) || REG_P (op)) - badop = false; - constmemok = true; - offmemok = true; - break; - - case 'E': - case 'F': - if (GET_CODE (op) == CONST_DOUBLE - || (GET_CODE (op) == CONST_VECTOR - && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT))) - win = true; - break; - - case 's': - if (CONST_SCALAR_INT_P (op)) - break; - - case 'i': - if (general_constant_p (op)) - win = true; - break; - - case 'n': - if (CONST_SCALAR_INT_P (op)) - win = true; - break; - - case 'X': - /* This constraint should be excluded by the fast - track. */ - gcc_unreachable (); - break; - case 'g': if (MEM_P (op) || general_constant_p (op) || spilled_pseudo_p (op)) win = true; - /* Drop through into 'r' case. */ - - case 'r': cl = GENERAL_REGS; goto reg; @@ -2821,8 +2711,7 @@ process_address_1 (int nop, rtx *before, rtx *after) enum constraint_num cn = lookup_constraint (constraint); bool change_p; - if (constraint[0] == 'p' - || insn_extra_address_constraint (cn)) + if (insn_extra_address_constraint (cn)) decompose_lea_address (&ad, curr_id->operand_loc[nop]); else if (MEM_P (op)) decompose_mem_address (&ad, op); @@ -2853,8 +2742,7 @@ process_address_1 (int nop, rtx *before, rtx *after) /* Target hooks sometimes don't treat extra-constraint addresses as legitimate address_operands, so handle them specially. */ - if (constraint[0] != 'p' - && insn_extra_address_constraint (cn) + if (insn_extra_address_constraint (cn) && satisfies_address_constraint_p (&ad, cn)) return change_p; @@ -3576,8 +3464,6 @@ curr_insn_transform (void) (c = *constraint) && c != ',' && c != '#'; constraint += CONSTRAINT_LEN (c, constraint)) { - if (c == TARGET_MEM_CONSTRAINT || c == 'o') - break; enum constraint_num cn = lookup_constraint (constraint); if (insn_extra_memory_constraint (cn) && satisfies_memory_constraint_p (tem, cn)) |