summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-12-14 01:58:37 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-12-14 01:58:37 +0000
commit7ca23dda58bd6ed87024374f379edf4a5dbbc076 (patch)
tree4b31f36d4e3827f8a947d86dc8565ca71c0b6d0e /gcc/combine.c
parentfda38c1fcec8a2128c900067c9a8e68363e9829d (diff)
downloadgcc-7ca23dda58bd6ed87024374f379edf4a5dbbc076.tar.gz
(subst, case MINUS): Canonicalize (minus A (plus A B)).
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@6226 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index f4da033f10c..801d26c8964 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -3564,6 +3564,17 @@ subst (x, from, to, in_dest, unique_copy)
- INTVAL (XEXP (XEXP (x, 1), 1)) - 1);
goto restart;
}
+
+ /* 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))
+ {
+ x = gen_binary (MINUS, mode,
+ gen_binary (MINUS, mode, XEXP (x, 0),
+ XEXP (XEXP (x, 1), 0)),
+ XEXP (XEXP (x, 1), 1));
+ goto restart;
+ }
break;
case MULT: