Hi,
this patch ensures that the &b[0][0][0] initializer of the acc loop in
the testcase is properly compiled.
Committed to gomp-4_0-branch.
Thanks,
- Tom
Handle ptr iterator in acc loop
2015-12-09 Tom de Vries <t...@codesourcery.com>
* omp-low.c (expand_omp_for_generic): Gimplify seq_loop loop start and
limit.
* c-c++-common/goacc/kernels-loop-acc-loop-ptr-it.c: New test.
---
gcc/omp-low.c | 5 +++++
.../c-c++-common/goacc/kernels-loop-acc-loop-ptr-it.c | 14 ++++++++++++++
2 files changed, 19 insertions(+)
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 9ef7161..b8399ae 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -8522,6 +8522,11 @@ expand_omp_for_generic (struct omp_region *region,
tree n1 = fold_convert (fd->iter_type, fd->loop.n1);
tree n2 = fold_convert (fd->iter_type, fd->loop.n2);
+ n1 = force_gimple_operand_gsi_1 (&gsi, n1, is_gimple_reg, NULL_TREE, true,
+ GSI_SAME_STMT);
+ n2 = force_gimple_operand_gsi_1 (&gsi, n2, is_gimple_reg, NULL_TREE, true,
+ GSI_SAME_STMT);
+
assign_stmt = gimple_build_assign (istart0, n1);
gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT);
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop-ptr-it.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop-ptr-it.c
new file mode 100644
index 0000000..d806a01
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop-ptr-it.c
@@ -0,0 +1,14 @@
+float b[10][15][10];
+
+void
+foo (void)
+{
+ float *i;
+
+#pragma acc kernels
+ {
+#pragma acc loop
+ for (i = &b[0][0][0]; i < &b[0][0][10]; i++)
+ ;
+ }
+}