1b3189b13SValentin Clement (バレンタイン クレメン)! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s 27c20576cSIman Hosseini! RUN: bbc -emit-hlfir -fcuda %s -o - | fir-opt | FileCheck %s 3b3189b13SValentin Clement (バレンタイン クレメン) 4b3189b13SValentin Clement (バレンタイン クレメン)! Test lowering of CUDA kernel loop directive. 5b3189b13SValentin Clement (バレンタイン クレメン) 6b3189b13SValentin Clement (バレンタイン クレメン)subroutine sub1() 7b3189b13SValentin Clement (バレンタイン クレメン) integer :: i, j 8b3189b13SValentin Clement (バレンタイン クレメン) integer, parameter :: n = 100 9bd7b1621SValentin Clement (バレンタイン クレメン) integer(8) :: istream 1016975ad2SValentin Clement (バレンタイン クレメン) real, device :: a(n), b(n) 1116975ad2SValentin Clement (バレンタイン クレメン) real, device :: c(n,n), d(n,n) 12b3189b13SValentin Clement (バレンタイン クレメン) 13b3189b13SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: func.func @_QPsub1() 14b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: %[[IV:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFsub1Ei"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 15bd7b1621SValentin Clement (バレンタイン クレメン)! CHECK: %[[STREAM:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFsub1Eistream"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>) 16f7245408SValentin Clement (バレンタイン クレメン)! CHECK: %[[IV_J:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFsub1Ej"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 17b3189b13SValentin Clement (バレンタイン クレメン) !$cuf kernel do <<< 1, 2 >>> 18b3189b13SValentin Clement (バレンタイン クレメン) do i = 1, n 19b3189b13SValentin Clement (バレンタイン クレメン) a(i) = a(i) * b(i) 20b3189b13SValentin Clement (バレンタイン クレメン) end do 21b3189b13SValentin Clement (バレンタイン クレメン) 22b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: %[[LB:.*]] = fir.convert %c1{{.*}} : (i32) -> index 23b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: %[[UB:.*]] = fir.convert %c100{{.*}} : (i32) -> index 24b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: %[[STEP:.*]] = arith.constant 1 : index 2545daa4fdSValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel<<<%c1_i32, %c2_i32>>> (%[[ARG0:.*]] : index) = (%[[LB]] : index) to (%[[UB]] : index) step (%[[STEP]] : index) 26b3189b13SValentin Clement (バレンタイン クレメン)! CHECK-NOT: fir.do_loop 27b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: %[[ARG0_I32:.*]] = fir.convert %[[ARG0]] : (index) -> i32 28b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: fir.store %[[ARG0_I32]] to %[[IV]]#1 : !fir.ref<i32> 29f815d1f7SValentin Clement (バレンタイン クレメン)! CHECK: hlfir.assign 30b3189b13SValentin Clement (バレンタイン クレメン) 31b3189b13SValentin Clement (バレンタイン クレメン) 32b3189b13SValentin Clement (バレンタイン クレメン) !$cuf kernel do <<< *, * >>> 33b3189b13SValentin Clement (バレンタイン クレメン) do i = 1, n 34b3189b13SValentin Clement (バレンタイン クレメン) a(i) = a(i) * b(i) 35b3189b13SValentin Clement (バレンタイン クレメン) end do 36b3189b13SValentin Clement (バレンタイン クレメン) 3745daa4fdSValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel<<<*, *>>> (%{{.*}} : index) = (%{{.*}} : index) to (%{{.*}} : index) step (%{{.*}} : index) 38b3189b13SValentin Clement (バレンタイン クレメン) 39b3189b13SValentin Clement (バレンタイン クレメン) !$cuf kernel do(2) <<< 1, (256,1) >>> 40b3189b13SValentin Clement (バレンタイン クレメン) do i = 1, n 41b3189b13SValentin Clement (バレンタイン クレメン) do j = 1, n 42b3189b13SValentin Clement (バレンタイン クレメン) c(i,j) = c(i,j) * d(i,j) 43b3189b13SValentin Clement (バレンタイン クレメン) end do 44b3189b13SValentin Clement (バレンタイン クレメン) end do 45b3189b13SValentin Clement (バレンタイン クレメン) 4645daa4fdSValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel<<<%c1{{.*}}, (%c256{{.*}}, %c1{{.*}})>>> (%[[ARG0:.*]] : index, %[[ARG1:.*]] : index) = (%{{.*}}, %{{.*}} : index, index) to (%{{.*}}, %{{.*}} : index, index) step (%{{.*}}, %{{.*}} : index, index) 47f7245408SValentin Clement (バレンタイン クレメン)! CHECK: %[[ARG0_I32:.*]] = fir.convert %[[ARG0]] : (index) -> i32 48f7245408SValentin Clement (バレンタイン クレメン)! CHECK: fir.store %[[ARG0_I32]] to %[[IV]]#1 : !fir.ref<i32> 49f7245408SValentin Clement (バレンタイン クレメン)! CHECK: %[[ARG1_I32:.*]] = fir.convert %[[ARG1]] : (index) -> i32 50f7245408SValentin Clement (バレンタイン クレメン)! CHECK: fir.store %[[ARG1_I32]] to %[[IV_J]]#1 : !fir.ref<i32> 51b3189b13SValentin Clement (バレンタイン クレメン)! CHECK: {n = 2 : i64} 52b3189b13SValentin Clement (バレンタイン クレメン) 53f6a2a55bSValentin Clement (バレンタイン クレメン) !$cuf kernel do(2) <<< (1,*), (256,1) >>> 54f6a2a55bSValentin Clement (バレンタイン クレメン) do i = 1, n 55f6a2a55bSValentin Clement (バレンタイン クレメン) do j = 1, n 56f6a2a55bSValentin Clement (バレンタイン クレメン) c(i,j) = c(i,j) * d(i,j) 57f6a2a55bSValentin Clement (バレンタイン クレメン) end do 58f6a2a55bSValentin Clement (バレンタイン クレメン) end do 5945daa4fdSValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel<<<(%c1{{.*}}, %c0{{.*}}), (%c256{{.*}}, %c1{{.*}})>>> (%{{.*}} : index, %{{.*}} : index) = (%{{.*}}, %{{.*}} : index, index) to (%{{.*}}, %{{.*}} : index, index) step (%{{.*}}, %{{.*}} : index, index) 60f6a2a55bSValentin Clement (バレンタイン クレメン) 61f6a2a55bSValentin Clement (バレンタイン クレメン)!$cuf kernel do(2) <<< (*,*), (32,4) >>> 62f6a2a55bSValentin Clement (バレンタイン クレメン) do i = 1, n 63f6a2a55bSValentin Clement (バレンタイン クレメン) do j = 1, n 64f6a2a55bSValentin Clement (バレンタイン クレメン) c(i,j) = c(i,j) * d(i,j) 65f6a2a55bSValentin Clement (バレンタイン クレメン) end do 66f6a2a55bSValentin Clement (バレンタイン クレメン) end do 67f6a2a55bSValentin Clement (バレンタイン クレメン) 6845daa4fdSValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel<<<*, (%c32{{.*}}, %c4{{.*}})>>> (%{{.*}} : index, %{{.*}} : index) = (%{{.*}}, %{{.*}} : index, index) to (%{{.*}}, %{{.*}} : index, index) step (%{{.*}}, %{{.*}} : index, index) 69bd7b1621SValentin Clement (バレンタイン クレメン) 70bd7b1621SValentin Clement (バレンタイン クレメン) !$cuf kernel do(2) <<< (*,*), (*,*), stream=istream >>> 71bd7b1621SValentin Clement (バレンタイン クレメン) do i = 1, n 72bd7b1621SValentin Clement (バレンタイン クレメン) do j = 1, n 73bd7b1621SValentin Clement (バレンタイン クレメン) c(i,j) = c(i,j) * d(i,j) 74bd7b1621SValentin Clement (バレンタイン クレメン) end do 75bd7b1621SValentin Clement (バレンタイン クレメン) end do 76b3189b13SValentin Clement (バレンタイン クレメン)end 77bd7b1621SValentin Clement (バレンタイン クレメン) 78bd7b1621SValentin Clement (バレンタイン クレメン)! CHECK: %[[STREAM_LOAD:.*]] = fir.load %[[STREAM]]#0 : !fir.ref<i64> 79bd7b1621SValentin Clement (バレンタイン クレメン)! CHECK: %[[STREAM_I32:.*]] = fir.convert %[[STREAM_LOAD]] : (i64) -> i32 80bd7b1621SValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel<<<*, *, stream = %[[STREAM_I32]]>>> 81c81b4307SValentin Clement (バレンタイン クレメン) 82c81b4307SValentin Clement (バレンタイン クレメン) 83c81b4307SValentin Clement (バレンタイン クレメン)! Test lowering with unstructured construct inside. 84c81b4307SValentin Clement (バレンタイン クレメン)subroutine sub2(m,a,b) 85c81b4307SValentin Clement (バレンタイン クレメン) integer :: m 86c81b4307SValentin Clement (バレンタイン クレメン) real, device :: a(m,m), b(m) 87c81b4307SValentin Clement (バレンタイン クレメン) integer :: i,j 88c81b4307SValentin Clement (バレンタイン クレメン) !$cuf kernel do<<<*,*>>> 89c81b4307SValentin Clement (バレンタイン クレメン) 90c81b4307SValentin Clement (バレンタイン クレメン) do j = 1, m 91c81b4307SValentin Clement (バレンタイン クレメン) i = 1 92c81b4307SValentin Clement (バレンタイン クレメン) do while (a(i,j).eq.0) 93c81b4307SValentin Clement (バレンタイン クレメン) i = i + 1 94c81b4307SValentin Clement (バレンタイン クレメン) end do 95c81b4307SValentin Clement (バレンタイン クレメン) b(j) = i 96c81b4307SValentin Clement (バレンタイン クレメン) end do 97c81b4307SValentin Clement (バレンタイン クレメン)end subroutine 98c81b4307SValentin Clement (バレンタイン クレメン) 99c81b4307SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: func.func @_QPsub2 100c81b4307SValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel 101*0469bb91SValentin Clement (バレンタイン クレメン) 102*0469bb91SValentin Clement (バレンタイン クレメン)subroutine sub3() 103*0469bb91SValentin Clement (バレンタイン クレメン) integer, device :: a(10), b(10) 104*0469bb91SValentin Clement (バレンタイン クレメン) integer :: lb = 1 105*0469bb91SValentin Clement (バレンタイン クレメン) integer :: n = 10 106*0469bb91SValentin Clement (バレンタイン クレメン) integer :: s = 1 107*0469bb91SValentin Clement (バレンタイン クレメン) 108*0469bb91SValentin Clement (バレンタイン クレメン) !$cuf kernel do <<< *, * >>> 109*0469bb91SValentin Clement (バレンタイン クレメン) do i = lb, n, s 110*0469bb91SValentin Clement (バレンタイン クレメン) a(i) = a(i) * b(i) 111*0469bb91SValentin Clement (バレンタイン クレメン) end do 112*0469bb91SValentin Clement (バレンタイン クレメン)end 113*0469bb91SValentin Clement (バレンタイン クレメン) 114*0469bb91SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: func.func @_QPsub3 115*0469bb91SValentin Clement (バレンタイン クレメン)! CHECK: cuf.kernel 116