mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
nv50/ir/ra: improve condition for short regs, unify with cond for 16-bit
Instead of the size restriction existing in two places, and potentially being applied twice, we move this together. Ops with 16-bit register addresses can only take a short reg, and ops with immediates can only take a short reg. Of course we leave the immediate 0 in place since we know that it will be replaced by r63/r127 down the line, so don't treat zeroes as an immediate. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Karol Herbst <kherbst@redhat.com>
This commit is contained in:
parent
955d943c33
commit
799e021894
1 changed files with 7 additions and 7 deletions
|
|
@ -66,10 +66,8 @@ public:
|
|||
|
||||
inline int getMaxAssigned(DataFile f) const { return fill[f]; }
|
||||
|
||||
inline unsigned int getFileSize(DataFile f, uint8_t regSize) const
|
||||
inline unsigned int getFileSize(DataFile f) const
|
||||
{
|
||||
if (restrictedGPR16Range && f == FILE_GPR && regSize == 2)
|
||||
return (last[f] + 1) / 2;
|
||||
return last[f] + 1;
|
||||
}
|
||||
|
||||
|
|
@ -846,9 +844,11 @@ GCRA::printNodeInfo() const
|
|||
static bool
|
||||
isShortRegOp(Instruction *insn)
|
||||
{
|
||||
// Immediates are always in src1. Every other situation can be resolved by
|
||||
// Immediates are always in src1 (except zeroes, which end up getting
|
||||
// replaced with a zero reg). Every other situation can be resolved by
|
||||
// using a long encoding.
|
||||
return insn->srcExists(1) && insn->src(1).getFile() == FILE_IMMEDIATE;
|
||||
return insn->srcExists(1) && insn->src(1).getFile() == FILE_IMMEDIATE &&
|
||||
insn->getSrc(1)->reg.data.u64;
|
||||
}
|
||||
|
||||
// Check if this LValue is ever used in an instruction that can't be encoded
|
||||
|
|
@ -884,10 +884,10 @@ GCRA::RIG_Node::init(const RegisterSet& regs, LValue *lval)
|
|||
|
||||
weight = std::numeric_limits<float>::infinity();
|
||||
degree = 0;
|
||||
int size = regs.getFileSize(f, lval->reg.size);
|
||||
int size = regs.getFileSize(f);
|
||||
// On nv50, we lose a bit of gpr encoding when there's an embedded
|
||||
// immediate.
|
||||
if (regs.restrictedGPR16Range && f == FILE_GPR && isShortRegVal(lval))
|
||||
if (regs.restrictedGPR16Range && f == FILE_GPR && (lval->reg.size == 2 || isShortRegVal(lval)))
|
||||
size /= 2;
|
||||
degreeLimit = size;
|
||||
degreeLimit -= relDegree[1][colors] - 1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue