Refine where stores are visible in LSE even more
In aosp/2219242 we allowed LSE to run in catch blocks but when
setting the restrictions we were overly restrictive and we
weren't allowing LSE to run in catches where we should have e.g.
try {
...
} catch (ArrayIndexOutOfBoundsException expected) {
... LSE can now run here for some instructions ...
try {
...
} catch (ArrayIndexOutOfBoundsException expectedToo) {
...
}
}
If a catch block starts a try we would have something like
Nop
LoadException
ClearException
The `... LSE can now run here ...` instructions above
TryBoundary kind:entry
and it would have xhandlers. The instructions before the
TryBoundary kind:entry are not considered to be part of a try and
they behave like normal code would.
As a note if code that looks like:
try {
try {
...
} catch (ArrayIndexOutOfBoundsException expectedToo) {
... throwing instructions here ...
}
} catch (ArrayIndexOutOfBoundsException expected) {
...
}
the `throwing instructions here` will not be part of the catch block.
Instead, we would have
Nop
LoadException
ClearException
TryBoundary kind:entry
// Next block, within the TryBoundary and considered part of a try
The `... throwing instructions here ...` instructions
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Bug: 227283233
Change-Id: I6b0cf66bc710a9009514f59076ae3ef0bbc287b7
2 files changed