Commit 19c44640 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/49640 (Internal compiler in C99 code (using variable-length arrays) and OpenMP)

	PR middle-end/49640
	* gimplify.c (gimplify_compound_lval): For last 2 ARRAY_*REF
	operands and last COMPONENT_REF operand call gimplify_expr on it
	if non-NULL.

	* gcc.dg/gomp/pr49640.c: New test.

From-SVN: r175967
parent 4054bc52
2011-07-07 Jakub Jelinek <jakub@redhat.com>
PR middle-end/49640
* gimplify.c (gimplify_compound_lval): For last 2 ARRAY_*REF
operands and last COMPONENT_REF operand call gimplify_expr on it
if non-NULL.
2011-07-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR libmudflap/49550
......
......@@ -2010,8 +2010,14 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
ret = MIN (ret, tret);
}
}
else
{
tret = gimplify_expr (&TREE_OPERAND (t, 2), pre_p, post_p,
is_gimple_reg, fb_rvalue);
ret = MIN (ret, tret);
}
if (!TREE_OPERAND (t, 3))
if (TREE_OPERAND (t, 3) == NULL_TREE)
{
tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (t, 0)));
tree elmt_size = unshare_expr (array_ref_element_size (t));
......@@ -2031,11 +2037,17 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
ret = MIN (ret, tret);
}
}
else
{
tret = gimplify_expr (&TREE_OPERAND (t, 3), pre_p, post_p,
is_gimple_reg, fb_rvalue);
ret = MIN (ret, tret);
}
}
else if (TREE_CODE (t) == COMPONENT_REF)
{
/* Set the field offset into T and gimplify it. */
if (!TREE_OPERAND (t, 2))
if (TREE_OPERAND (t, 2) == NULL_TREE)
{
tree offset = unshare_expr (component_ref_field_offset (t));
tree field = TREE_OPERAND (t, 1);
......@@ -2054,6 +2066,12 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
ret = MIN (ret, tret);
}
}
else
{
tret = gimplify_expr (&TREE_OPERAND (t, 2), pre_p, post_p,
is_gimple_reg, fb_rvalue);
ret = MIN (ret, tret);
}
}
}
......
2011-07-07 Jakub Jelinek <jakub@redhat.com>
PR middle-end/49640
* gcc.dg/gomp/pr49640.c: New test.
2011-07-07 Richard Guenther <rguenther@suse.de>
* gcc.dg/graphite/pr37485.c: Add -floop-block.
......
/* PR middle-end/49640 */
/* { dg-do compile } */
/* { dg-options "-O2 -std=gnu99 -fopenmp" } */
void
foo (int N, int M, int K, int P, int Q, int R, int i, int j, int k,
unsigned char x[P][Q][R], int y[N][M][K])
{
int ii, jj, kk;
#pragma omp parallel for private(ii,jj,kk)
for (ii = 0; ii < P; ++ii)
for (jj = 0; jj < Q; ++jj)
for (kk = 0; kk < R; ++kk)
y[i + ii][j + jj][k + kk] = x[ii][jj][kk];
}
void
bar (int N, int M, int K, int P, int Q, int R, int i, int j, int k,
unsigned char x[P][Q][R], float y[N][M][K], float factor, float zero)
{
int ii, jj, kk;
#pragma omp parallel for private(ii,jj,kk)
for (ii = 0; ii < P; ++ii)
for (jj = 0; jj < Q; ++jj)
for (kk = 0; kk < R; ++kk)
y[i + ii][j + jj][k + kk] = factor * x[ii][jj][kk] + zero;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment