mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 07:58:07 +02:00
freedreno/ir3: relax restriction in grouping
Currently we were two restrictive, and would insert an output move in cases like: MOV OUT[0], IN[0].xyzw Loosen the restriction to allow the current instruction to appear in the neighbor list but only at it's current possition. Signed-off-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
parent
36c9ea6e79
commit
0831eb94b9
1 changed files with 5 additions and 3 deletions
|
|
@ -92,8 +92,10 @@ static struct group_ops instr_ops = { instr_get, instr_insert_mov };
|
|||
|
||||
/* verify that cur != instr, but cur is also not in instr's neighbor-list: */
|
||||
static bool
|
||||
in_neighbor_list(struct ir3_instruction *instr, struct ir3_instruction *cur)
|
||||
in_neighbor_list(struct ir3_instruction *instr, struct ir3_instruction *cur, int pos)
|
||||
{
|
||||
int idx = 0;
|
||||
|
||||
if (!instr)
|
||||
return false;
|
||||
|
||||
|
|
@ -101,7 +103,7 @@ in_neighbor_list(struct ir3_instruction *instr, struct ir3_instruction *cur)
|
|||
return true;
|
||||
|
||||
for (instr = ir3_neighbor_first(instr); instr; instr = instr->cp.right)
|
||||
if (instr == cur)
|
||||
if ((idx++ != pos) && (instr == cur))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -137,7 +139,7 @@ restart:
|
|||
|
||||
/* we also can't have an instr twice in the group: */
|
||||
for (j = i + 1; (j < n) && !conflict; j++)
|
||||
if (in_neighbor_list(ops->get(arr, j), instr))
|
||||
if (in_neighbor_list(ops->get(arr, j), instr, i))
|
||||
conflict = true;
|
||||
|
||||
if (conflict) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue