aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>1997-05-02 18:16:50 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>1997-05-02 18:16:50 +0000
commit99c2b71fd5ba314067699ba0dfbf96d8e8967181 (patch)
tree621ec82dea1964a285aa745cb0018731cf5dda02
parentdbd7556ea43c59fcea8caa0d0c52dec6b4304369 (diff)
downloadgcc-99c2b71fd5ba314067699ba0dfbf96d8e8967181.zip
gcc-99c2b71fd5ba314067699ba0dfbf96d8e8967181.tar.gz
gcc-99c2b71fd5ba314067699ba0dfbf96d8e8967181.tar.bz2
Check the mode when checking values equivalent to sreg
From-SVN: r14009
-rw-r--r--gcc/reload1.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 8489fe4..199ae68 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -8035,8 +8035,21 @@ reload_cse_noop_set_p (set, insn)
for (x = reg_values[sreg]; x; x = XEXP (x, 1))
{
- if (XEXP (x, 0) != 0
- && reload_cse_regno_equal_p (dreg, XEXP (x, 0), dest_mode))
+ rtx tmp;
+
+ if (XEXP (x, 0) == 0)
+ continue;
+
+ if (dest_mode == GET_MODE (x))
+ tmp = XEXP (x, 0);
+ else if (GET_MODE_BITSIZE (dest_mode)
+ < GET_MODE_BITSIZE (GET_MODE (x)))
+ tmp = gen_lowpart_common (dest_mode, XEXP (x, 0));
+ else
+ continue;
+
+ if (tmp
+ && reload_cse_regno_equal_p (dreg, tmp, dest_mode))
{
ret = 1;
break;