Skip to content

Commit 210cf01

Browse files
authored
[flang][cuda] Lower globaltimer to NVVM op (#149217)
1 parent 81eb7de commit 210cf01

File tree

4 files changed

+17
-0
lines changed

4 files changed

+17
-0
lines changed

flang/include/flang/Optimizer/Builder/IntrinsicCall.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ struct IntrinsicLibrary {
282282
llvm::ArrayRef<mlir::Value> args);
283283
mlir::Value genGetUID(mlir::Type resultType,
284284
llvm::ArrayRef<mlir::Value> args);
285+
mlir::Value genGlobalTimer(mlir::Type, llvm::ArrayRef<mlir::Value>);
285286
fir::ExtendedValue genHostnm(std::optional<mlir::Type> resultType,
286287
llvm::ArrayRef<fir::ExtendedValue> args);
287288
fir::ExtendedValue genIall(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);

flang/lib/Optimizer/Builder/IntrinsicCall.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ static constexpr IntrinsicHandler handlers[]{
503503
{"getgid", &I::genGetGID},
504504
{"getpid", &I::genGetPID},
505505
{"getuid", &I::genGetUID},
506+
{"globaltimer", &I::genGlobalTimer, {}, /*isElemental=*/false},
506507
{"hostnm",
507508
&I::genHostnm,
508509
{{{"c", asBox}, {"status", asAddr, handleDynamicOptional}}},
@@ -4319,6 +4320,13 @@ mlir::Value IntrinsicLibrary::genGetUID(mlir::Type resultType,
43194320
fir::runtime::genGetUID(builder, loc));
43204321
}
43214322

4323+
// GLOBALTIMER
4324+
mlir::Value IntrinsicLibrary::genGlobalTimer(mlir::Type resultType,
4325+
llvm::ArrayRef<mlir::Value> args) {
4326+
assert(args.size() == 0 && "globalTimer takes no args");
4327+
return builder.create<mlir::NVVM::GlobalTimerOp>(loc, resultType).getResult();
4328+
}
4329+
43224330
// GET_COMMAND_ARGUMENT
43234331
void IntrinsicLibrary::genGetCommandArgument(
43244332
llvm::ArrayRef<fir::ExtendedValue> args) {

flang/module/cudadevice.f90

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,11 @@ attributes(device,host) logical function on_device() bind(c)
16131613
end function
16141614
end interface
16151615

1616+
interface
1617+
attributes(device) integer(8) function globalTimer()
1618+
end function
1619+
end interface
1620+
16161621
contains
16171622

16181623
attributes(device) subroutine syncthreads()

flang/test/Lower/CUDA/cuda-device-proc.cuf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ attributes(global) subroutine devsub()
4646
ai = atomicdec(ai, 1_4)
4747

4848
time = clock64()
49+
50+
time = globalTimer()
4951
end
5052

5153
! CHECK-LABEL: func.func @_QPdevsub() attributes {cuf.proc_attr = #cuf.cuda_proc<global>}
@@ -83,6 +85,7 @@ end
8385
! CHECK: %{{.*}} = llvm.atomicrmw udec_wrap %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i32
8486

8587
! CHECK: fir.call @llvm.nvvm.read.ptx.sreg.clock64()
88+
! CHECK: %{{.*}} = nvvm.read.ptx.sreg.globaltimer : i64
8689

8790
subroutine host1()
8891
integer, device :: a(32)

0 commit comments

Comments
 (0)