[clang] c580ad4 - [clang] Use the VFS to create the OpenMP region entry ID (#160918)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 26 12:25:43 PDT 2025
Author: Jan Svoboda
Date: 2025-09-26T12:25:37-07:00
New Revision: c580ad488ebbc8a195c740235e6ca5f52035a041
URL: https://github.com/llvm/llvm-project/commit/c580ad488ebbc8a195c740235e6ca5f52035a041
DIFF: https://github.com/llvm/llvm-project/commit/c580ad488ebbc8a195c740235e6ca5f52035a041.diff
LOG: [clang] Use the VFS to create the OpenMP region entry ID (#160918)
This PR uses the VFS to create the OpenMP target entry instead of going
straight to the real file system. This matches the behavior of other
input files of the compiler.
Added:
Modified:
clang/lib/CodeGen/CGOpenMPRuntime.cpp
llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 24e186a4f1c3f..0136f69172aa5 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -1550,7 +1550,8 @@ static llvm::TargetRegionEntryInfo getEntryInfoFromPresumedLoc(
return std::pair<std::string, uint64_t>(PLoc.getFilename(), PLoc.getLine());
};
- return OMPBuilder.getTargetEntryUniqueInfo(FileInfoCallBack, ParentName);
+ return OMPBuilder.getTargetEntryUniqueInfo(FileInfoCallBack,
+ *CGM.getFileSystem(), ParentName);
}
ConstantAddress CGOpenMPRuntime::getAddrOfDeclareTargetVar(const VarDecl *VD) {
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index fbab7f3bb402c..0a11617ea971c 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1406,7 +1406,7 @@ class OpenMPIRBuilder {
/// any.
LLVM_ABI static TargetRegionEntryInfo
getTargetEntryUniqueInfo(FileIdentifierInfoCallbackTy CallBack,
- StringRef ParentName = "");
+ vfs::FileSystem &VFS, StringRef ParentName = "");
/// Enum class for the RedctionGen CallBack type to be used.
enum class ReductionGenCBKind { Clang, MLIR };
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 94c51531ee251..5980ee35a5cd2 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -10313,17 +10313,19 @@ void OffloadEntriesInfoManager::getTargetRegionEntryFnName(
TargetRegionEntryInfo
OpenMPIRBuilder::getTargetEntryUniqueInfo(FileIdentifierInfoCallbackTy CallBack,
+ vfs::FileSystem &VFS,
StringRef ParentName) {
sys::fs::UniqueID ID(0xdeadf17e, 0);
auto FileIDInfo = CallBack();
uint64_t FileID = 0;
- std::error_code EC = sys::fs::getUniqueID(std::get<0>(FileIDInfo), ID);
- // If the inode ID could not be determined, create a hash value
- // the current file name and use that as an ID.
- if (EC)
+ if (ErrorOr<vfs::Status> Status = VFS.status(std::get<0>(FileIDInfo))) {
+ ID = Status->getUniqueID();
+ FileID = Status->getUniqueID().getFile();
+ } else {
+ // If the inode ID could not be determined, create a hash value
+ // the current file name and use that as an ID.
FileID = hash_value(std::get<0>(FileIDInfo));
- else
- FileID = ID.getFile();
+ }
return TargetRegionEntryInfo(ParentName, ID.getDevice(), FileID,
std::get<1>(FileIDInfo));
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
index bb1f3d0d6c4ad..53209a40665ae 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
@@ -3616,8 +3616,10 @@ getDeclareTargetRefPtrSuffix(LLVM::GlobalOp globalOp,
llvm::StringRef(loc.getFilename()), loc.getLine());
};
+ auto vfs = llvm::vfs::getRealFileSystem();
os << llvm::format(
- "_%x", ompBuilder.getTargetEntryUniqueInfo(fileInfoCallBack).FileID);
+ "_%x",
+ ompBuilder.getTargetEntryUniqueInfo(fileInfoCallBack, *vfs).FileID);
}
os << "_decl_tgt_ref_ptr";
@@ -5915,10 +5917,12 @@ convertDeclareTargetAttr(Operation *op, mlir::omp::DeclareTargetAttr attribute,
lineNo);
};
+ auto vfs = llvm::vfs::getRealFileSystem();
+
ompBuilder->registerTargetGlobalVariable(
captureClause, deviceClause, isDeclaration, isExternallyVisible,
- ompBuilder->getTargetEntryUniqueInfo(fileInfoCallBack), mangledName,
- generatedRefs, /*OpenMPSimd*/ false, targetTriple,
+ ompBuilder->getTargetEntryUniqueInfo(fileInfoCallBack, *vfs),
+ mangledName, generatedRefs, /*OpenMPSimd*/ false, targetTriple,
/*GlobalInitializer*/ nullptr, /*VariableLinkage*/ nullptr,
gVal->getType(), gVal);
@@ -5928,9 +5932,9 @@ convertDeclareTargetAttr(Operation *op, mlir::omp::DeclareTargetAttr attribute,
ompBuilder->Config.hasRequiresUnifiedSharedMemory())) {
ompBuilder->getAddrOfDeclareTargetVar(
captureClause, deviceClause, isDeclaration, isExternallyVisible,
- ompBuilder->getTargetEntryUniqueInfo(fileInfoCallBack), mangledName,
- generatedRefs, /*OpenMPSimd*/ false, targetTriple, gVal->getType(),
- /*GlobalInitializer*/ nullptr,
+ ompBuilder->getTargetEntryUniqueInfo(fileInfoCallBack, *vfs),
+ mangledName, generatedRefs, /*OpenMPSimd*/ false, targetTriple,
+ gVal->getType(), /*GlobalInitializer*/ nullptr,
/*VariableLinkage*/ nullptr);
}
}
More information about the cfe-commits
mailing list