summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_sinking.cc
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2018-01-16 20:20:16 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2018-01-16 20:20:16 +0000
commit66bed3b033a2864e7488b93ab1766985e416b552 (patch)
tree793f93ebdcf12406c9fb1cf3d0d6f024cdf0ca9b /compiler/optimizing/code_sinking.cc
parent0e1592341e0ff3eaceb7cdb913a5c30e9fab48a8 (diff)
parenta8b8e9b12a9740d71cff2fa65d47825b74f72c37 (diff)
Merge "Improve code sinking near "always throwing" method calls"
Diffstat (limited to 'compiler/optimizing/code_sinking.cc')
-rw-r--r--compiler/optimizing/code_sinking.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/optimizing/code_sinking.cc b/compiler/optimizing/code_sinking.cc
index d8ebac95a8..f4760d661f 100644
--- a/compiler/optimizing/code_sinking.cc
+++ b/compiler/optimizing/code_sinking.cc
@@ -34,7 +34,9 @@ void CodeSinking::Run() {
// TODO(ngeoffray): we do not profile branches yet, so use throw instructions
// as an indicator of an uncommon branch.
for (HBasicBlock* exit_predecessor : exit->GetPredecessors()) {
- if (exit_predecessor->GetLastInstruction()->IsThrow()) {
+ HInstruction* last = exit_predecessor->GetLastInstruction();
+ // Any predecessor of the exit that does not return, throws an exception.
+ if (!last->IsReturn() && !last->IsReturnVoid()) {
SinkCodeToUncommonBranch(exit_predecessor);
}
}