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