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