On 07/13/2015 06:56 AM, Jakub Jelinek wrote:
On Sat, Jul 11, 2015 at 11:35:36AM -0700, Aldy Hernandez wrote:

On the C++ FE side, please also try a testcase in g++.dg/gomp/ where
the ordered(n) loop with #pragma omp ordered depend({source,sink}) will be
in a template, to make sure pt.c does the right thing with it.

I assume you mean something like:

void bar (int, int, int);

template<typename T>
T baz (T arg)
{
  int i, j, k;
#pragma omp parallel for ordered(2)
  for (i=0; i < 100; ++i)
    for (j=0; j < 100; ++j)
      {
#pragma omp ordered depend(sink:i-3,j)
        bar (i, j, 0);
      }
  return arg;
}

int main()
{
  return baz<int>(5);
}

??

Also, was this supposed to work?:

template<int N>
int foo()
{
  int i, j, k;
#pragma omp parallel for ordered(N)
  for (i=0; i < 100; ++i)
    for (j=0; j < 100; ++j)
      {
        extern void bark();
        bark();
      }
}

The above was broken before I arrived.

And if this last example is supposed to work, I should probably address the same thing for sink offsets.

If you want to spend time on something still in the FE, it would be nice to
resolve the C++ iteration var issue (i.e. increase OMP_FOR number of
arguments, so that it could have yet another (optional) vector, say
OMP_FOR_ORIG_DECLS.  If that vector would be NULL, the gimplifier would
assume that all the decls in OMP_FOR_INIT are the ones present in the
source, if it would be present, you'd use them for the variable checking
instead of the ones from OMP_FOR_INIT (but, replace them with the
decls from OMP_FOR_INIT after the checking).

There is another issue - if some iterator var has pointer type, supposedly
we want somewhere in the FEs already multiply it by the size of what they
point to (and convert to sizetype).  For C FE, it can be done already during
parsing, we should know the type of the iterator var already at that point,
for C++ FE it needs to be done only in finish_omp_clauses if
!processing_template_decl, because in templates we might not know the type.

Sure.  As follow-ups?

Aldy

Reply via email to