target/xtensa: fix break_dependency for repeated resources
break_dependency incorrectly handles the case of dependency on an opcode that references the same register multiple times. E.g. the following instruction is translated incorrectly: { or a2, a3, a3 ; or a3, a2, a2 } This happens because resource indices of both dependency graph nodes are incremented, and a copy for the second instance of the same register in the ending node is not done. Only increment resource index of the ending node of the dependency. Add test. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
62a172e6a7
commit
b9ec52188f
@ -1041,7 +1041,6 @@ static bool break_dependency(struct slot_prop *a,
|
||||
copy[n].resource = b->in[j].resource;
|
||||
copy[n].arg = b->arg + index;
|
||||
++n;
|
||||
++i;
|
||||
++j;
|
||||
rv = true;
|
||||
}
|
||||
|
@ -55,6 +55,23 @@ test sum
|
||||
.previous
|
||||
test_end
|
||||
|
||||
test rep_dependency
|
||||
|
||||
{
|
||||
movi a2, 1
|
||||
movi a3, 2
|
||||
nop
|
||||
}
|
||||
{
|
||||
or a2, a3, a3
|
||||
or a3, a2, a2
|
||||
nop
|
||||
}
|
||||
assert eqi, a2, 2
|
||||
assert eqi, a3, 1
|
||||
|
||||
test_end
|
||||
|
||||
#endif
|
||||
|
||||
test_suite_end
|
||||
|
Loading…
Reference in New Issue
Block a user