Commit 940e50f7 authored by Pierre Moreau's avatar Pierre Moreau Committed by Andres Gomez

nv50/ir: Properly fold constants in SPLIT operation

Fixes: b7d9677d ("nv50/ir: constant fold OP_SPLIT")
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Pierre Moreau's avatarPierre Moreau <pierre.morrow@free.fr>
Reviewed-by: Ilia Mirkin's avatarIlia Mirkin <imirkin@alum.mit.edu>
(cherry picked from commit afb8f2d4)
parent 8b7ba857
......@@ -938,8 +938,9 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s)
bld.setPosition(i, false);
uint8_t size = i->getDef(0)->reg.size;
uint32_t mask = (1ULL << size) - 1;
assert(size <= 32);
uint8_t bitsize = size * 8;
uint32_t mask = (1ULL << bitsize) - 1;
assert(bitsize <= 32);
uint64_t val = imm0.reg.data.u64;
for (int8_t d = 0; i->defExists(d); ++d) {
......@@ -947,7 +948,7 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s)
assert(def->reg.size == size);
newi = bld.mkMov(def, bld.mkImm((uint32_t)(val & mask)), TYPE_U32);
val >>= size;
val >>= bitsize;
}
delete_Instruction(prog, i);
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment