Wait, this is actively buggy! How did this ever work :( I guess we don't split immediates too frequently, and I was testing it with zero's or something.
Can you figure out the commit where I added this idiotic code and add a Fixes: tag? Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> Cc: mesa-sta...@lists.freedesktop.org On Mon, Jun 12, 2017 at 4:53 PM, Pierre Moreau <pierre.mor...@free.fr> wrote: > Signed-off-by: Pierre Moreau <pierre.mor...@free.fr> > --- > src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > index e032255178..57223d311c 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > @@ -975,8 +975,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) { > @@ -984,7 +985,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); Is that what you want here? Should this be typeOfSize(size) ? I guess you want to split this into 32-bit values anyways since that's what everything processes... eventually we might want to play around with the SIMD opcodes but probably not soon. > - val >>= size; > + val >>= bitsize; > } > delete_Instruction(prog, i); > break; > -- > 2.13.1 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev