TIFitis updated this revision to Diff 472041.
TIFitis added a comment.
Fix build errors
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136872/new/
https://reviews.llvm.org/D136872
Files:
clang/lib/CodeGen/CGOpenMPRuntime.cpp
llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
===================================================================
--- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -4705,6 +4705,61 @@
getTargetRegionEntryFnName(Name, ParentName, DeviceID, FileID, Line);
}
+/// Loads all the offload entries information from the host IR
+/// metadata.
+void OpenMPIRBuilder::loadOffloadInfoMetadata(
+ Module &M, OffloadEntriesInfoManager &OffloadEntriesInfoManager,
+ bool isDevice) {
+ // If we are in target mode, load the metadata from the host IR. This code has
+ // to match the metadaata creation in createOffloadEntriesAndInfoMetadata().
+
+ NamedMDNode *MD = M.getNamedMetadata("omp_offload.info");
+ if (!MD)
+ return;
+
+ for (MDNode *MN : MD->operands()) {
+ auto &&GetMDInt = [MN](unsigned Idx) {
+ auto *V = cast<ConstantAsMetadata>(MN->getOperand(Idx));
+ return cast<ConstantInt>(V->getValue())->getZExtValue();
+ };
+
+ auto &&GetMDString = [MN](unsigned Idx) {
+ auto *V = cast<MDString>(MN->getOperand(Idx));
+ return V->getString();
+ };
+
+ switch (GetMDInt(0)) {
+ default:
+ llvm_unreachable("Unexpected metadata!");
+ break;
+ case OffloadEntriesInfoManager::OffloadEntryInfo::
+ OffloadingEntryInfoTargetRegion: {
+ assert(isDevice && "Initialization of entries is "
+ "only required for the "
+ "device code generation.");
+ TargetRegionEntryInfo EntryInfo(/*ParentName=*/GetMDString(3),
+ /*DeviceID=*/GetMDInt(1),
+ /*FileID=*/GetMDInt(2),
+ /*Line=*/GetMDInt(4));
+ OffloadEntriesInfoManager.initializeTargetRegionEntryInfo(
+ EntryInfo, /*Order=*/GetMDInt(5));
+ break;
+ }
+ case OffloadEntriesInfoManager::OffloadEntryInfo::
+ OffloadingEntryInfoDeviceGlobalVar:
+ assert(isDevice && "Initialization of entries is "
+ "only required for the "
+ "device code generation.");
+ OffloadEntriesInfoManager.initializeDeviceGlobalVarEntryInfo(
+ /*MangledName=*/GetMDString(1),
+ static_cast<OffloadEntriesInfoManager::OMPTargetGlobalVarEntryKind>(
+ /*Flags=*/GetMDInt(2)),
+ /*Order=*/GetMDInt(3));
+ break;
+ }
+ }
+}
+
bool OffloadEntriesInfoManager::empty() const {
return OffloadEntriesTargetRegion.empty() &&
OffloadEntriesDeviceGlobalVar.empty();
Index: llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
===================================================================
--- llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1681,6 +1681,21 @@
BasicBlock *PreInsertBefore,
BasicBlock *PostInsertBefore,
const Twine &Name = {});
+
+ const std::string ompOffloadInfoName = "omp_offload.info";
+
+ /// Loads all the offload entries information from the host IR
+ /// metadata.
+ ///
+ /// \param M Module to load Metadata info from. Module passed maybe
+ /// loaded from bitcode file, i.e, different from OpenMPIRBuilder::M module.
+ /// \param OffloadEntriesInfoManager Initialize Offload Entry information.
+ /// \param isDevice Flag to check if code is generated only for OpenMP
+ /// target device.
+ void
+ loadOffloadInfoMetadata(Module &M,
+ OffloadEntriesInfoManager &OffloadEntriesInfoManager,
+ bool isDevice);
};
/// Data structure to contain the information needed to uniquely identify
Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp
===================================================================
--- clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -3171,52 +3171,8 @@
return;
}
- llvm::NamedMDNode *MD = ME.get()->getNamedMetadata("omp_offload.info");
- if (!MD)
- return;
-
- for (llvm::MDNode *MN : MD->operands()) {
- auto &&GetMDInt = [MN](unsigned Idx) {
- auto *V = cast<llvm::ConstantAsMetadata>(MN->getOperand(Idx));
- return cast<llvm::ConstantInt>(V->getValue())->getZExtValue();
- };
-
- auto &&GetMDString = [MN](unsigned Idx) {
- auto *V = cast<llvm::MDString>(MN->getOperand(Idx));
- return V->getString();
- };
-
- switch (GetMDInt(0)) {
- default:
- llvm_unreachable("Unexpected metadata!");
- break;
- case llvm::OffloadEntriesInfoManager::OffloadEntryInfo::
- OffloadingEntryInfoTargetRegion: {
- assert(CGM.getLangOpts().OpenMPIsDevice && "Initialization of entries is "
- "only required for the "
- "device code generation.");
- llvm::TargetRegionEntryInfo EntryInfo(/*ParentName=*/GetMDString(3),
- /*DeviceID=*/GetMDInt(1),
- /*FileID=*/GetMDInt(2),
- /*Line=*/GetMDInt(4));
- OffloadEntriesInfoManager.initializeTargetRegionEntryInfo(
- EntryInfo, /*Order=*/GetMDInt(5));
- break;
- }
- case llvm::OffloadEntriesInfoManager::OffloadEntryInfo::
- OffloadingEntryInfoDeviceGlobalVar:
- assert(CGM.getLangOpts().OpenMPIsDevice && "Initialization of entries is "
- "only required for the "
- "device code generation.");
- OffloadEntriesInfoManager.initializeDeviceGlobalVarEntryInfo(
- /*MangledName=*/GetMDString(1),
- static_cast<
- llvm::OffloadEntriesInfoManager::OMPTargetGlobalVarEntryKind>(
- /*Flags=*/GetMDInt(2)),
- /*Order=*/GetMDInt(3));
- break;
- }
- }
+ OMPBuilder.loadOffloadInfoMetadata(*ME.get(), OffloadEntriesInfoManager,
+ CGM.getLangOpts().OpenMPIsDevice);
}
void CGOpenMPRuntime::emitKmpRoutineEntryT(QualType KmpInt32Ty) {
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits