nv50/ir: fold shl + mul with immediates
On SM20 this gives: total instructions in shared programs : 6299222 -> 6294240 (-0.08%) total gprs used in shared programs : 944139 -> 944068 (-0.01%) total local used in shared programs : 54116 -> 54116 (0.00%) local gpr inst bytes helped 0 126 2781 2781 hurt 0 55 11 11 Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
abd326e81b
commit
0ef5c8ab74
|
@ -1194,6 +1194,22 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s)
|
|||
i->setSrc(1, bld.loadImm(NULL, imm0.reg.data.u32 + imm1.reg.data.u32));
|
||||
}
|
||||
break;
|
||||
case OP_MUL:
|
||||
int muls;
|
||||
if (isFloatType(si->dType))
|
||||
return;
|
||||
if (si->src(1).getImmediate(imm1))
|
||||
muls = 1;
|
||||
else if (si->src(0).getImmediate(imm1))
|
||||
muls = 0;
|
||||
else
|
||||
return;
|
||||
|
||||
bld.setPosition(i, false);
|
||||
i->op = OP_MUL;
|
||||
i->setSrc(0, si->getSrc(!muls));
|
||||
i->setSrc(1, bld.loadImm(NULL, imm1.reg.data.u32 << imm0.reg.data.u32));
|
||||
break;
|
||||
case OP_SUB:
|
||||
case OP_ADD:
|
||||
int adds;
|
||||
|
|
Loading…
Reference in New Issue