aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rosen <ira.rosen@linaro.org>2011-11-10 10:14:24 +0000
committerIra Rosen <irar@gcc.gnu.org>2011-11-10 10:14:24 +0000
commitbac430c92eefcb057ed7c4388311ec5fbbfbf54e (patch)
tree803ae53e22e3efebfd1f5ab74c65dd3234c49002
parent78048b1c66c31b87770b8a29fa44fc291213fd9b (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr51058.f9019
-rw-r--r--gcc/tree-vect-slp.c38
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);
}
}