diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1992-08-19 17:06:37 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1992-08-19 17:06:37 -0400 |
commit | 7fe4336e989ab447811231573647ef15f871c093 (patch) | |
tree | 29f1a4d7ad1d9106729fa22fcd087b138d837929 /gcc/local-alloc.c | |
parent | 26d970a5b93d150689f84c0649143959db4dd40e (diff) | |
download | gcc-7fe4336e989ab447811231573647ef15f871c093.tar.gz |
(alloc_qty_for_scratch, block_alloc): Provide alternate code in some cases when REGISTER_CONSTRAINTS is not defined.
(alloc_qty_for_scratch, block_alloc): Provide alternate code in some cases
when REGISTER_CONSTRAINTS is not defined.
(requires_inout_p): Only used when REGISTER_CONSTRAINTS is defined.
From-SVN: r1899
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r-- | gcc/local-alloc.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index effde39d03a..918f13fc982 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -279,6 +279,7 @@ alloc_qty_for_scratch (scratch, n, insn, insn_code_num, insn_number) char *p, c; int i; +#ifdef REGISTER_CONSTRAINTS /* If we haven't yet computed which alternative will be used, do so now. Then set P to the constraints for that alternative. */ if (which_alternative == -1) @@ -335,6 +336,12 @@ alloc_qty_for_scratch (scratch, n, insn, insn_code_num, insn_number) if (class == NO_REGS || reg_class_size[(int) class] == 1) return; +#else /* REGISTER_CONSTRAINTS */ + + class = GENERAL_REGS; +#endif + + qty = next_qty++; qty_first_reg[qty] = -1; @@ -1099,9 +1106,15 @@ block_alloc (b) If tying is done, WIN is set nonzero. */ if (insn_code_number >= 0 +#ifdef REGISTER_CONSTRAINTS && insn_n_operands[insn_code_number] > 1 && insn_operand_constraint[insn_code_number][0][0] == '=' - && insn_operand_constraint[insn_code_number][0][1] != '&') + && insn_operand_constraint[insn_code_number][0][1] != '&' +#else + && GET_CODE (PATTERN (insn)) == SET + && rtx_equal_p (SET_DEST (PATTERN (insn)), recog_operand[0]) +#endif + ) { r0 = recog_operand[0]; r1 = recog_operand[1]; @@ -1109,7 +1122,13 @@ block_alloc (b) /* If the first operand is an address, find a register in it. There may be more than one register, but we only try one of them. */ - if (insn_operand_constraint[insn_code_number][1][0] == 'p') + if ( +#ifdef REGISTER_CONSTRAINTS + insn_operand_constraint[insn_code_number][1][0] == 'p' +#else + insn_operand_address_p[insn_code_number][1] +#endif + ) while (GET_CODE (r1) == PLUS || GET_CODE (r1) == MULT) r1 = XEXP (r1, 0); @@ -1119,10 +1138,14 @@ block_alloc (b) If we have a move insn or an insn whose first input can only be in the same register as the output, give priority to an equivalence found from that insn. */ +#ifdef REGISTER_CONSTRAINTS int may_save_copy = ((SET_DEST (body) == r0 && SET_SRC (body) == r1) || (r1 == recog_operand[1] && (requires_inout_p (insn_operand_constraint[insn_code_number][1])))); +#else + int may_save_copy = 0; +#endif if (GET_CODE (r1) == REG || GET_CODE (r1) == SUBREG) win = combine_regs (r1, r0, may_save_copy, @@ -1130,7 +1153,15 @@ block_alloc (b) if (win == 0 && insn_n_operands[insn_code_number] > 2 +#ifdef REGISTER_CONSTRAINTS && insn_operand_constraint[insn_code_number][1][0] == '%' +#else + && GET_CODE (PATTERN (insn)) == SET + && (GET_RTX_CLASS (GET_CODE (SET_SRC (PATTERN (insn)))) + == 'c') + && rtx_equal_p (recog_operand[2], + XEXP (SET_SRC (PATTERN (insn)), 0)) +#endif && (r1 = recog_operand[2], GET_CODE (r1) == REG || GET_CODE (r1) == SUBREG)) win = combine_regs (r1, r0, may_save_copy, @@ -2017,6 +2048,8 @@ no_conflict_p (insn, r0, r1) return ok; } +#ifdef REGISTER_CONSTRAINTS + /* Return 1 if the constraint string P indicates that the a the operand must be equal to operand 0 and that no register is acceptable. */ @@ -2059,6 +2092,7 @@ requires_inout_p (p) return found_zero; } +#endif /* REGISTER_CONSTRAINTS */ void dump_local_alloc (file) |