From 8f7c41044bdb7a36913444a3437bf2b946f7efe9 Mon Sep 17 00:00:00 2001 From: Artem Serov Date: Wed, 21 Jun 2017 11:21:37 +0100 Subject: ARM: ART Vectorizer (64-bit vectors). Basic vectorization support with 64-bit vector length on ARM 32-bit platforms (128-bit vectors require massive changes in register allocator). Test: test-art-target, test-art-host Change-Id: I1d740146c3f00170fc033ae5fd69d59321ddcbf4 --- compiler/optimizing/loop_optimization.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'compiler/optimizing/loop_optimization.cc') diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc index 9c8a632d40..bfb23f1bef 100644 --- a/compiler/optimizing/loop_optimization.cc +++ b/compiler/optimizing/loop_optimization.cc @@ -1021,6 +1021,23 @@ bool HLoopOptimization::TrySetVectorType(Primitive::Type type, uint64_t* restric switch (compiler_driver_->GetInstructionSet()) { case kArm: case kThumb2: + // Allow vectorization for all ARM devices, because Android assumes that + // ARM 32-bit always supports advanced SIMD. + switch (type) { + case Primitive::kPrimBoolean: + case Primitive::kPrimByte: + *restrictions |= kNoDiv; + return TrySetVectorLength(8); + case Primitive::kPrimChar: + case Primitive::kPrimShort: + *restrictions |= kNoDiv | kNoStringCharAt; + return TrySetVectorLength(4); + case Primitive::kPrimInt: + *restrictions |= kNoDiv; + return TrySetVectorLength(2); + default: + break; + } return false; case kArm64: // Allow vectorization for all ARM devices, because Android assumes that -- cgit v1.2.3-59-g8ed1b