1d7ab38f8SValentin Clement! This test checks lowering of OpenACC loop directive. 2d7ab38f8SValentin Clement 358d50b0cSSlava Zakharin! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s 4d7ab38f8SValentin Clement 56e3dcd35SValentin Clement! CHECK-LABEL: acc.private.recipe @privatization_ref_10x10xf32 : !fir.ref<!fir.array<10x10xf32>> init { 6d2fddaefSValentin Clement! CHECK: ^bb0(%{{.*}}: !fir.ref<!fir.array<10x10xf32>>): 7d2fddaefSValentin Clement! CHECK: acc.yield %{{.*}} : !fir.ref<!fir.array<10x10xf32>> 8d2fddaefSValentin Clement! CHECK: } 9d2fddaefSValentin Clement 10d7ab38f8SValentin Clementprogram acc_loop 11d7ab38f8SValentin Clement 12d7ab38f8SValentin Clement integer :: i, j 13d7ab38f8SValentin Clement integer, parameter :: n = 10 14d7ab38f8SValentin Clement real, dimension(n) :: a, b 15d7ab38f8SValentin Clement real, dimension(n, n) :: c, d 16d7ab38f8SValentin Clement integer :: gangNum = 8 1766546d94SValentin Clement integer :: gangDim = 1 18d7ab38f8SValentin Clement integer :: gangStatic = 8 19d7ab38f8SValentin Clement integer :: vectorLength = 128 20d7ab38f8SValentin Clement integer, parameter :: tileSize = 2 215e3faa05SRazvan Lupusoru integer :: reduction_i 225e3faa05SRazvan Lupusoru real :: reduction_r 23d7ab38f8SValentin Clement 24d7ab38f8SValentin Clement 25d7ab38f8SValentin Clement !$acc loop 26d7ab38f8SValentin Clement DO i = 1, n 27d7ab38f8SValentin Clement a(i) = b(i) 28d7ab38f8SValentin Clement END DO 29d7ab38f8SValentin Clement 306b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 31d7ab38f8SValentin Clement! CHECK: acc.yield 325062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} 33d7ab38f8SValentin Clement 34d7ab38f8SValentin Clement !$acc loop seq 35d7ab38f8SValentin Clement DO i = 1, n 36d7ab38f8SValentin Clement a(i) = b(i) 37d7ab38f8SValentin Clement END DO 38d7ab38f8SValentin Clement 396b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 40d7ab38f8SValentin Clement! CHECK: acc.yield 415062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, seq = [#acc.device_type<none>]} 42d7ab38f8SValentin Clement 43d7ab38f8SValentin Clement !$acc loop auto 44d7ab38f8SValentin Clement DO i = 1, n 45d7ab38f8SValentin Clement a(i) = b(i) 46d7ab38f8SValentin Clement END DO 47d7ab38f8SValentin Clement 486b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 49d7ab38f8SValentin Clement! CHECK: acc.yield 505062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true>} 51d7ab38f8SValentin Clement 52d7ab38f8SValentin Clement !$acc loop independent 53d7ab38f8SValentin Clement DO i = 1, n 54d7ab38f8SValentin Clement a(i) = b(i) 55d7ab38f8SValentin Clement END DO 56d7ab38f8SValentin Clement 576b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 58d7ab38f8SValentin Clement! CHECK: acc.yield 595062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, independent = [#acc.device_type<none>]} 60d7ab38f8SValentin Clement 61d7ab38f8SValentin Clement !$acc loop gang 62d7ab38f8SValentin Clement DO i = 1, n 63d7ab38f8SValentin Clement a(i) = b(i) 64d7ab38f8SValentin Clement END DO 65d7ab38f8SValentin Clement 666b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 67d7ab38f8SValentin Clement! CHECK: acc.yield 685062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 69d7ab38f8SValentin Clement 70d7ab38f8SValentin Clement !$acc loop gang(num: 8) 71d7ab38f8SValentin Clement DO i = 1, n 72d7ab38f8SValentin Clement a(i) = b(i) 73d7ab38f8SValentin Clement END DO 74d7ab38f8SValentin Clement 75d7ab38f8SValentin Clement! CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32 766b42625bSValentin Clement (バレンタイン クレメン)! CHECK-NEXT: acc.loop gang({num=[[GANGNUM1]] : i32}) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 77d7ab38f8SValentin Clement! CHECK: acc.yield 785062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 79d7ab38f8SValentin Clement 80d7ab38f8SValentin Clement !$acc loop gang(num: gangNum) 81d7ab38f8SValentin Clement DO i = 1, n 82d7ab38f8SValentin Clement a(i) = b(i) 83d7ab38f8SValentin Clement END DO 84d7ab38f8SValentin Clement 85d7ab38f8SValentin Clement! CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> 866b42625bSValentin Clement (バレンタイン クレメン)! CHECK-NEXT: acc.loop gang({num=[[GANGNUM2]] : i32}) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 87d7ab38f8SValentin Clement! CHECK: acc.yield 885062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 89d7ab38f8SValentin Clement 90d7ab38f8SValentin Clement !$acc loop gang(num: gangNum, static: gangStatic) 91d7ab38f8SValentin Clement DO i = 1, n 92d7ab38f8SValentin Clement a(i) = b(i) 93d7ab38f8SValentin Clement END DO 94d7ab38f8SValentin Clement 956b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 96d7ab38f8SValentin Clement! CHECK: acc.yield 975062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 98d7ab38f8SValentin Clement 99d7ab38f8SValentin Clement !$acc loop vector 100d7ab38f8SValentin Clement DO i = 1, n 101d7ab38f8SValentin Clement a(i) = b(i) 102d7ab38f8SValentin Clement END DO 103d7ab38f8SValentin Clement 1046b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop vector private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 105d7ab38f8SValentin Clement! CHECK: acc.yield 1065062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 107d7ab38f8SValentin Clement 108d7ab38f8SValentin Clement !$acc loop vector(128) 109d7ab38f8SValentin Clement DO i = 1, n 110d7ab38f8SValentin Clement a(i) = b(i) 111d7ab38f8SValentin Clement END DO 112d7ab38f8SValentin Clement 113d7ab38f8SValentin Clement! CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32 1146b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop vector([[CONSTANT128]] : i32) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 115d7ab38f8SValentin Clement! CHECK: acc.yield 116d7ab38f8SValentin Clement! CHECK-NEXT: }{{$}} 117d7ab38f8SValentin Clement 118d7ab38f8SValentin Clement !$acc loop vector(vectorLength) 119d7ab38f8SValentin Clement DO i = 1, n 120d7ab38f8SValentin Clement a(i) = b(i) 121d7ab38f8SValentin Clement END DO 122d7ab38f8SValentin Clement 123d7ab38f8SValentin Clement! CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32> 1246b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop vector([[VECTORLENGTH]] : i32) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 125d7ab38f8SValentin Clement! CHECK: acc.yield 1265062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 127d7ab38f8SValentin Clement 128d7ab38f8SValentin Clement!$acc loop worker 129d7ab38f8SValentin Clement DO i = 1, n 130d7ab38f8SValentin Clement a(i) = b(i) 131d7ab38f8SValentin Clement END DO 132d7ab38f8SValentin Clement 1336b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop worker private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 134d7ab38f8SValentin Clement! CHECK: acc.yield 1355062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 136d7ab38f8SValentin Clement 137d7ab38f8SValentin Clement !$acc loop worker(128) 138d7ab38f8SValentin Clement DO i = 1, n 139d7ab38f8SValentin Clement a(i) = b(i) 140d7ab38f8SValentin Clement END DO 141d7ab38f8SValentin Clement 142d7ab38f8SValentin Clement! CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32 1436b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop worker([[WORKER128]] : i32) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 144d7ab38f8SValentin Clement! CHECK: acc.yield 1455062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 146d7ab38f8SValentin Clement 147d7ab38f8SValentin Clement !$acc loop private(c) 148d7ab38f8SValentin Clement DO i = 1, n 149d7ab38f8SValentin Clement a(i) = b(i) 150d7ab38f8SValentin Clement END DO 151d7ab38f8SValentin Clement 1526b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 153d7ab38f8SValentin Clement! CHECK: acc.yield 1545062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 155d7ab38f8SValentin Clement 156d7ab38f8SValentin Clement !$acc loop private(c, d) 157d7ab38f8SValentin Clement DO i = 1, n 158d7ab38f8SValentin Clement a(i) = b(i) 159d7ab38f8SValentin Clement END DO 160d7ab38f8SValentin Clement 1616b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 162d7ab38f8SValentin Clement! CHECK: acc.yield 1635062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 164d7ab38f8SValentin Clement 165d7ab38f8SValentin Clement !$acc loop private(c) private(d) 166d7ab38f8SValentin Clement DO i = 1, n 167d7ab38f8SValentin Clement a(i) = b(i) 168d7ab38f8SValentin Clement END DO 169d7ab38f8SValentin Clement 1706b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 171d7ab38f8SValentin Clement! CHECK: acc.yield 1725062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 173d7ab38f8SValentin Clement 174d7ab38f8SValentin Clement !$acc loop tile(2) 175d7ab38f8SValentin Clement DO i = 1, n 176d7ab38f8SValentin Clement a(i) = b(i) 177d7ab38f8SValentin Clement END DO 1785062a178SValentin Clement (バレンタイン クレメン) 179d7ab38f8SValentin Clement! CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32 1806b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} tile({[[TILESIZE]] : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 181d7ab38f8SValentin Clement! CHECK: acc.yield 1825062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 183d7ab38f8SValentin Clement 184d7ab38f8SValentin Clement !$acc loop tile(*) 185d7ab38f8SValentin Clement DO i = 1, n 186d7ab38f8SValentin Clement a(i) = b(i) 187d7ab38f8SValentin Clement END DO 188d7ab38f8SValentin Clement! CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32 1896b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} tile({[[TILESIZEM1]] : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 190d7ab38f8SValentin Clement! CHECK: acc.yield 1915062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 192d7ab38f8SValentin Clement 193d7ab38f8SValentin Clement !$acc loop tile(2, 2) 194d7ab38f8SValentin Clement DO i = 1, n 195d7ab38f8SValentin Clement DO j = 1, n 196d7ab38f8SValentin Clement c(i, j) = d(i, j) 197d7ab38f8SValentin Clement END DO 198d7ab38f8SValentin Clement END DO 199d7ab38f8SValentin Clement 200d7ab38f8SValentin Clement! CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32 201d7ab38f8SValentin Clement! CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32 2026b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} tile({[[TILESIZE1]] : i32, [[TILESIZE2]] : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 203d7ab38f8SValentin Clement! CHECK: acc.yield 2045062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 205d7ab38f8SValentin Clement 206d7ab38f8SValentin Clement !$acc loop tile(tileSize) 207d7ab38f8SValentin Clement DO i = 1, n 208d7ab38f8SValentin Clement a(i) = b(i) 209d7ab38f8SValentin Clement END DO 210d7ab38f8SValentin Clement 2116b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 212d7ab38f8SValentin Clement! CHECK: acc.yield 2135062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 214d7ab38f8SValentin Clement 215d7ab38f8SValentin Clement !$acc loop tile(tileSize, tileSize) 216d7ab38f8SValentin Clement DO i = 1, n 217d7ab38f8SValentin Clement DO j = 1, n 218d7ab38f8SValentin Clement c(i, j) = d(i, j) 219d7ab38f8SValentin Clement END DO 220d7ab38f8SValentin Clement END DO 221d7ab38f8SValentin Clement 2226b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32, %{{.*}} : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 223d7ab38f8SValentin Clement! CHECK: acc.yield 2245062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 225d7ab38f8SValentin Clement 226d7ab38f8SValentin Clement !$acc loop collapse(2) 227d7ab38f8SValentin Clement DO i = 1, n 228d7ab38f8SValentin Clement DO j = 1, n 229d7ab38f8SValentin Clement c(i, j) = d(i, j) 230d7ab38f8SValentin Clement END DO 231d7ab38f8SValentin Clement END DO 232d7ab38f8SValentin Clement 2336b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} control(%arg0 : i32, %arg1 : i32) = (%{{.*}} : i32, i32) to (%{{.*}} : i32, i32) step (%{{.*}} : i32, i32) { 2345062a178SValentin Clement (バレンタイン クレメン)! CHECK: fir.store %arg0 to %{{.*}} : !fir.ref<i32> 2355062a178SValentin Clement (バレンタイン クレメン)! CHECK: fir.store %arg1 to %{{.*}} : !fir.ref<i32> 236d7ab38f8SValentin Clement! CHECK: acc.yield 2375062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {collapse = [2], collapseDeviceType = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true, true>} 238d7ab38f8SValentin Clement 239d7ab38f8SValentin Clement !$acc loop 240d7ab38f8SValentin Clement DO i = 1, n 241d7ab38f8SValentin Clement !$acc loop 242d7ab38f8SValentin Clement DO j = 1, n 243d7ab38f8SValentin Clement c(i, j) = d(i, j) 244d7ab38f8SValentin Clement END DO 245d7ab38f8SValentin Clement END DO 246d7ab38f8SValentin Clement 2476b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 2486b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} control(%arg1 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 249d7ab38f8SValentin Clement! CHECK: acc.yield 2505062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 251d7ab38f8SValentin Clement! CHECK: acc.yield 2525062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 253d7ab38f8SValentin Clement 2545e3faa05SRazvan Lupusoru !$acc loop reduction(+:reduction_r) reduction(*:reduction_i) 2555e3faa05SRazvan Lupusoru do i = 1, n 2565e3faa05SRazvan Lupusoru reduction_r = reduction_r + a(i) 2575e3faa05SRazvan Lupusoru reduction_i = 1 2585e3faa05SRazvan Lupusoru end do 2595e3faa05SRazvan Lupusoru 2606b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) reduction(@reduction_add_ref_f32 -> %{{.*}} : !fir.ref<f32>, @reduction_mul_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 2615e3faa05SRazvan Lupusoru! CHECK: acc.yield 2625062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 2635e3faa05SRazvan Lupusoru 26466546d94SValentin Clement !$acc loop gang(dim: gangDim, static: gangStatic) 26566546d94SValentin Clement DO i = 1, n 26666546d94SValentin Clement a(i) = b(i) 26766546d94SValentin Clement END DO 26866546d94SValentin Clement 2696b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang({dim=%{{.*}}, static=%{{.*}} : i32}) {{.*}} control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 27066546d94SValentin Clement! CHECK: acc.yield 2715062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 27266546d94SValentin Clement 27366546d94SValentin Clement !$acc loop gang(dim: 1) 27466546d94SValentin Clement DO i = 1, n 27566546d94SValentin Clement a(i) = b(i) 27666546d94SValentin Clement END DO 27766546d94SValentin Clement 2786b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang({dim={{.*}} : i32}) {{.*}} control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) { 27966546d94SValentin Clement! CHECK: acc.yield 2805062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>} 28166546d94SValentin Clement 2828bc676c2SValentin Clement (バレンタイン クレメン) !$acc loop 2838bc676c2SValentin Clement (バレンタイン クレメン) DO i = 1, n 2848bc676c2SValentin Clement (バレンタイン クレメン) !$acc cache(b) 2858bc676c2SValentin Clement (バレンタイン クレメン) a(i) = b(i) 2868bc676c2SValentin Clement (バレンタイン クレメン) END DO 2878bc676c2SValentin Clement (バレンタイン クレメン) 2888bc676c2SValentin Clement (バレンタイン クレメン)! CHECK: %[[CACHE:.*]] = acc.cache varPtr(%{{.*}} : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} 2895062a178SValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} cache(%[[CACHE]] : !fir.ref<!fir.array<10xf32>>) 2908bc676c2SValentin Clement (バレンタイン クレメン) 291bc323460SValentin Clement (バレンタイン クレメン) !$acc loop 292bc323460SValentin Clement (バレンタイン クレメン) do 100 i=0, n 293bc323460SValentin Clement (バレンタイン クレメン) 100 continue 294bc323460SValentin Clement (バレンタイン クレメン)! CHECK: acc.loop 295bc323460SValentin Clement (バレンタイン クレメン) 29640f5f905SValentin Clement (バレンタイン クレメン) !$acc loop gang device_type(nvidia) gang(8) 29740f5f905SValentin Clement (バレンタイン クレメン) DO i = 1, n 29840f5f905SValentin Clement (バレンタイン クレメン) END DO 29940f5f905SValentin Clement (バレンタイン クレメン) 30040f5f905SValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang([#acc.device_type<none>], {num=%c8{{.*}} : i32} [#acc.device_type<nvidia>]) 30140f5f905SValentin Clement (バレンタイン クレメン) 302b8967e00SValentin Clement (バレンタイン クレメン) !$acc loop device_type(nvidia, default) gang 303b8967e00SValentin Clement (バレンタイン クレメン) DO i = 1, n 304b8967e00SValentin Clement (バレンタイン クレメン) END DO 305b8967e00SValentin Clement (バレンタイン クレメン) 30616d25832SValentin Clement! CHECK: acc.loop gang([#acc.device_type<nvidia>, #acc.device_type<default>]) 307b8967e00SValentin Clement (バレンタイン クレメン) 308d7ab38f8SValentin Clementend program 309e99c8aefSValentin Clement (バレンタイン クレメン) 310e99c8aefSValentin Clement (バレンタイン クレメン)subroutine sub1(i, j, k) 311e99c8aefSValentin Clement (バレンタイン クレメン) integer :: i,j,k 312e99c8aefSValentin Clement (バレンタイン クレメン) integer :: a(i,j,k) 313e99c8aefSValentin Clement (バレンタイン クレメン) !$acc parallel loop 314e99c8aefSValentin Clement (バレンタイン クレメン) do concurrent (i=1:10,j=1:100,k=1:200) 315e99c8aefSValentin Clement (バレンタイン クレメン) a(i,j,k) = a(i,j,k) + 1 316e99c8aefSValentin Clement (バレンタイン クレメン) end do 317e99c8aefSValentin Clement (バレンタイン クレメン)end subroutine 318e99c8aefSValentin Clement (バレンタイン クレメン) 319e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: func.func @_QPsub1 320*26d92826Skhaki3! CHECK: acc.parallel 321e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[DC_K:.*]] = fir.alloca i32 {bindc_name = "k"} 322e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[DC_J:.*]] = fir.alloca i32 {bindc_name = "j"} 323e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[DC_I:.*]] = fir.alloca i32 {bindc_name = "i"} 324e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[P_I:.*]] = acc.private varPtr(%[[DC_I]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} 325e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[P_J:.*]] = acc.private varPtr(%[[DC_J]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} 326e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[P_K:.*]] = acc.private varPtr(%[[DC_K]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} 32714e17ea1SRazvan Lupusoru! CHECK: acc.loop combined(parallel) private(@privatization_ref_i32 -> %[[P_I]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_J]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_K]] : !fir.ref<i32>) control(%{{.*}} : i32, %{{.*}} : i32, %{{.*}} : i32) = (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) to (%c10{{.*}}, %c100{{.*}}, %c200{{.*}} : i32, i32, i32) step (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) 328e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: } attributes {inclusiveUpperbound = array<i1: true, true, true>} 329