mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 23:10:11 +01:00
nvc0/ir: be more careful about preserving modifiers in SHLADD creation
src2 was being given the wrong modifier, and we were not properly managing the modifier on the SHL source either. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
3a2869aaca
commit
a6d6eff2e6
1 changed files with 5 additions and 7 deletions
|
|
@ -2163,7 +2163,6 @@ LateAlgebraicOpt::tryADDToSHLADD(Instruction *add)
|
|||
Value *src1 = add->getSrc(1);
|
||||
ImmediateValue imm;
|
||||
Instruction *shl;
|
||||
Modifier mod[2];
|
||||
Value *src;
|
||||
int s;
|
||||
|
||||
|
|
@ -2182,20 +2181,19 @@ LateAlgebraicOpt::tryADDToSHLADD(Instruction *add)
|
|||
src = add->getSrc(s);
|
||||
shl = src->getUniqueInsn();
|
||||
|
||||
if (shl->bb != add->bb || shl->usesFlags() || shl->subOp)
|
||||
if (shl->bb != add->bb || shl->usesFlags() || shl->subOp || shl->src(0).mod)
|
||||
return false;
|
||||
|
||||
if (!shl->src(1).getImmediate(imm))
|
||||
return false;
|
||||
|
||||
mod[0] = add->src(0).mod;
|
||||
mod[1] = add->src(1).mod;
|
||||
|
||||
add->op = OP_SHLADD;
|
||||
add->setSrc(2, add->src(!s));
|
||||
add->src(2).mod = mod[s];
|
||||
|
||||
// SHL can't have any modifiers, but the ADD source may have had
|
||||
// one. Preserve it.
|
||||
add->setSrc(0, shl->getSrc(0));
|
||||
if (s == 1)
|
||||
add->src(0).mod = add->src(1).mod;
|
||||
add->setSrc(1, new_ImmediateValue(shl->bb->getProgram(), imm.reg.data.u32));
|
||||
add->src(1).mod = Modifier(0);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue