nv50/ir: Check for valid insn instead of def size
This fixes a null pointer dereference during the register allocation pass, if a function had arguments. Functions arguments get a definition from the function itself, a definition which is therefore not linked to any instruction. If a value ends up having a definition but no linked instruction, the register allocation pass doesn't need to consider whether that value is generated by an instruction that can only handle "short" registers (on nv50). Signed-off-by: Pierre Moreau <pierre.morrow@free.fr>
This commit is contained in:
committed by
Ilia Mirkin
parent
a94d8d51d7
commit
f96a403bc3
@@ -853,7 +853,7 @@ isShortRegOp(Instruction *insn)
|
||||
static bool
|
||||
isShortRegVal(LValue *lval)
|
||||
{
|
||||
if (lval->defs.size() == 0)
|
||||
if (lval->getInsn() == NULL)
|
||||
return false;
|
||||
for (Value::DefCIterator def = lval->defs.begin();
|
||||
def != lval->defs.end(); ++def)
|
||||
@@ -1467,7 +1467,7 @@ GCRA::allocateRegisters(ArrayList& insns)
|
||||
nodes[i].init(regs, lval);
|
||||
RIG.insert(&nodes[i]);
|
||||
|
||||
if (lval->inFile(FILE_GPR) && lval->defs.size() > 0 &&
|
||||
if (lval->inFile(FILE_GPR) && lval->getInsn() != NULL &&
|
||||
prog->getTarget()->getChipset() < 0xc0) {
|
||||
Instruction *insn = lval->getInsn();
|
||||
if (insn->op == OP_MAD || insn->op == OP_SAD)
|
||||
|
||||
Reference in New Issue
Block a user