aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.0/gcc/combine.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.0/gcc/combine.c')
-rw-r--r--gcc-4.4.0/gcc/combine.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/gcc-4.4.0/gcc/combine.c b/gcc-4.4.0/gcc/combine.c
index 5bffb5845..0de23fe0f 100644
--- a/gcc-4.4.0/gcc/combine.c
+++ b/gcc-4.4.0/gcc/combine.c
@@ -2445,10 +2445,16 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
i2dest = SET_DEST (temp);
i2dest_killed = dead_or_set_p (i2, i2dest);
+ /* Replace the source in I2 with the new constant and make the
+ resulting insn the new pattern for I3. Then skip to where we
+ validate the pattern. Everything was set up above. */
SUBST (SET_SRC (temp),
immed_double_const (olo, ohi, GET_MODE (SET_DEST (temp))));
newpat = PATTERN (i2);
+
+ /* The dest of I3 has been replaced with the dest of I2. */
+ changed_i3_dest = 1;
goto validate_replacement;
}
}
@@ -2820,8 +2826,6 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
}
}
- /* We come here when we are replacing a destination in I2 with the
- destination of I3. */
validate_replacement:
/* Note which hard regs this insn has as inputs. */
@@ -8512,12 +8516,6 @@ distribute_and_simplify_rtx (rtx x, int n)
enum rtx_code outer_code, inner_code;
rtx decomposed, distributed, inner_op0, inner_op1, new_op0, new_op1, tmp;
- /* Distributivity is not true for floating point as it can change the
- value. So we don't do it unless -funsafe-math-optimizations. */
- if (FLOAT_MODE_P (GET_MODE (x))
- && ! flag_unsafe_math_optimizations)
- return NULL_RTX;
-
decomposed = XEXP (x, n);
if (!ARITHMETIC_P (decomposed))
return NULL_RTX;