aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authornvptm <pmathew@nvidia.com>2025-07-17 09:04:44 -0700
committerGitHub <noreply@github.com>2025-07-17 09:04:44 -0700
commita7f595efd840f7ed2210f2703048fad4d0027fac (patch)
tree6d0704866004f92c54c6df86794b8cf746e07c83 /clang/lib/Frontend/CompilerInvocation.cpp
parent84d65e9d19ab577027238d38d053e293ba656e32 (diff)
downloadllvm-a7f595efd840f7ed2210f2703048fad4d0027fac.zip
llvm-a7f595efd840f7ed2210f2703048fad4d0027fac.tar.gz
llvm-a7f595efd840f7ed2210f2703048fad4d0027fac.tar.bz2
[flang][acc] Create UseDeviceOp for both results of hlfir.declare (#148017)
A sample such as ``` program test integer :: N = 100 real*8 :: b(-1:N) !$acc data copy(b) !$acc host_data use_device(b) call vadd(b) !$acc end host_data !$acc end data end ``` is lowered to ``` %13:2 = hlfir.declare %11(%12) {uniq_name = "_QFEb"} : (!fir.ref<!fir.array<?xf64>>, !fir.shapeshift<1>) -> (!fir.box<!fir.array<?xf64>>, !fir.ref<!fir.array<?xf64>>) %14 = acc.copyin var(%13#0 : !fir.box<!fir.array<?xf64>>) -> !fir.box<!fir.array<?xf64>> {dataClause = #acc<data_clause acc_copy>, name = "b"} acc.data dataOperands(%14 : !fir.box<!fir.array<?xf64>>) { %15 = acc.use_device var(%13#0 : !fir.box<!fir.array<?xf64>>) -> !fir.box<!fir.array<?xf64>> {name = "b"} acc.host_data dataOperands(%15 : !fir.box<!fir.array<?xf64>>) { fir.call @_QPvadd(%13#1) fastmath<contract> : (!fir.ref<!fir.array<?xf64>>) -> () acc.terminator } acc.terminator } acc.copyout accVar(%14 : !fir.box<!fir.array<?xf64>>) to var(%13#0 : !fir.box<!fir.array<?xf64>>) {dataClause = #acc<data_clause acc_copy>, name = "b"} ``` Note that while the use_device clause is applied to %13#0, the argument passed to vadd is %13#1. To avoid problems later in lowering, this change additionally applies the use_device clause to %13#1, so that the resulting MLIR is ``` %13:2 = hlfir.declare %11(%12) {uniq_name = "_QFEb"} : (!fir.ref<!fir.array<?xf64>>, !fir.shapeshift<1>) -> (!fir.box<!fir.array<?xf64>>, !fir.ref<!fir.array<?xf64>>) %14 = acc.copyin var(%13#0 : !fir.box<!fir.array<?xf64>>) -> !fir.box<!fir.array<?xf64>> {dataClause = #acc<data_clause acc_copy>, name = "b"} acc.data dataOperands(%14 : !fir.box<!fir.array<?xf64>>) { %15 = acc.use_device var(%13#0 : !fir.box<!fir.array<?xf64>>) -> !fir.box<!fir.array<?xf64>> {name = "b"} %16 = acc.use_device varPtr(%13#1 : !fir.ref<!fir.array<?xf64>>) -> !fir.ref<!fir.array<?xf64>> {name = "b"} acc.host_data dataOperands(%15, %16 : !fir.box<!fir.array<?xf64>>, !fir.ref<!fir.array<?xf64>>) { fir.call @_QPvadd(%13#1) fastmath<contract> : (!fir.ref<!fir.array<?xf64>>) -> () acc.terminator } acc.terminator } acc.copyout accVar(%14 : !fir.box<!fir.array<?xf64>>) to var(%13#0 : !fir.box<!fir.array<?xf64>>) {dataClause = #acc<data_clause acc_copy>, name = "b"} ```
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions