mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-28 14:00:30 +01:00
nv50/ir: fix phi/union sources when their def has been merged
In a situation where double-register values are used, the phi nodes can still end up being u32 values. They all get merged into one RA node though. When fixing up the merge (which comes after the phi node), the phi node's def would get fixed, but not its sources which would remain at the low register value. This maintains the invariant that a phi node's defs and sources are allocated the same register. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
32702cceed
commit
dfb0ca1606
1 changed files with 8 additions and 0 deletions
|
|
@ -1702,6 +1702,14 @@ GCRA::resolveSplitsAndMerges()
|
|||
Value *v = merge->getSrc(s);
|
||||
v->reg.data.id = regs.bytesToId(v, reg);
|
||||
v->join = v;
|
||||
// If the value is defined by a phi/union node, we also need to
|
||||
// perform the same fixup on that node's sources, since after RA
|
||||
// their registers should be identical.
|
||||
if (v->getInsn()->op == OP_PHI || v->getInsn()->op == OP_UNION) {
|
||||
Instruction *phi = v->getInsn();
|
||||
for (int phis = 0; phi->srcExists(phis); ++phis)
|
||||
phi->getSrc(phis)->join = v;
|
||||
}
|
||||
reg += v->reg.size;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue