aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog2
-rw-r--r--gcc/cse.c8
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4a8ed4a..6424cae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,7 @@
2000-08-25 Jim Wilson <wilson@cygnus.com>
+ * cse.c (cse_insn): Don't pass label subtraction to force_const_mem.
+
* function.c (gen_mem_addressof): Clear MEM_ALIAS_SET if no decl.
2000-08-25 Greg McGary <greg@mcgary.org>
diff --git a/gcc/cse.c b/gcc/cse.c
index 7073f1e..c0b72e3 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5328,8 +5328,16 @@ cse_insn (insn, libcall_insn)
else if (constant_pool_entries_cost
&& CONSTANT_P (trial)
+ /* Reject cases that will abort in decode_rtx_const.
+ On the alpha when simplifying a switch, we get
+ (const (truncate (minus (label_ref) (label_ref)))). */
&& ! (GET_CODE (trial) == CONST
&& GET_CODE (XEXP (trial, 0)) == TRUNCATE)
+ /* Likewise on IA-64, except without the truncate. */
+ && ! (GET_CODE (trial) == CONST
+ && GET_CODE (XEXP (trial, 0)) == MINUS
+ && GET_CODE (XEXP (XEXP (trial, 0), 0)) == LABEL_REF
+ && GET_CODE (XEXP (XEXP (trial, 0), 1)) == LABEL_REF)
&& (src_folded == 0
|| (GET_CODE (src_folded) != MEM
&& ! src_folded_force_flag))