[llvm] AMDGPU: Refactor unsafe atomicrmw remark emission (PR #89379)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 19 05:50:41 PDT 2024
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/89379
Defers some of the setup work until the remark is actually emitted. Move big lambda into a helper function, and only use value capture of a pointer. Prepare to have different messages.
>From 47dda9a8a7a8c3fb8177cb452c2d02e1bb11b7a7 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Fri, 19 Apr 2024 08:41:31 +0200
Subject: [PATCH] AMDGPU: Refactor unsafe atomicrmw remark emission
Defers some of the setup work until the remark is actually emitted.
Move big lambda into a helper function, and only use value capture
of a pointer. Prepare to have different messages.
---
llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 33 ++++++++++++-----------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 0c706d51cb665f..c4592d43f4f8a8 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -15996,32 +15996,35 @@ bool unsafeFPAtomicsDisabled(Function *F) {
"true";
}
+static OptimizationRemark emitAtomicRMWLegalRemark(const AtomicRMWInst *RMW) {
+ LLVMContext &Ctx = RMW->getContext();
+ SmallVector<StringRef> SSNs;
+ Ctx.getSyncScopeNames(SSNs);
+ StringRef MemScope = SSNs[RMW->getSyncScopeID()].empty()
+ ? "system"
+ : SSNs[RMW->getSyncScopeID()];
+
+ return OptimizationRemark(DEBUG_TYPE, "Passed", RMW)
+ << "Hardware instruction generated for atomic "
+ << RMW->getOperationName(RMW->getOperation())
+ << " operation at memory scope " << MemScope;
+}
+
TargetLowering::AtomicExpansionKind
SITargetLowering::shouldExpandAtomicRMWInIR(AtomicRMWInst *RMW) const {
unsigned AS = RMW->getPointerAddressSpace();
if (AS == AMDGPUAS::PRIVATE_ADDRESS)
return AtomicExpansionKind::NotAtomic;
- auto SSID = RMW->getSyncScopeID();
-
- auto ReportUnsafeHWInst = [&](TargetLowering::AtomicExpansionKind Kind) {
+ auto ReportUnsafeHWInst = [=](TargetLowering::AtomicExpansionKind Kind) {
OptimizationRemarkEmitter ORE(RMW->getFunction());
- LLVMContext &Ctx = RMW->getFunction()->getContext();
- SmallVector<StringRef> SSNs;
- Ctx.getSyncScopeNames(SSNs);
- auto MemScope = SSNs[RMW->getSyncScopeID()].empty()
- ? "system"
- : SSNs[RMW->getSyncScopeID()];
- ORE.emit([&]() {
- return OptimizationRemark(DEBUG_TYPE, "Passed", RMW)
- << "Hardware instruction generated for atomic "
- << RMW->getOperationName(RMW->getOperation())
- << " operation at memory scope " << MemScope
- << " due to an unsafe request.";
+ ORE.emit([=]() {
+ return emitAtomicRMWLegalRemark(RMW) << " due to an unsafe request.";
});
return Kind;
};
+ auto SSID = RMW->getSyncScopeID();
bool HasSystemScope =
SSID == SyncScope::System ||
SSID == RMW->getContext().getOrInsertSyncScopeID("one-as");
More information about the llvm-commits
mailing list