diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1992-07-31 08:13:38 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1992-07-31 08:13:38 -0400 |
commit | 58c8c59349b32c5f8ced092c74d2918580c218f0 (patch) | |
tree | 3157856d1898a840aac68ef6de2bc701b24e3867 /gcc | |
parent | 510dd77e9569867570a74513c79eb767344370c6 (diff) | |
download | gcc-58c8c59349b32c5f8ced092c74d2918580c218f0.zip gcc-58c8c59349b32c5f8ced092c74d2918580c218f0.tar.gz gcc-58c8c59349b32c5f8ced092c74d2918580c218f0.tar.bz2 |
entered into RCS
From-SVN: r1731
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cexp.y | 2 | ||||
-rw-r--r-- | gcc/combine.c | 30 | ||||
-rw-r--r-- | gcc/cse.c | 2 | ||||
-rw-r--r-- | gcc/reload.c | 7 | ||||
-rw-r--r-- | gcc/reload1.c | 2 | ||||
-rw-r--r-- | gcc/reorg.c | 2 |
6 files changed, 34 insertions, 11 deletions
@@ -65,6 +65,8 @@ static int keyword_parsing = 0; /* some external tables of character types */ extern unsigned char is_idstart[], is_idchar[], is_hor_space[]; +extern char *xmalloc (); + /* Flag for -pedantic. */ extern int pedantic; diff --git a/gcc/combine.c b/gcc/combine.c index ab9b09d..a2a11a1 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -1886,14 +1886,32 @@ try_combine (i3, i2, i1) distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed, NULL_RTX), NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, NULL_RTX, NULL_RTX); + + /* For I2 and I1, we have to be careful. If NEWI2PAT exists and sets + I2DEST or I1DEST, the death must be somewhere before I2, not I3. If + we passed I3 in that case, it might delete I2. */ + if (i2dest_in_i2src) - distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i2dest, NULL_RTX), - NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, - NULL_RTX, NULL_RTX); + { + if (newi2pat && reg_set_p (i2dest, newi2pat)) + distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i2dest, NULL_RTX), + NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX); + else + distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i2dest, NULL_RTX), + NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, + NULL_RTX, NULL_RTX); + } + if (i1dest_in_i1src) - distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i1dest, NULL_RTX), - NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, - NULL_RTX, NULL_RTX); + { + if (newi2pat && reg_set_p (i1dest, newi2pat)) + distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i1dest, NULL_RTX), + NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX); + else + distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i1dest, NULL_RTX), + NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, + NULL_RTX, NULL_RTX); + } distribute_links (i3links); distribute_links (i2links); @@ -1998,7 +1998,7 @@ exp_equiv_p (x, y, validate, equal_values) return x == y; case CONST_INT: - return XINT (x, 0) == XINT (y, 0); + return INTVAL (x) == INTVAL (y); case LABEL_REF: case SYMBOL_REF: diff --git a/gcc/reload.c b/gcc/reload.c index 3dfcb2d..381a86e 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -4153,9 +4153,10 @@ find_reloads_address_1 (x, context, loc, operand, ind_levels) if (reg_equiv_constant[regno] != 0) { - push_reload (reg_equiv_constant[regno], NULL_RTX, loc, NULL_PTR, - context ? INDEX_REG_CLASS : BASE_REG_CLASS, - GET_MODE (x), VOIDmode, 0, 0, operand); + find_reloads_address_part (reg_equiv_constant[regno], loc, + (context ? INDEX_REG_CLASS + : BASE_REG_CLASS), + GET_MODE (x), operand, ind_levels); return 1; } diff --git a/gcc/reload1.c b/gcc/reload1.c index 4627437..2c89096 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -5673,8 +5673,8 @@ gen_input_reload (reloadreg, in, before_insn) if (GET_MODE (loc) != GET_MODE (in)) in = gen_rtx (REG, GET_MODE (loc), REGNO (in)); - emit_insn_before (gen_move_insn (reloadreg, loc), before_insn); emit_insn_before (gen_move_insn (loc, in), before_insn); + emit_insn_before (gen_move_insn (reloadreg, loc), before_insn); } #endif diff --git a/gcc/reorg.c b/gcc/reorg.c index 778090e..d95c734 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -1110,6 +1110,8 @@ get_branch_condition (insn, target) return gen_rtx (reverse_condition (GET_CODE (XEXP (src, 0))), GET_MODE (XEXP (src, 0)), XEXP (XEXP (src, 0), 0), XEXP (XEXP (src, 0), 1)); + + return 0; } /* Return non-zero if CONDITION is more strict than the condition of |