[PATCH] D102212: [AMDGPU] Add Optimize VGPR LiveRange Pass.
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 17 16:08:01 PDT 2021
arsenm added a comment.
Is this relying on assumptions about how the placement of blocks after structurization? I think we need to augment the MIR to better track vector vs. scalar predecessors
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp:168
+ cl::desc("Enable VGPR liverange optimizations for if-else structure"),
+ cl::init(false), cl::Hidden);
+
----------------
Should default to on
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:39
+///
+/// This pass aims to to tell LLVM that %a is in-fact dead, through inserting
+/// a phi-node in bb.flow saying that %a is undef when coming from bb.then,
----------------
s/LLVM/register allocator
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:72
+ const SIInstrInfo *TII = nullptr;
+ LiveVariables *LV;
+ MachineDominatorTree *MDT = nullptr;
----------------
Why no initializer like the rest?
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:166
+ for (auto *MBB : Blocks) {
+ LLVM_DEBUG(dbgs() << " bb." << MBB->getNumber());
+ }
----------------
printName?
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:168
+ }
+ LLVM_DEBUG(dbgs() << "\n");
+}
----------------
single quotes
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:203
+ Register MOReg = MO.getReg();
+ // We can only optimize VGPR virtual register
+ if (MOReg.isPhysical() || !TRI->isVGPR(*MRI, MOReg))
----------------
Could also handle AGPR
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:276
+
+ for (auto Reg : KillsInElse)
+ if (!IsLiveThroughThen(Reg))
----------------
Braces
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:301
+ // Clear Live bit, as we will recalculate afterwards
+ LLVM_DEBUG(dbgs() << "Clear AliveBlock bb." << MBB->getNumber() << "\n");
+ OldVarInfo.AliveBlocks.reset(MBB->getNumber());
----------------
printName
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:326
+ if (Uses.size() == 1) {
+ LLVM_DEBUG(dbgs() << "Found one Non-PHI use in bb." << MBB->getNumber()
+ << "\n");
----------------
printName
================
Comment at: llvm/lib/Target/AMDGPU/SIOptimizeVGPRLiveRange.cpp:459-460
+
+ if (skipFunction(MF.getFunction()))
+ return false;
+
----------------
Can move this before the initializations
================
Comment at: llvm/test/CodeGen/AMDGPU/vgpr-liverange.ll:3
+; RUN: llc -march=amdgcn -mcpu=tonga -amdgpu-opt-vgpr-liverange=true -stop-after=si-opt-vgpr-liverange -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
+
+; a normal if-else
----------------
Could really use an additional end to end IR checks to make sure this actually gets the allocator to do what you want
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D102212/new/
https://reviews.llvm.org/D102212
More information about the llvm-commits
mailing list