mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 18:44:58 -06:00
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
2 changed files with 17 additions and 1 deletions
|
@ -1041,7 +1041,6 @@ static bool break_dependency(struct slot_prop *a,
|
||||||
copy[n].resource = b->in[j].resource;
|
copy[n].resource = b->in[j].resource;
|
||||||
copy[n].arg = b->arg + index;
|
copy[n].arg = b->arg + index;
|
||||||
++n;
|
++n;
|
||||||
++i;
|
|
||||||
++j;
|
++j;
|
||||||
rv = true;
|
rv = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,23 @@ test sum
|
||||||
.previous
|
.previous
|
||||||
test_end
|
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
|
#endif
|
||||||
|
|
||||||
test_suite_end
|
test_suite_end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue