diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp index d9627fa2da0..3e238f1d97b 100644 --- a/src/amd/compiler/aco_spill.cpp +++ b/src/amd/compiler/aco_spill.cpp @@ -1389,7 +1389,7 @@ spill_vgpr(spill_ctx& ctx, Block& block, std::vector>& inst create_instruction(aco_opcode::p_split_vector, Format::PSEUDO, 1, temp.size())}; split->operands[0] = Operand(temp); for (unsigned i = 0; i < temp.size(); i++) - split->definitions[i] = bld.def(v1); + split->definitions[i] = bld.def(v1.resize(MIN2(temp.bytes() - i * 4, 4))); bld.insert(split); for (unsigned i = 0; i < temp.size(); i++) { Temp elem = split->definitions[i].getTemp(); @@ -1454,7 +1454,7 @@ reload_vgpr(spill_ctx& ctx, Block& block, std::vector>& ins create_instruction(aco_opcode::p_create_vector, Format::PSEUDO, def.size(), 1)}; vec->definitions[0] = def; for (unsigned i = 0; i < def.size(); i++) { - Temp tmp = bld.tmp(v1); + Temp tmp = bld.tmp(v1.resize(MIN2(def.bytes() - i * 4, 4))); vec->operands[i] = Operand(tmp); if (i < lds_slots) { bld.ds(aco_opcode::ds_read_addtid_b32, Definition(tmp), bld.m0(ctx.lds_m0_zero),