diff options
Diffstat (limited to 'compiler/optimizing/loop_optimization.cc')
-rw-r--r-- | compiler/optimizing/loop_optimization.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc index 3e1c42c8d9..9c4e9d25f7 100644 --- a/compiler/optimizing/loop_optimization.cc +++ b/compiler/optimizing/loop_optimization.cc @@ -1283,6 +1283,10 @@ bool HLoopOptimization::VectorizeDef(LoopNode* node, // (3) unit stride index, // (4) vectorizable right-hand-side value. uint64_t restrictions = kNone; + // Don't accept expressions that can throw. + if (instruction->CanThrow()) { + return false; + } if (instruction->IsArraySet()) { DataType::Type type = instruction->AsArraySet()->GetComponentType(); HInstruction* base = instruction->InputAt(0); @@ -1334,7 +1338,8 @@ bool HLoopOptimization::VectorizeDef(LoopNode* node, } // Otherwise accept only expressions with no effects outside the immediate loop-body. // Note that actual uses are inspected during right-hand-side tree traversal. - return !IsUsedOutsideLoop(node->loop_info, instruction) && !instruction->DoesAnyWrite(); + return !IsUsedOutsideLoop(node->loop_info, instruction) + && !instruction->DoesAnyWrite(); } bool HLoopOptimization::VectorizeUse(LoopNode* node, |