brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 85a7148 Raw
172 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -verify2 3template<typename T, unsigned I>4void TemplUses(T t) {5 6#pragma acc parallel loop vector7  for(int j = 0; j < 5; ++j);8 9#pragma acc parallel loop vector(I)10  for(int j = 0; j < 5; ++j);11 12#pragma acc parallel loop vector(length:I)13  for(int j = 0; j < 5; ++j);14 15#pragma acc serial loop vector16  for(int j = 0; j < 5; ++j);17 18  // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}19#pragma acc serial loop vector(I)20  for(int j = 0; j < 5; ++j);21 22  // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}23#pragma acc serial loop vector(length:I)24  for(int j = 0; j < 5; ++j);25 26#pragma acc kernels loop vector27  for(int j = 0; j < 5; ++j);28 29#pragma acc kernels loop vector(I)30  for(int j = 0; j < 5; ++j);31 32#pragma acc kernels loop vector(length:I)33  for(int j = 0; j < 5; ++j);34 35#pragma acc kernels loop vector vector_length(t)36  for(int j = 0; j < 5; ++j);37 38#pragma acc kernels loop vector_length(t) vector39  for(int j = 0; j < 5; ++j);40 41  // expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}42  // expected-note@+1{{previous 'vector' clause is here}}43#pragma acc kernels loop vector(I) vector_length(t)44  for(int j = 0; j < 5; ++j);45 46  // expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}47  // expected-note@+1{{previous 'vector_length' clause is here}}48#pragma acc kernels loop vector_length(t) vector(I)49  for(int j = 0; j < 5; ++j);50 51#pragma acc parallel loop vector52  for(int j = 0; j < 5; ++j) {53    // expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}54    // expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}55    // expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}56    // expected-note@-5 3{{previous 'vector' clause is here}}57#pragma acc loop vector worker, gang58    for(int j = 0; j < 5; ++j);59  }60#pragma acc parallel loop vector61  for(int j = 0; j < 5; ++j) {62#pragma acc serial loop vector worker, gang63    for(int j = 0; j < 5; ++j);64  }65 66#pragma acc loop vector67  for(int j = 0; j < 5; ++j) {68#pragma acc serial loop vector worker, gang69    for(int j = 0; j < 5; ++j);70  }71 72#pragma acc kernels vector_length(t)73  for(int j = 0; j < 5; ++j) {74    // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}75#pragma acc serial loop vector(I)76    for(int j = 0; j < 5; ++j);77  }78 79#pragma acc kernels vector_length(t)80  for(int j = 0; j < 5; ++j) {81#pragma acc parallel loop vector(I)82    for(int j = 0; j < 5; ++j);83  }84}85 86void uses() {87  TemplUses<int, 5>(5);88 89  unsigned I;90  int t;91 92#pragma acc parallel loop vector93  for(int j = 0; j < 5; ++j);94 95#pragma acc parallel loop vector(I)96  for(int j = 0; j < 5; ++j);97 98#pragma acc parallel loop vector(length:I)99  for(int j = 0; j < 5; ++j);100 101#pragma acc serial loop vector102  for(int j = 0; j < 5; ++j);103 104    // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}105#pragma acc serial loop vector(I)106  for(int j = 0; j < 5; ++j);107 108    // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}109#pragma acc serial loop vector(length:I)110  for(int j = 0; j < 5; ++j);111 112#pragma acc kernels loop vector113  for(int j = 0; j < 5; ++j);114 115#pragma acc kernels loop vector(I)116  for(int j = 0; j < 5; ++j);117 118#pragma acc kernels loop vector(length:I)119  for(int j = 0; j < 5; ++j);120 121#pragma acc kernels loop vector vector_length(t)122  for(int j = 0; j < 5; ++j);123 124#pragma acc kernels loop vector_length(t) vector125  for(int j = 0; j < 5; ++j);126 127  // expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}128  // expected-note@+1{{previous 'vector' clause is here}}129#pragma acc kernels loop vector(I) vector_length(t)130  for(int j = 0; j < 5; ++j);131 132    // expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}133    // expected-note@+1{{previous 'vector_length' clause is here}}134#pragma acc kernels loop vector_length(t) vector(I)135  for(int j = 0; j < 5; ++j);136 137#pragma acc parallel loop vector138  for(int j = 0; j < 5; ++j) {139    // expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}140    // expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}141    // expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}142    // expected-note@-5 3{{previous 'vector' clause is here}}143#pragma acc loop vector worker, gang144    for(int j = 0; j < 5; ++j);145  }146#pragma acc parallel loop vector147  for(int j = 0; j < 5; ++j) {148#pragma acc serial loop vector worker, gang149    for(int j = 0; j < 5; ++j);150  }151 152#pragma acc loop vector153  for(int j = 0; j < 5; ++j) {154#pragma acc serial loop vector worker, gang155    for(int j = 0; j < 5; ++j);156  }157 158#pragma acc kernels vector_length(t)159  for(int j = 0; j < 5; ++j) {160#pragma acc parallel loop vector(I)161    for(int j = 0; j < 5; ++j);162  }163 164#pragma acc kernels vector_length(t)165  for(int j = 0; j < 5; ++j) {166    // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}167#pragma acc serial loop vector(I)168    for(int j = 0; j < 5; ++j);169  }170}171 172