diff options
author | Franz Sirl <Franz.Sirl-kernel@lauterbach.com> | 1999-03-02 00:45:45 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-03-01 17:45:45 -0700 |
commit | ac7ef8d56b106f3c2de2d65da97b59eb0509c8b9 (patch) | |
tree | ed53a4bf9e24e684e4fc6805fd719d557e111cd9 | |
parent | 560a78fc8a731df300fe045aa1dfa4125858ab17 (diff) | |
download | gcc-ac7ef8d56b106f3c2de2d65da97b59eb0509c8b9.zip gcc-ac7ef8d56b106f3c2de2d65da97b59eb0509c8b9.tar.gz gcc-ac7ef8d56b106f3c2de2d65da97b59eb0509c8b9.tar.bz2 |
cse.c (fold_rtx): Update comments for (const (minus (label) (label))) case.
* cse.c (fold_rtx): Update comments for (const (minus (label) (label)))
case.
(cse_insn): Avoid creating a bogus REG_EQUAL note for
(const (minus (label) (label)))
(record_jump_cond): Fix mismatched paren in comment.
Fixes powerpc label-label problem.
Bootstraps on the x86.
Co-Authored-By: Jeffrey A Law <law@cygnus.com>
From-SVN: r25527
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cse.c | 21 |
2 files changed, 26 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 452d87a..0e4b827 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Tue Mar 2 01:40:01 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com> + Jeffrey A Law (law@cygnus.com) + + * cse.c (fold_rtx): Update comments for (const (minus (label) (label))) + case. + (cse_insn): Avoid creating a bogus REG_EQUAL note for + (const (minus (label) (label))) + (record_jump_cond): Fix mismatched paren in comment. + Tue Mar 2 01:07:12 1999 Dan Nicolaescu <dann@godzilla.ics.uci.edu> * final.c (end_final): There are 11 words in the "main header" @@ -5292,7 +5292,11 @@ fold_rtx (x, insn) /* Indicate this is a constant. This isn't a valid form of CONST, but it will only be used to fold the next insns and then discarded, so - it should be safe. */ + it should be safe. + + Note this expression must be explicitly discarded, + by cse_insn, else it may end up in a REG_EQUAL note + and "escape" to cause problems elsewhere. */ return gen_rtx_CONST (GET_MODE (new), new); } } @@ -6037,7 +6041,7 @@ record_jump_cond (code, mode, op0, op1, reversed_nonequality) /* If OP0 and OP1 are known equal, and either is a paradoxical SUBREG, we know that they are also equal in the smaller mode (this is also true for all smaller modes whether or not there is a SUBREG, but - is not worth testing for with no SUBREG. */ + is not worth testing for with no SUBREG). */ /* Note that GET_MODE (op0) may not equal MODE. */ if (code == EQ && GET_CODE (op0) == SUBREG @@ -7170,9 +7174,18 @@ cse_insn (insn, libcall_insn) equivalent constant, we want to add a REG_NOTE. We don't want to write a REG_EQUAL note for a constant pseudo since verifying that that pseudo hasn't been eliminated is a pain. Such a note also - won't help anything. */ + won't help anything. + + Avoid a REG_EQUAL note for (CONST (MINUS (LABEL_REF) (LABEL_REF))) + which can be created for a reference to a compile time computable + entry in a jump table. */ + if (n_sets == 1 && src_const && GET_CODE (dest) == REG - && GET_CODE (src_const) != REG) + && GET_CODE (src_const) != REG + && ! (GET_CODE (src_const) == CONST + && GET_CODE (XEXP (src_const, 0)) == MINUS + && GET_CODE (XEXP (XEXP (src_const, 0), 0)) == LABEL_REF + && GET_CODE (XEXP (XEXP (src_const, 0), 1)) == LABEL_REF)) { tem = find_reg_note (insn, REG_EQUAL, NULL_RTX); |