===================================================================
@@ -2191,7 +2191,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_n
VEC (tree, heap) *voprnds = VEC_alloc (tree, heap, number_of_vectors);
bool constant_p, is_store;
tree neutral_op = NULL;
- enum tree_code code = gimple_assign_rhs_code (stmt);
+ enum tree_code code = gimple_expr_code (stmt);
gimple def_stmt;
struct loop *loop;
@@ -2287,22 +2287,32 @@ vect_get_constant_vectors (tree op, slp_tree slp_n
{
if (is_store)
op = gimple_assign_rhs1 (stmt);
- else if (gimple_assign_rhs_code (stmt) != COND_EXPR)
- op = gimple_op (stmt, op_num + 1);
- else
+ else
{
- if (op_num == 0 || op_num == 1)
+ switch (code)
{
- tree cond = gimple_assign_rhs1 (stmt);
- op = TREE_OPERAND (cond, op_num);
+ case COND_EXPR:
+ if (op_num == 0 || op_num == 1)
+ {
+ tree cond = gimple_assign_rhs1 (stmt);
+ op = TREE_OPERAND (cond, op_num);
+ }
+ else
+ {
+ if (op_num == 2)
+ op = gimple_assign_rhs2 (stmt);
+ else
+ op = gimple_assign_rhs3 (stmt);
+ }
+ break;
+
+ case CALL_EXPR:
+ op = gimple_call_arg (stmt, op_num);
+ break;
+
+ default:
+ op = gimple_op (stmt, op_num + 1);
}
- else
- {
- if (op_num == 2)
- op = gimple_assign_rhs2 (stmt);
- else
- op = gimple_assign_rhs3 (stmt);
- }
}
if (reduc_index != -1)
===================================================================
@@ -0,0 +1,19 @@
+! { dg-do compile }
+
+ SUBROUTINE MLIST(MOLsp,PBCx,PBCy,PBCz, X0)
+ IMPLICIT NONE
+ INTEGER, PARAMETER :: NM=16384
+ INTEGER :: MOLsp, i
+ REAL :: PBCx, PBCy, PBCz, boxjmp, HALf=1./2.
+ REAL :: X0(2,-2:NM)
+
+ DO i = 1 , MOLsp
+ boxjmp = PBCx*INT(X0(1,i)+SIGN(HALf,X0(1,i)))
+ X0(1,i) = X0(1,i) - boxjmp
+ boxjmp = PBCy*INT(X0(2,i)+SIGN(HALf,X0(2,i)))
+ X0(2,i) = X0(2,i) - boxjmp
+ ENDDO
+ END
+
+! { dg-final { cleanup-tree-dump "vect" } }
+