aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/reload1.c')
-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;