Skip to content

Commit

Permalink
[AMDGPU][NFC] Add a getRegBitWidth() helper for TargetRegisterClass o…
Browse files Browse the repository at this point in the history
…perands.

Reviewed By: foad

Differential Revision: https://reviews.llvm.org/D152257
  • Loading branch information
kosarev committed Jun 7, 2023
1 parent e72baa7 commit 4e312ab
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 9 deletions.
5 changes: 2 additions & 3 deletions llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -908,11 +908,10 @@ void SIFoldOperands::foldOperand(
TRI->getRegClass(FoldDesc.operands()[0].RegClass);

// Split 64-bit constants into 32-bits for folding.
if (UseOp.getSubReg() && AMDGPU::getRegBitWidth(FoldRC->getID()) == 64) {
if (UseOp.getSubReg() && AMDGPU::getRegBitWidth(*FoldRC) == 64) {
Register UseReg = UseOp.getReg();
const TargetRegisterClass *UseRC = MRI->getRegClass(UseReg);

if (AMDGPU::getRegBitWidth(UseRC->getID()) != 64)
if (AMDGPU::getRegBitWidth(*UseRC) != 64)
return;

APInt Imm(64, OpToFold.getImm());
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2882,7 +2882,7 @@ bool SIInstrInfo::canInsertSelect(const MachineBasicBlock &MBB,
if (MRI.getRegClass(FalseReg) != RC)
return false;

int NumInsts = AMDGPU::getRegBitWidth(RC->getID()) / 32;
int NumInsts = AMDGPU::getRegBitWidth(*RC) / 32;
CondCycles = TrueCycles = FalseCycles = NumInsts; // ???

// Limit to equal cost for branch vs. N v_cndmask_b32s.
Expand All @@ -2897,7 +2897,7 @@ bool SIInstrInfo::canInsertSelect(const MachineBasicBlock &MBB,
if (MRI.getRegClass(FalseReg) != RC)
return false;

int NumInsts = AMDGPU::getRegBitWidth(RC->getID()) / 32;
int NumInsts = AMDGPU::getRegBitWidth(*RC) / 32;

// Multiples of 8 can do s_cselect_b64
if (NumInsts % 2 == 0)
Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1310,7 +1310,7 @@ void SIRegisterInfo::buildSpillLoadStore(
const TargetRegisterClass *RC = getRegClassForReg(MF->getRegInfo(), ValueReg);
// On gfx90a+ AGPR is a regular VGPR acceptable for loads and stores.
const bool IsAGPR = !ST.hasGFX90AInsts() && isAGPRClass(RC);
const unsigned RegWidth = AMDGPU::getRegBitWidth(RC->getID()) / 8;
const unsigned RegWidth = AMDGPU::getRegBitWidth(*RC) / 8;

// Always use 4 byte operations for AGPRs because we need to scavenge
// a temporary VGPR.
Expand Down Expand Up @@ -2904,7 +2904,7 @@ bool SIRegisterInfo::isUniformReg(const MachineRegisterInfo &MRI,

ArrayRef<int16_t> SIRegisterInfo::getRegSplitParts(const TargetRegisterClass *RC,
unsigned EltSize) const {
const unsigned RegBitWidth = AMDGPU::getRegBitWidth(*RC->MC);
const unsigned RegBitWidth = AMDGPU::getRegBitWidth(*RC);
assert(RegBitWidth >= 32 && RegBitWidth <= 1024);

const unsigned RegDWORDs = RegBitWidth / 32;
Expand Down Expand Up @@ -3209,4 +3209,4 @@ SIRegisterInfo::getSubRegAlignmentNumBits(const TargetRegisterClass *RC,
break;
}
return 0;
}
}
7 changes: 6 additions & 1 deletion llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "AMDKernelCodeT.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Function.h"
Expand Down Expand Up @@ -2367,11 +2368,15 @@ unsigned getRegBitWidth(const MCRegisterClass &RC) {
return getRegBitWidth(RC.getID());
}

unsigned getRegBitWidth(const TargetRegisterClass &RC) {
return getRegBitWidth(RC.getID());
}

unsigned getRegOperandSize(const MCRegisterInfo *MRI, const MCInstrDesc &Desc,
unsigned OpNo) {
assert(OpNo < Desc.NumOperands);
unsigned RCID = Desc.operands()[OpNo].RegClass;
return getRegBitWidth(MRI->getRegClass(RCID)) / 8;
return getRegBitWidth(RCID) / 8;
}

bool isInlinableLiteral64(int64_t Literal, bool HasInv2Pi) {
Expand Down
4 changes: 4 additions & 0 deletions llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class MCRegisterClass;
class MCRegisterInfo;
class MCSubtargetInfo;
class StringRef;
class TargetRegisterClass;
class Triple;
class raw_ostream;

Expand Down Expand Up @@ -1178,6 +1179,9 @@ unsigned getRegBitWidth(unsigned RCID);
/// Get the size in bits of a register from the register class \p RC.
unsigned getRegBitWidth(const MCRegisterClass &RC);

/// Get the size in bits of a register from the register class \p RC.
unsigned getRegBitWidth(const TargetRegisterClass &RC);

/// Get size of register operand
unsigned getRegOperandSize(const MCRegisterInfo *MRI, const MCInstrDesc &Desc,
unsigned OpNo);
Expand Down

0 comments on commit 4e312ab

Please sign in to comment.