@@ -41,12 +41,12 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
4141 for (unsigned I = 0 ; I < N; ++I);
4242 // CHECK: acc.loop {
4343 // CHECK: acc.yield
44- // CHECK-NEXT: } attributes {seq = [#acc.device_type<nvidia>, #acc.device_type<radeon>]} loc
44+ // CHECK-NEXT: } attributes {independent = [#acc.device_type<none>], seq = [#acc.device_type<nvidia>, #acc.device_type<radeon>]} loc
4545#pragma acc loop device_type(radeon) seq
4646 for (unsigned I = 0 ; I < N; ++I);
4747 // CHECK: acc.loop {
4848 // CHECK: acc.yield
49- // CHECK-NEXT: } attributes {seq = [#acc.device_type<radeon>]} loc
49+ // CHECK-NEXT: } attributes {independent = [#acc.device_type<none>], seq = [#acc.device_type<radeon>]} loc
5050#pragma acc loop seq device_type(nvidia, radeon)
5151 for (unsigned I = 0 ; I < N; ++I);
5252 // CHECK: acc.loop {
@@ -67,12 +67,12 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
6767 for (unsigned I = 0 ; I < N; ++I);
6868 // CHECK: acc.loop {
6969 // CHECK: acc.yield
70- // CHECK-NEXT: } attributes {independent = [#acc.device_type<nvidia>, #acc.device_type<radeon>]} loc
70+ // CHECK-NEXT: } attributes {independent = [#acc.device_type<nvidia>, #acc.device_type<radeon>, #acc.device_type<none> ]} loc
7171#pragma acc loop device_type(radeon) independent
7272 for (unsigned I = 0 ; I < N; ++I);
7373 // CHECK: acc.loop {
7474 // CHECK: acc.yield
75- // CHECK-NEXT: } attributes {independent = [#acc.device_type<radeon>]} loc
75+ // CHECK-NEXT: } attributes {independent = [#acc.device_type<radeon>, #acc.device_type<none> ]} loc
7676#pragma acc loop independent device_type(nvidia, radeon)
7777 for (unsigned I = 0 ; I < N; ++I);
7878 // CHECK: acc.loop {
@@ -93,12 +93,12 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
9393 for (unsigned I = 0 ; I < N; ++I);
9494 // CHECK: acc.loop {
9595 // CHECK: acc.yield
96- // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<nvidia>, #acc.device_type<radeon>]} loc
96+ // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<nvidia>, #acc.device_type<radeon>], independent = [#acc.device_type<none>] } loc
9797#pragma acc loop device_type(radeon) auto
9898 for (unsigned I = 0 ; I < N; ++I);
9999 // CHECK: acc.loop {
100100 // CHECK: acc.yield
101- // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<radeon>]} loc
101+ // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<radeon>], independent = [#acc.device_type<none>] } loc
102102#pragma acc loop auto device_type(nvidia, radeon)
103103 for (unsigned I = 0 ; I < N; ++I);
104104 // CHECK: acc.loop {
@@ -116,30 +116,30 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
116116 for (unsigned K = 0 ; K < N; ++K);
117117 // CHECK: acc.loop {
118118 // CHECK: acc.yield
119- // CHECK-NEXT: } attributes {collapse = [1], collapseDeviceType = [#acc.device_type<none>]}
119+ // CHECK-NEXT: } attributes {collapse = [1], collapseDeviceType = [#acc.device_type<none>], independent = [#acc.device_type<none>] }
120120
121121 #pragma acc loop collapse(1) device_type(radeon) collapse (2)
122122 for (unsigned I = 0 ; I < N; ++I)
123123 for (unsigned J = 0 ; J < N; ++J)
124124 for (unsigned K = 0 ; K < N; ++K);
125125 // CHECK: acc.loop {
126126 // CHECK: acc.yield
127- // CHECK-NEXT: } attributes {collapse = [1, 2], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>]}
127+ // CHECK-NEXT: } attributes {collapse = [1, 2], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>], independent = [#acc.device_type<none>] }
128128
129129 #pragma acc loop collapse(1) device_type(radeon, nvidia) collapse (2)
130130 for (unsigned I = 0 ; I < N; ++I)
131131 for (unsigned J = 0 ; J < N; ++J)
132132 for (unsigned K = 0 ; K < N; ++K);
133133 // CHECK: acc.loop {
134134 // CHECK: acc.yield
135- // CHECK-NEXT: } attributes {collapse = [1, 2, 2], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>, #acc.device_type<nvidia>]}
135+ // CHECK-NEXT: } attributes {collapse = [1, 2, 2], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>, #acc.device_type<nvidia>], independent = [#acc.device_type<none>] }
136136 #pragma acc loop collapse(1) device_type(radeon, nvidia) collapse(2) device_type(host) collapse(3)
137137 for (unsigned I = 0 ; I < N; ++I)
138138 for (unsigned J = 0 ; J < N; ++J)
139139 for (unsigned K = 0 ; K < N; ++K);
140140 // CHECK: acc.loop {
141141 // CHECK: acc.yield
142- // CHECK-NEXT: } attributes {collapse = [1, 2, 2, 3], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>, #acc.device_type<nvidia>, #acc.device_type<host>]}
142+ // CHECK-NEXT: } attributes {collapse = [1, 2, 2, 3], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>, #acc.device_type<nvidia>, #acc.device_type<host>], independent = [#acc.device_type<none>] }
143143
144144 #pragma acc loop tile(1, 2, 3)
145145 for (unsigned I = 0 ; I < N; ++I)
@@ -392,4 +392,85 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
392392 // CHECK: acc.yield
393393 // CHECK-NEXT: } loc
394394 }
395+ // CHECK-NEXT: acc.terminator
396+ // CHECK-NEXT: } loc
397+
398+ // Checking the automatic-addition of parallelism clauses.
399+ #pragma acc loop
400+ for (unsigned I = 0 ; I < N; ++I);
401+ // CHECK-NEXT: acc.loop {
402+ // CHECK: acc.yield
403+ // CHECK-NEXT: } attributes {independent = [#acc.device_type<none>]} loc
404+
405+ #pragma acc parallel
406+ {
407+ // CHECK-NEXT: acc.parallel {
408+ #pragma acc loop
409+ for (unsigned I = 0 ; I < N; ++I);
410+ // CHECK-NEXT: acc.loop {
411+ // CHECK: acc.yield
412+ // CHECK-NEXT: } attributes {independent = [#acc.device_type<none>]} loc
413+ }
414+ // CHECK-NEXT: acc.yield
415+ // CHECK-NEXT: } loc
416+
417+ #pragma acc kernels
418+ {
419+ // CHECK-NEXT: acc.kernels {
420+ #pragma acc loop
421+ for (unsigned I = 0 ; I < N; ++I);
422+ // CHECK-NEXT: acc.loop {
423+ // CHECK: acc.yield
424+ // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>]} loc
425+ }
426+ // CHECK-NEXT: acc.terminator
427+ // CHECK-NEXT: } loc
428+
429+ #pragma acc serial
430+ {
431+ // CHECK-NEXT: acc.serial {
432+ #pragma acc loop
433+ for (unsigned I = 0 ; I < N; ++I);
434+ // CHECK-NEXT: acc.loop {
435+ // CHECK: acc.yield
436+ // CHECK-NEXT: } attributes {seq = [#acc.device_type<none>]} loc
437+ }
438+ // CHECK-NEXT: acc.yield
439+ // CHECK-NEXT: } loc
440+
441+ #pragma acc serial
442+ {
443+ // CHECK-NEXT: acc.serial {
444+ #pragma acc loop worker
445+ for (unsigned I = 0 ; I < N; ++I);
446+ // CHECK-NEXT: acc.loop worker {
447+ // CHECK: acc.yield
448+ // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>]} loc
449+ }
450+ // CHECK-NEXT: acc.yield
451+ // CHECK-NEXT: } loc
452+
453+ #pragma acc serial
454+ {
455+ // CHECK-NEXT: acc.serial {
456+ #pragma acc loop vector
457+ for (unsigned I = 0 ; I < N; ++I);
458+ // CHECK-NEXT: acc.loop vector {
459+ // CHECK: acc.yield
460+ // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>]} loc
461+ }
462+ // CHECK-NEXT: acc.yield
463+ // CHECK-NEXT: } loc
464+
465+ #pragma acc serial
466+ {
467+ // CHECK-NEXT: acc.serial {
468+ #pragma acc loop gang
469+ for (unsigned I = 0 ; I < N; ++I);
470+ // CHECK-NEXT: acc.loop gang {
471+ // CHECK: acc.yield
472+ // CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>]} loc
473+ }
474+ // CHECK-NEXT: acc.yield
475+ // CHECK-NEXT: } loc
395476}
0 commit comments