[PATCH] D68635: [AMDGPU] Come back patch for the 'Assign register class for cross block values according to the divergence.'
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 8 10:36:54 PDT 2019
arsenm added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:653
}
case AMDGPU::PHI: {
+ unsigned hasVGPRUses = 0;
----------------
Can you split this into a function?
================
Comment at: llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:654
case AMDGPU::PHI: {
- Register Reg = MI.getOperand(0).getReg();
- if (!TRI->isSGPRClass(MRI.getRegClass(Reg)))
- break;
-
- // We don't need to fix the PHI if the common dominator of the
- // two incoming blocks terminates with a uniform branch.
- bool HasVGPROperand = phiHasVGPROperands(MI, MRI, TRI, TII);
- if (MI.getNumExplicitOperands() == 5 && !HasVGPROperand) {
- MachineBasicBlock *MBB0 = MI.getOperand(2).getMBB();
- MachineBasicBlock *MBB1 = MI.getOperand(4).getMBB();
-
- if (!predsHasDivergentTerminator(MBB0, TRI) &&
- !predsHasDivergentTerminator(MBB1, TRI)) {
- LLVM_DEBUG(dbgs()
- << "Not fixing PHI for uniform branch: " << MI << '\n');
+ unsigned hasVGPRUses = 0;
+ SetVector<const MachineInstr *> worklist;
----------------
This isn't a bool, so shouldn't start with has
================
Comment at: llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:664
+ if (UseMI->isCopy() &&
+ Register::isPhysicalRegister(UseMI->getOperand(0).getReg()) &&
+ !TRI->isSGPRReg(MRI, UseMI->getOperand(0).getReg())) {
----------------
.isPhysical()
================
Comment at: llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:680-693
+ unsigned OpNo = UseMI->getOperandNo(&Use);
+ const MCInstrDesc &Desc = TII->get(UseMI->getOpcode());
+ if (!Desc.isPseudo() && Desc.OpInfo &&
+ OpNo < Desc.getNumOperands() &&
+ Desc.OpInfo[OpNo].RegClass != -1) {
+ const TargetRegisterClass *OpRC =
+ TRI->getRegClass(Desc.OpInfo[OpNo].RegClass);
----------------
This seems to be reproducing SIInstrInfo::getOpRegClass
================
Comment at: llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:702
+ const TargetRegisterClass *RC =
+ Register::isVirtualRegister(SrcReg)
+ ? MRI.getRegClass(SrcReg)
----------------
SrcReg.isVirtual()
================
Comment at: llvm/lib/Target/AMDGPU/SIInstrInfo.cpp:3978
// No VOP2 instructions support AGPRs.
- if (Src0.isReg() && RI.isAGPR(MRI, Src0.getReg()))
+ if (Src0.isReg() && RI.hasAGPRs(Register::isVirtualRegister(Src0.getReg())
+ ? MRI.getRegClass(Src0.getReg())
----------------
rampitec wrote:
> What's wrong with isAGPR() call?
.isVirtual()
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68635/new/
https://reviews.llvm.org/D68635
More information about the llvm-commits
mailing list