Refactor vectorization data flow methods.

As part of vectorization some instructions are inserted outside
the loop (preheader, exit); in predicated mode they must be
assigned a governing predicate. Currently the corresponding
data flow analysis and generation methods have multiple patchy
'InPredicatedMode()' guarded actions for this.

This patch introduces vector_external_set_ to track such
instructions; in predicated mode it updates the governing
predicates separately using that set, making the methods
agnostic to vectorization type - predicated or traditional.

It also properly guards ArrayCharAt case for predicated mode
via vector restrictions and renames a few variables for
better readability.

Original author: Artem Serov <Artem.Serov@linaro.org>

Test: ./art/test/testrunner/testrunner.py --host --optimizing --jit
Test: ./art/test/testrunner/testrunner.py --target --optimizing --jit

Test: target tests on arm64 with SVE (for details see
      art/test/README.arm_fvp).

Change-Id: I7fba731e6f4e8dd5cd4490cdfc95cb4ae8b2e99e
3 files changed