openbsd-ports/lang/gcc/3.3/patches/pp-gcc_combine_c
2005-01-04 23:06:33 +00:00

47 lines
1.8 KiB
Plaintext

$OpenBSD: pp-gcc_combine_c,v 1.1 2005/01/04 23:06:33 espie Exp $
--- gcc/combine.c.orig Sun Jul 25 20:49:54 2004
+++ gcc/combine.c Mon Jan 3 10:17:41 2005
@@ -3873,7 +3873,17 @@ combine_simplify_rtx (x, op0_mode, last,
rtx inner_op0 = XEXP (XEXP (x, 0), 1);
rtx inner_op1 = XEXP (x, 1);
rtx inner;
-
+
+#ifndef FRAME_GROWS_DOWNWARD
+ if (flag_propolice_protection
+ && code == PLUS
+ && other == frame_pointer_rtx
+ && GET_CODE (inner_op0) == CONST_INT
+ && GET_CODE (inner_op1) == CONST_INT
+ && INTVAL (inner_op0) > 0
+ && INTVAL (inner_op0) + INTVAL (inner_op1) <= 0)
+ return x;
+#endif
/* Make sure we pass the constant operand if any as the second
one if this is a commutative operation. */
if (CONSTANT_P (inner_op0) && GET_RTX_CLASS (code) == 'c')
@@ -4286,6 +4296,11 @@ combine_simplify_rtx (x, op0_mode, last,
they are now checked elsewhere. */
if (GET_CODE (XEXP (x, 0)) == PLUS
&& CONSTANT_ADDRESS_P (XEXP (XEXP (x, 0), 1)))
+#ifndef FRAME_GROWS_DOWNWARD
+ if (! (flag_propolice_protection
+ && XEXP (XEXP (x, 0), 0) == frame_pointer_rtx
+ && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT))
+#endif
return gen_binary (PLUS, mode,
gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0),
XEXP (x, 1)),
@@ -4414,7 +4429,10 @@ combine_simplify_rtx (x, op0_mode, last,
/* Canonicalize (minus A (plus B C)) to (minus (minus A B) C) for
integers. */
- if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode))
+ if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode)
+ && (! (flag_propolice_protection
+ && XEXP (XEXP (x, 1), 0) == frame_pointer_rtx
+ && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT)))
return gen_binary (MINUS, mode,
gen_binary (MINUS, mode, XEXP (x, 0),
XEXP (XEXP (x, 1), 0)),