[flang][cuda] Use NVVM op for clock64 (#149223)
This commit is contained in:
parent
b9adc4a59c
commit
34951f7de8
@ -241,7 +241,6 @@ struct IntrinsicLibrary {
|
|||||||
void genCFProcPointer(llvm::ArrayRef<fir::ExtendedValue>);
|
void genCFProcPointer(llvm::ArrayRef<fir::ExtendedValue>);
|
||||||
fir::ExtendedValue genCFunLoc(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
|
fir::ExtendedValue genCFunLoc(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
|
||||||
fir::ExtendedValue genCLoc(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
|
fir::ExtendedValue genCLoc(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
|
||||||
mlir::Value genClock64(mlir::Type, llvm::ArrayRef<mlir::Value>);
|
|
||||||
template <mlir::arith::CmpIPredicate pred>
|
template <mlir::arith::CmpIPredicate pred>
|
||||||
fir::ExtendedValue genCPtrCompare(mlir::Type,
|
fir::ExtendedValue genCPtrCompare(mlir::Type,
|
||||||
llvm::ArrayRef<fir::ExtendedValue>);
|
llvm::ArrayRef<fir::ExtendedValue>);
|
||||||
|
@ -386,7 +386,10 @@ static constexpr IntrinsicHandler handlers[]{
|
|||||||
{{{"name", asAddr}, {"status", asAddr, handleDynamicOptional}}},
|
{{{"name", asAddr}, {"status", asAddr, handleDynamicOptional}}},
|
||||||
/*isElemental=*/false},
|
/*isElemental=*/false},
|
||||||
{"clock", &I::genNVVMTime<mlir::NVVM::ClockOp>, {}, /*isElemental=*/false},
|
{"clock", &I::genNVVMTime<mlir::NVVM::ClockOp>, {}, /*isElemental=*/false},
|
||||||
{"clock64", &I::genClock64, {}, /*isElemental=*/false},
|
{"clock64",
|
||||||
|
&I::genNVVMTime<mlir::NVVM::Clock64Op>,
|
||||||
|
{},
|
||||||
|
/*isElemental=*/false},
|
||||||
{"cmplx",
|
{"cmplx",
|
||||||
&I::genCmplx,
|
&I::genCmplx,
|
||||||
{{{"x", asValue}, {"y", asValue, handleDynamicOptional}}}},
|
{{{"x", asValue}, {"y", asValue, handleDynamicOptional}}}},
|
||||||
@ -3565,16 +3568,6 @@ IntrinsicLibrary::genChdir(std::optional<mlir::Type> resultType,
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// CLOCK64
|
|
||||||
mlir::Value IntrinsicLibrary::genClock64(mlir::Type resultType,
|
|
||||||
llvm::ArrayRef<mlir::Value> args) {
|
|
||||||
constexpr llvm::StringLiteral funcName = "llvm.nvvm.read.ptx.sreg.clock64";
|
|
||||||
mlir::MLIRContext *context = builder.getContext();
|
|
||||||
mlir::FunctionType ftype = mlir::FunctionType::get(context, {}, {resultType});
|
|
||||||
auto funcOp = builder.createFunction(loc, funcName, ftype);
|
|
||||||
return builder.create<fir::CallOp>(loc, funcOp, args).getResult(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// CMPLX
|
// CMPLX
|
||||||
mlir::Value IntrinsicLibrary::genCmplx(mlir::Type resultType,
|
mlir::Value IntrinsicLibrary::genCmplx(mlir::Type resultType,
|
||||||
llvm::ArrayRef<mlir::Value> args) {
|
llvm::ArrayRef<mlir::Value> args) {
|
||||||
@ -7204,7 +7197,7 @@ IntrinsicLibrary::genNull(mlir::Type, llvm::ArrayRef<fir::ExtendedValue> args) {
|
|||||||
return fir::MutableBoxValue(boxStorage, mold->nonDeferredLenParams(), {});
|
return fir::MutableBoxValue(boxStorage, mold->nonDeferredLenParams(), {});
|
||||||
}
|
}
|
||||||
|
|
||||||
// CLOCK, GLOBALTIMER
|
// CLOCK, CLOCK64, GLOBALTIMER
|
||||||
template <typename OpTy>
|
template <typename OpTy>
|
||||||
mlir::Value IntrinsicLibrary::genNVVMTime(mlir::Type resultType,
|
mlir::Value IntrinsicLibrary::genNVVMTime(mlir::Type resultType,
|
||||||
llvm::ArrayRef<mlir::Value> args) {
|
llvm::ArrayRef<mlir::Value> args) {
|
||||||
|
@ -48,7 +48,6 @@ attributes(global) subroutine devsub()
|
|||||||
|
|
||||||
smalltime = clock()
|
smalltime = clock()
|
||||||
time = clock64()
|
time = clock64()
|
||||||
|
|
||||||
time = globalTimer()
|
time = globalTimer()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -87,7 +86,7 @@ end
|
|||||||
! CHECK: %{{.*}} = llvm.atomicrmw udec_wrap %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i32
|
! CHECK: %{{.*}} = llvm.atomicrmw udec_wrap %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i32
|
||||||
|
|
||||||
! CHECK: %{{.*}} = nvvm.read.ptx.sreg.clock : i32
|
! CHECK: %{{.*}} = nvvm.read.ptx.sreg.clock : i32
|
||||||
! CHECK: fir.call @llvm.nvvm.read.ptx.sreg.clock64()
|
! CHECK: %{{.*}} = nvvm.read.ptx.sreg.clock64 : i64
|
||||||
! CHECK: %{{.*}} = nvvm.read.ptx.sreg.globaltimer : i64
|
! CHECK: %{{.*}} = nvvm.read.ptx.sreg.globaltimer : i64
|
||||||
|
|
||||||
subroutine host1()
|
subroutine host1()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user