Skip to content

Commit 1b0239b

Browse files
committed
Trying to get a call treated as an intrinsic
1 parent 2546ae4 commit 1b0239b

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ struct IntrinsicLibrary {
392392
fir::ExtendedValue genSum(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
393393
void genSignalSubroutine(llvm::ArrayRef<fir::ExtendedValue>);
394394
void genSleep(llvm::ArrayRef<fir::ExtendedValue>);
395+
void genSyncThreads(llvm::ArrayRef<fir::ExtendedValue>);
395396
fir::ExtendedValue genSystem(std::optional<mlir::Type>,
396397
mlir::ArrayRef<fir::ExtendedValue> args);
397398
void genSystemClock(llvm::ArrayRef<fir::ExtendedValue>);

flang/lib/Optimizer/Builder/IntrinsicCall.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ static constexpr IntrinsicHandler handlers[]{
642642
{"dim", asValue},
643643
{"mask", asBox, handleDynamicOptional}}},
644644
/*isElemental=*/false},
645+
{"syncthreads1", &I::genSyncThreads},
645646
{"system",
646647
&I::genSystem,
647648
{{{"command", asBox}, {"exitstat", asBox, handleDynamicOptional}}},
@@ -1639,8 +1640,9 @@ mlir::Value toValue(const fir::ExtendedValue &val, fir::FirOpBuilder &builder,
16391640
//===----------------------------------------------------------------------===//
16401641

16411642
static bool isIntrinsicModuleProcedure(llvm::StringRef name) {
1643+
llvm::errs() << "isIntrinsicModuleProcedure: " << name << "\n";
16421644
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";
16441646
}
16451647

16461648
static bool isCoarrayIntrinsic(llvm::StringRef name) {
@@ -1684,6 +1686,7 @@ lookupIntrinsicHandler(fir::FirOpBuilder &builder,
16841686
llvm::StringRef intrinsicName,
16851687
std::optional<mlir::Type> resultType) {
16861688
llvm::StringRef name = genericName(intrinsicName);
1689+
llvm::errs() << "Looking up " << intrinsicName << " with name " << name << "\n";
16871690
if (const IntrinsicHandler *handler = findIntrinsicHandler(name))
16881691
return std::make_optional<IntrinsicHandlerEntry>(handler);
16891692
bool isPPCTarget = fir::getTargetTriple(builder.getModule()).isPPC();
@@ -7290,6 +7293,22 @@ IntrinsicLibrary::genSum(mlir::Type resultType,
72907293
resultType, args);
72917294
}
72927295

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+
72937312
// SYSTEM
72947313
fir::ExtendedValue
72957314
IntrinsicLibrary::genSystem(std::optional<mlir::Type> resultType,

0 commit comments

Comments
 (0)