+2010-11-04 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/46213
+ * tree-vect-loop.c (vect_is_simple_reduction_1): Handle
+ MINUS_EXPR only if the first operand is reduction operand.
+
2010-11-04 Richard Guenther <rguenther@suse.de>
Richard Henderson <rth@redhat.com>
+2010-11-04 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/46213
+ * gfortran.dg/vect/pr46213.f90: New.
+
2010-11-04 Richard Guenther <rguenther@suse.de>
PR testsuite/45702
--- /dev/null
+! { dg-do compile }
+! { dg-options "-O -fno-tree-loop-ivcanon -ftree-vectorize -fno-tree-ccp -fno-tree-ch -finline-small-functions" }
+
+module foo
+ INTEGER, PARAMETER :: ONE = 1
+end module foo
+program test
+ use foo
+ integer :: a(ONE), b(ONE), c(ONE), d(ONE)
+ interface
+ function h_ext()
+ end function h_ext
+ end interface
+ c = j()
+ if (any (c .ne. check)) call myabort (7)
+contains
+ function j()
+ integer :: j(ONE), cc(ONE)
+ j = cc - j
+ end function j
+ function get_d()
+ end function get_d
+end program test
+
+! { dg-final { cleanup-tree-dump "vect" } }
simply rewriting this into "res += -x[i]". Avoid changing
gimple instruction for the first simple tests and only do this
if we're allowed to change code at all. */
- if (code == MINUS_EXPR && modify)
+ if (code == MINUS_EXPR
+ && modify
+ && (op1 = gimple_assign_rhs1 (def_stmt))
+ && TREE_CODE (op1) == SSA_NAME
+ && SSA_NAME_DEF_STMT (op1) == phi)
code = PLUS_EXPR;
if (check_reduction