diff options
author | Artem Serov <artem.serov@linaro.org> | 2019-12-04 21:10:23 +0000 |
---|---|---|
committer | Ulyana Trafimovich <skvadrik@google.com> | 2021-02-04 06:16:33 +0000 |
commit | 8ba4de1a5684686447a578bdc425321fd3bccca6 (patch) | |
tree | 20c24450b24950266ccc235306e3ad2109c57497 /compiler/optimizing/loop_analysis.h | |
parent | 32bf6d39bc020cacfc655ce60630f4a0da3b45cf (diff) |
ART: Implement predicated SIMD vectorization.
This CL brings support for predicated execution for
auto-vectorizer and implements arm64 SVE vector backend.
This version passes all the VIXL simulator-runnable tests in
SVE mode with checker off (as all VecOp CHECKs need to be
adjusted for an extra input) and all tests in NEON mode.
Test: art SIMD tests on VIXL simulator.
Test: art tests on FVP (steps in test/README.arm_fvp.md)
Change-Id: Ib78bde31a15e6713d875d6668ad4458f5519605f
Diffstat (limited to 'compiler/optimizing/loop_analysis.h')
-rw-r--r-- | compiler/optimizing/loop_analysis.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/optimizing/loop_analysis.h b/compiler/optimizing/loop_analysis.h index 57509ee410..fbf1516f64 100644 --- a/compiler/optimizing/loop_analysis.h +++ b/compiler/optimizing/loop_analysis.h @@ -21,6 +21,7 @@ namespace art { +class CodeGenerator; class InductionVarRange; class LoopAnalysis; @@ -132,11 +133,12 @@ class LoopAnalysis : public ValueObject { // class ArchNoOptsLoopHelper : public ArenaObject<kArenaAllocOptimization> { public: + explicit ArchNoOptsLoopHelper(const CodeGenerator& codegen) : codegen_(codegen) {} virtual ~ArchNoOptsLoopHelper() {} // Creates an instance of specialised helper for the target or default helper if the target // doesn't support loop peeling and unrolling. - static ArchNoOptsLoopHelper* Create(InstructionSet isa, ArenaAllocator* allocator); + static ArchNoOptsLoopHelper* Create(const CodeGenerator& codegen, ArenaAllocator* allocator); // Returns whether the loop is not beneficial for loop peeling/unrolling. // @@ -176,6 +178,9 @@ class ArchNoOptsLoopHelper : public ArenaObject<kArenaAllocOptimization> { uint32_t vector_length ATTRIBUTE_UNUSED) const { return LoopAnalysisInfo::kNoUnrollingFactor; } + + protected: + const CodeGenerator& codegen_; }; } // namespace art |