summaryrefslogtreecommitdiff
path: root/compiler/optimizing/loop_analysis.h
diff options
context:
space:
mode:
authorArtem Serov <artem.serov@linaro.org>2019-12-04 21:10:23 +0000
committerUlyana Trafimovich <skvadrik@google.com>2021-02-04 06:16:33 +0000
commit8ba4de1a5684686447a578bdc425321fd3bccca6 (patch)
tree20c24450b24950266ccc235306e3ad2109c57497 /compiler/optimizing/loop_analysis.h
parent32bf6d39bc020cacfc655ce60630f4a0da3b45cf (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.h7
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