ir3/ra: Fix bug with collect source handling
It can be the case that a collect and one of its sources are assigned to non-overlapping parts of the same merge set, for example: ssa_1 = ... ssa_2 = ... ssa_3 = ... ssa_4 = collect ssa_1, ssa_2 (kill), ssa_3 ... = ssa_4 (kill) ssa_5 = collect ssa_1, ssa_3 ... = ssa_1 (kill) ... = ssa_3 (kill) ... = ssa_5 (kill) If we merge the first collect first, we get a merge set: ssa_1 (offset 0) ssa_2 (offset 2) ssa_3 (offset 4) ssa_4 (offset 0) Now, we decide to merge ssa_1 and ssa_5: ssa_1 (offset 0) ssa_2 (offset 2) ssa_3 (offset 4) ssa_4 (offset 0) ssa_5 (offset 0) ssa_3 cannot become a child of ssa_5 in the interval tree, just like a source not in the same merge set, so we should not remove it and then reinsert it assuming that RA will make it a child of ssa_5. This fixes an RA validation error in Farming Simulater. Fixes: 0ffcb19b ("ir3: Rewrite register allocation") Part-of: <mesa/mesa!27497> (cherry picked from commit aeed5fd9)
Loading
Please register or sign in to comment