diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-11-10 14:06:56 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-11-10 14:06:56 +0000 |
commit | ec4d2c3d71e53c1a84c520b4761c9df6a52ab73b (patch) | |
tree | f4818fc8c8e6bf0a682024c1468df6402331438b | |
parent | 0eac737b74c9243af70933ff77f9b5e6a9697f5c (diff) | |
download | gcc-ec4d2c3d71e53c1a84c520b4761c9df6a52ab73b.tar.gz |
2014-11-10 Richard Biener <rguenther@suse.de>
PR middle-end/63798
* expr.c (expand_expr_real_2): When expanding FMA_EXPRs
properly treat the embedded multiplication as commutative
when looking for feeding negates.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217287 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/expr.c | 13 |
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a8ecaeaebb2..a2157f63203 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-11-10 Richard Biener <rguenther@suse.de> + + PR middle-end/63798 + * expr.c (expand_expr_real_2): When expanding FMA_EXPRs + properly treat the embedded multiplication as commutative + when looking for feeding negates. + 2014-11-10 Joern Rennecke <joern.rennecke@embecosm.com> * config/avr/avr.h (CPLUSPLUS_CPP_SPEC): Define. diff --git a/gcc/expr.c b/gcc/expr.c index 203e28f56d1..0ef06ea98ae 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8621,6 +8621,19 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode, } def0 = get_def_for_expr (treeop0, NEGATE_EXPR); + /* The multiplication is commutative - look at its 2nd operand + if the first isn't fed by a negate. */ + if (!def0) + { + def0 = get_def_for_expr (treeop1, NEGATE_EXPR); + /* Swap operands if the 2nd operand is fed by a negate. */ + if (def0) + { + tree tem = treeop0; + treeop0 = treeop1; + treeop1 = tem; + } + } def2 = get_def_for_expr (treeop2, NEGATE_EXPR); op0 = op2 = NULL; |