diff options
author | 2021-12-14 23:16:21 +0000 | |
---|---|---|
committer | 2023-07-12 11:02:57 +0000 | |
commit | 0b284aaa0f2b7c89591ac494e71af40adc8cf15d (patch) | |
tree | ba38e4ad5152bfaeeeb26e4185b7614c7f23e229 /compiler/optimizing/nodes.cc | |
parent | 3bf7e912091f266a01c5a4fe09b082bea1c383f2 (diff) |
Support autovectorization of diamond loops.
This CL enables predicated autovectorization of loops with
control flow, currently only for simple diamond pattern ones:
header------------------+
| |
diamond_hif |
/ \ |
diamond_true diamond_false |
\ / |
back_edge |
| |
+---------------------+
Original author: Artem Serov <Artem.Serov@linaro.org>
Test: ./art/test.py --host --optimizing --jit
Test: ./art/test.py --target --optimizing --jit
Test: 661-checker-simd-cf-loops.
Test: target tests on arm64 with SVE (for details see
art/test/README.arm_fvp).
Change-Id: I8dbc266278b4ab074b831d6c224f02024030cc8a
Diffstat (limited to 'compiler/optimizing/nodes.cc')
-rw-r--r-- | compiler/optimizing/nodes.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc index 83b58763a4..9caa766858 100644 --- a/compiler/optimizing/nodes.cc +++ b/compiler/optimizing/nodes.cc @@ -2797,8 +2797,11 @@ HInstruction* HGraph::InlineInto(HGraph* outer_graph, HInvoke* invoke) { if (HasMonitorOperations()) { outer_graph->SetHasMonitorOperations(true); } - if (HasSIMD()) { - outer_graph->SetHasSIMD(true); + if (HasTraditionalSIMD()) { + outer_graph->SetHasTraditionalSIMD(true); + } + if (HasPredicatedSIMD()) { + outer_graph->SetHasPredicatedSIMD(true); } if (HasAlwaysThrowingInvokes()) { outer_graph->SetHasAlwaysThrowingInvokes(true); @@ -3125,6 +3128,8 @@ void HGraph::TransformLoopHeaderForBCE(HBasicBlock* header) { new_pre_header, old_pre_header, /* replace_if_back_edge= */ false); } +// Creates a new two-basic-block loop and inserts it between original loop header and +// original loop exit; also adjusts dominators, post order and new LoopInformation. HBasicBlock* HGraph::TransformLoopForVectorization(HBasicBlock* header, HBasicBlock* body, HBasicBlock* exit) { |