Skip to content

Commit

Permalink
[AMDGPU] Serialize WWM_REG vreg flag (llvm#110229)
Browse files Browse the repository at this point in the history
  • Loading branch information
optimisan authored Oct 14, 2024
1 parent 0cfa6e2 commit bec839d
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 0 deletions.
11 changes: 11 additions & 0 deletions llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1718,6 +1718,17 @@ bool GCNTargetMachine::parseMachineFunctionInfo(
MFI->reserveWWMRegister(ParsedReg);
}

for (const auto &[_, Info] : PFS.VRegInfosNamed) {
for (uint8_t Flag : Info->Flags) {
MFI->setFlag(Info->VReg, Flag);
}
}
for (const auto &[_, Info] : PFS.VRegInfos) {
for (uint8_t Flag : Info->Flags) {
MFI->setFlag(Info->VReg, Flag);
}
}

auto parseAndCheckArgument = [&](const std::optional<yaml::SIArgument> &A,
const TargetRegisterClass &RC,
ArgDescriptor &Arg, unsigned UserSGPRs,
Expand Down
10 changes: 10 additions & 0 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3851,3 +3851,13 @@ SIRegisterInfo::getSubRegAlignmentNumBits(const TargetRegisterClass *RC,
}
return 0;
}

SmallVector<StringLiteral>
SIRegisterInfo::getVRegFlagsOfReg(Register Reg,
const MachineFunction &MF) const {
SmallVector<StringLiteral> RegFlags;
const SIMachineFunctionInfo *FuncInfo = MF.getInfo<SIMachineFunctionInfo>();
if (FuncInfo->checkFlag(Reg, AMDGPU::VirtRegFlag::WWM_REG))
RegFlags.push_back("WWM_REG");
return RegFlags;
}
8 changes: 8 additions & 0 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,14 @@ class SIRegisterInfo final : public AMDGPUGenRegisterInfo {
// No check if the subreg is supported by the current RC is made.
unsigned getSubRegAlignmentNumBits(const TargetRegisterClass *RC,
unsigned SubReg) const;

std::optional<uint8_t> getVRegFlagValue(StringRef Name) const override {
return Name == "WWM_REG" ? AMDGPU::VirtRegFlag::WWM_REG
: std::optional<uint8_t>{};
}

SmallVector<StringLiteral>
getVRegFlagsOfReg(Register Reg, const MachineFunction &MF) const override;
};

namespace AMDGPU {
Expand Down
15 changes: 15 additions & 0 deletions llvm/test/CodeGen/MIR/AMDGPU/machine-function-info-no-ir.mir
Original file line number Diff line number Diff line change
Expand Up @@ -578,3 +578,18 @@ body: |
SI_RETURN
...
---
name: vregs
# FULL: registers:
# FULL-NEXT: - { id: 0, class: vgpr_32, preferred-register: '$vgpr1', flags: [ WWM_REG ] }
# FULL-NEXT: - { id: 1, class: sgpr_64, preferred-register: '$sgpr0_sgpr1', flags: [ ] }
# FULL-NEXT: - { id: 2, class: sgpr_64, preferred-register: '', flags: [ ] }
registers:
- { id: 0, class: vgpr_32, preferred-register: $vgpr1, flags: [ WWM_REG ]}
- { id: 1, class: sgpr_64, preferred-register: $sgpr0_sgpr1 }
- { id: 2, class: sgpr_64, flags: [ ] }
body: |
bb.0:
%2:sgpr_64 = COPY %1
%1:sgpr_64 = COPY %0
...

0 comments on commit bec839d

Please sign in to comment.