@@ -41,12 +41,12 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
41
41
for (unsigned I = 0 ; I < N; ++I);
42
42
// CHECK: acc.loop {
43
43
// 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
45
45
#pragma acc loop device_type(radeon) seq
46
46
for (unsigned I = 0 ; I < N; ++I);
47
47
// CHECK: acc.loop {
48
48
// 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
50
50
#pragma acc loop seq device_type(nvidia, radeon)
51
51
for (unsigned I = 0 ; I < N; ++I);
52
52
// CHECK: acc.loop {
@@ -67,12 +67,12 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
67
67
for (unsigned I = 0 ; I < N; ++I);
68
68
// CHECK: acc.loop {
69
69
// 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
71
71
#pragma acc loop device_type(radeon) independent
72
72
for (unsigned I = 0 ; I < N; ++I);
73
73
// CHECK: acc.loop {
74
74
// 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
76
76
#pragma acc loop independent device_type(nvidia, radeon)
77
77
for (unsigned I = 0 ; I < N; ++I);
78
78
// CHECK: acc.loop {
@@ -93,12 +93,12 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
93
93
for (unsigned I = 0 ; I < N; ++I);
94
94
// CHECK: acc.loop {
95
95
// 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
97
97
#pragma acc loop device_type(radeon) auto
98
98
for (unsigned I = 0 ; I < N; ++I);
99
99
// CHECK: acc.loop {
100
100
// 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
102
102
#pragma acc loop auto device_type(nvidia, radeon)
103
103
for (unsigned I = 0 ; I < N; ++I);
104
104
// CHECK: acc.loop {
@@ -116,30 +116,30 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
116
116
for (unsigned K = 0 ; K < N; ++K);
117
117
// CHECK: acc.loop {
118
118
// 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>] }
120
120
121
121
#pragma acc loop collapse(1) device_type(radeon) collapse (2)
122
122
for (unsigned I = 0 ; I < N; ++I)
123
123
for (unsigned J = 0 ; J < N; ++J)
124
124
for (unsigned K = 0 ; K < N; ++K);
125
125
// CHECK: acc.loop {
126
126
// 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>] }
128
128
129
129
#pragma acc loop collapse(1) device_type(radeon, nvidia) collapse (2)
130
130
for (unsigned I = 0 ; I < N; ++I)
131
131
for (unsigned J = 0 ; J < N; ++J)
132
132
for (unsigned K = 0 ; K < N; ++K);
133
133
// CHECK: acc.loop {
134
134
// 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>] }
136
136
#pragma acc loop collapse(1) device_type(radeon, nvidia) collapse(2) device_type(host) collapse(3)
137
137
for (unsigned I = 0 ; I < N; ++I)
138
138
for (unsigned J = 0 ; J < N; ++J)
139
139
for (unsigned K = 0 ; K < N; ++K);
140
140
// CHECK: acc.loop {
141
141
// 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>] }
143
143
144
144
#pragma acc loop tile(1, 2, 3)
145
145
for (unsigned I = 0 ; I < N; ++I)
@@ -392,4 +392,85 @@ extern "C" void acc_loop(int *A, int *B, int *C, int N) {
392
392
// CHECK: acc.yield
393
393
// CHECK-NEXT: } loc
394
394
}
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
395
476
}
0 commit comments