[llvm] AMDGPU: Refactor unsafe atomicrmw remark emission (PR #89379)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 19 05:51:00 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/89379.diff
1 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/SIISelLowering.cpp (+18-15)
``````````diff
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");
``````````
</details>
https://github.com/llvm/llvm-project/pull/89379
More information about the llvm-commits
mailing list