diff options
author | Ira Rosen <ira.rosen@linaro.org> | 2011-11-10 10:14:24 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2011-11-10 10:14:24 +0000 |
commit | bac430c92eefcb057ed7c4388311ec5fbbfbf54e (patch) | |
tree | 803ae53e22e3efebfd1f5ab74c65dd3234c49002 | |
parent | 78048b1c66c31b87770b8a29fa44fc291213fd9b (diff) | |
download | gcc-bac430c92eefcb057ed7c4388311ec5fbbfbf54e.zip gcc-bac430c92eefcb057ed7c4388311ec5fbbfbf54e.tar.gz gcc-bac430c92eefcb057ed7c4388311ec5fbbfbf54e.tar.bz2 |
re PR tree-optimization/51058 (ICE: gimple check: expected gimple_assign(error_mark), have gimple_call() in gimple_assign_rhs_code, at gimple.h:1992)
PR tree-optimization/51058
* tree-vect-slp.c (vect_get_constant_vectors): Handle CALL_EXPR.
From-SVN: r181251
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/vect/pr51058.f90 | 19 | ||||
-rw-r--r-- | gcc/tree-vect-slp.c | 38 |
4 files changed, 53 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3a268f..380779b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-11-10 Ira Rosen <ira.rosen@linaro.org> + + PR tree-optimization/51058 + * tree-vect-slp.c (vect_get_constant_vectors): Handle CALL_EXPR. + 2011-11-10 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/51000 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 31f5306..2d7d99b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-10 Ira Rosen <ira.rosen@linaro.org> + + PR tree-optimization/51058 + * gfortran.dg/vect/pr51058.f90: New test. + 2011-11-10 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/51000 diff --git a/gcc/testsuite/gfortran.dg/vect/pr51058.f90 b/gcc/testsuite/gfortran.dg/vect/pr51058.f90 new file mode 100644 index 0000000..abee4c8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/vect/pr51058.f90 @@ -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" } } + diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index f54a8a7..7ceb6fe 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2191,7 +2191,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, 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,21 +2287,31 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, { 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) - { - tree cond = gimple_assign_rhs1 (stmt); - op = TREE_OPERAND (cond, op_num); - } - else + switch (code) { - if (op_num == 2) - op = gimple_assign_rhs2 (stmt); - else - op = gimple_assign_rhs3 (stmt); + 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); } } |