@@ -642,6 +642,7 @@ static constexpr IntrinsicHandler handlers[]{
642
642
{" dim" , asValue},
643
643
{" mask" , asBox, handleDynamicOptional}}},
644
644
/* isElemental=*/ false },
645
+ {" syncthreads1" , &I::genSyncThreads},
645
646
{" system" ,
646
647
&I::genSystem,
647
648
{{{" command" , asBox}, {" exitstat" , asBox, handleDynamicOptional}}},
@@ -1639,8 +1640,9 @@ mlir::Value toValue(const fir::ExtendedValue &val, fir::FirOpBuilder &builder,
1639
1640
// ===----------------------------------------------------------------------===//
1640
1641
1641
1642
static bool isIntrinsicModuleProcedure (llvm::StringRef name) {
1643
+ llvm::errs () << " isIntrinsicModuleProcedure: " << name << " \n " ;
1642
1644
return name.starts_with (" c_" ) || name.starts_with (" compiler_" ) ||
1643
- name.starts_with (" ieee_" ) || name.starts_with (" __ppc_" );
1645
+ name.starts_with (" ieee_" ) || name.starts_with (" __ppc_" ) || name == " syncthreads1 " ;
1644
1646
}
1645
1647
1646
1648
static bool isCoarrayIntrinsic (llvm::StringRef name) {
@@ -1684,6 +1686,7 @@ lookupIntrinsicHandler(fir::FirOpBuilder &builder,
1684
1686
llvm::StringRef intrinsicName,
1685
1687
std::optional<mlir::Type> resultType) {
1686
1688
llvm::StringRef name = genericName (intrinsicName);
1689
+ llvm::errs () << " Looking up " << intrinsicName << " with name " << name << " \n " ;
1687
1690
if (const IntrinsicHandler *handler = findIntrinsicHandler (name))
1688
1691
return std::make_optional<IntrinsicHandlerEntry>(handler);
1689
1692
bool isPPCTarget = fir::getTargetTriple (builder.getModule ()).isPPC ();
@@ -7290,6 +7293,22 @@ IntrinsicLibrary::genSum(mlir::Type resultType,
7290
7293
resultType, args);
7291
7294
}
7292
7295
7296
+ // SYNCTHREADS
7297
+ void IntrinsicLibrary::genSyncThreads (llvm::ArrayRef<fir::ExtendedValue> args) {
7298
+ constexpr llvm::StringLiteral funcName = " llvm.nvvm.barrier0" ;
7299
+ mlir::func::FuncOp funcOp = builder.getNamedFunction (funcName);
7300
+ mlir::MLIRContext *context = builder.getContext ();
7301
+ mlir::FunctionType funcType =
7302
+ mlir::FunctionType::get (context, {}, {});
7303
+
7304
+ if (!funcOp)
7305
+ funcOp = builder.createFunction (loc, funcName, funcType);
7306
+
7307
+ llvm::SmallVector<mlir::Value> noArgs;
7308
+ builder.create <fir::CallOp>(loc, funcOp, noArgs);
7309
+
7310
+ }
7311
+
7293
7312
// SYSTEM
7294
7313
fir::ExtendedValue
7295
7314
IntrinsicLibrary::genSystem (std::optional<mlir::Type> resultType,
0 commit comments