[PATCH] D157040: [OpenMP][IR] Set correct alignment for internal variables
Hao Jin via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 8 13:51:19 PDT 2023
erjin updated this revision to Diff 548344.
erjin added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
se
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157040/new/
https://reviews.llvm.org/D157040
Files:
clang/lib/CodeGen/CGOpenMPRuntime.cpp
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
Index: llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
===================================================================
--- llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -2744,7 +2744,15 @@
PointerType *CriticalNamePtrTy =
PointerType::getUnqual(ArrayType::get(Type::getInt32Ty(Ctx), 8));
EXPECT_EQ(CriticalEndCI->getArgOperand(2), CriticalEntryCI->getArgOperand(2));
- EXPECT_EQ(CriticalEndCI->getArgOperand(2)->getType(), CriticalNamePtrTy);
+ GlobalVariable *GV =
+ dyn_cast<GlobalVariable>(CriticalEndCI->getArgOperand(2));
+ ASSERT_NE(GV, nullptr);
+ EXPECT_EQ(GV->getType(), CriticalNamePtrTy);
+ const DataLayout &DL = M->getDataLayout();
+ const llvm::Align TypeAlign = DL.getABITypeAlign(CriticalNamePtrTy);
+ const llvm::Align PtrAlign = DL.getPointerABIAlignment(GV->getAddressSpace());
+ if (const llvm::MaybeAlign Alignment = GV->getAlign())
+ EXPECT_EQ(*Alignment, std::max(TypeAlign, PtrAlign));
}
TEST_F(OpenMPIRBuilderTest, OrderedDirectiveDependSource) {
Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
===================================================================
--- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -4493,7 +4493,10 @@
M, Ty, /*IsConstant=*/false, GlobalValue::CommonLinkage,
Constant::getNullValue(Ty), Elem.first(),
/*InsertBefore=*/nullptr, GlobalValue::NotThreadLocal, AddressSpace);
- GV->setAlignment(M.getDataLayout().getABITypeAlign(Ty));
+ const DataLayout &DL = M.getDataLayout();
+ const llvm::Align TypeAlign = DL.getABITypeAlign(Ty);
+ const llvm::Align PtrAlign = DL.getPointerABIAlignment(AddressSpace);
+ GV->setAlignment(std::max(TypeAlign, PtrAlign));
Elem.second = GV;
}
Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp
===================================================================
--- clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -2161,11 +2161,7 @@
llvm::Value *CGOpenMPRuntime::getCriticalRegionLock(StringRef CriticalName) {
std::string Prefix = Twine("gomp_critical_user_", CriticalName).str();
std::string Name = getName({Prefix, "var"});
- llvm::GlobalVariable *G = OMPBuilder.getOrCreateInternalVariable(KmpCriticalNameTy, Name);
- llvm::Align PtrAlign = OMPBuilder.M.getDataLayout().getPointerABIAlignment(G->getAddressSpace());
- if (PtrAlign > llvm::Align(G->getAlignment()))
- G->setAlignment(PtrAlign);
- return G;
+ return OMPBuilder.getOrCreateInternalVariable(KmpCriticalNameTy, Name);
}
namespace {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D157040.548344.patch
Type: text/x-patch
Size: 2625 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230808/7ba08b02/attachment.bin>
More information about the cfe-commits
mailing list