We still have to fix the PHI if there is at least one VGPR operand.
Details
Diff Detail
- Repository
- rL LLVM
Event Timeline
| lib/Target/AMDGPU/SIFixSGPRCopies.cpp | ||
|---|---|---|
| 608 ↗ | (On Diff #104312) | I think you should move the below phiHasVGPROperands check first rather than adding a second one |
| test/CodeGen/AMDGPU/vgpr-to-sgpr-phi.ll | ||
| 3 ↗ | (On Diff #104312) | GCN check prefix |
| 7 ↗ | (On Diff #104312) | It may be better to reformulate as a kernel for now, which will require a non-argument source for the VGPR |
| 7–9 ↗ | (On Diff #104312) | Run instnamer on test. Also can be merged |
| 30 ↗ | (On Diff #104312) | Drop extra string attributes |
| 34 ↗ | (On Diff #104312) | Drop all metadata |
Update based on Matt's review.
For the test:
- need details on how to change to a kernel, especially what the argument should be.
- I tried a few options, but it seems we could not reproduce the issue with the kernel version, possibly because code is optimized away.
- not clear what to merge!
| test/CodeGen/AMDGPU/vgpr-to-sgpr-phi.ll | ||
|---|---|---|
| 7 ↗ | (On Diff #104503) | The issue is not reproducible if I make it a kernel. |
| 7–9 ↗ | (On Diff #104312) | Can you be more specific which test should I merge to? It is not clear to me which tests are for this pass (simply guess from the names). Which test is for the following piece of code? // We don't need to fix the PHI if the common dominator of the
// two incoming blocks terminates with a uniform branch.
if (MI.getNumExplicitOperands() == 5) {
MachineBasicBlock *MBB0 = MI.getOperand(2).getMBB();
MachineBasicBlock *MBB1 = MI.getOperand(4).getMBB();
if (!predsHasDivergentTerminator(MBB0, TRI) &&
!predsHasDivergentTerminator(MBB1, TRI)) {
DEBUG(dbgs() << "Not fixing PHI for uniform branch: " << MI << '\n');
break;
}
} |
Merge the test into uniform-cfg.ll.
I can not find an approach to change the test to a kernel and yet still be able to reproduce the issue.
So I think it is OK to use a function here.