re PR tree-optimization/63798 (FAIL: gcc.target/powerpc/ppc-fmadd-1.c scan-assembler...
authorRichard Biener <rguenther@suse.de>
Mon, 10 Nov 2014 14:06:56 +0000 (14:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 10 Nov 2014 14:06:56 +0000 (14:06 +0000)
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.

From-SVN: r217287

gcc/ChangeLog
gcc/expr.c

index a8ecaeaebb2a72a0425c02525237e4b76c1ff650..a2157f63203c3eeccb0d709244af886cbf144620 100644 (file)
@@ -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.
index 203e28f56d18ecd9321c727115f19de5c3908a41..0ef06ea98ae5d8d5a9fd1813d2a4c6f91ab11943 100644 (file)
@@ -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;