Do not inline loops without exit edges
Fixes an issue with LinearOrder after inlining a function containing a
loop that has no exit edge. The failure is due to incorrect loop
information being computed for blocks that are not on a path to the
inlined function's return. They should not be considered part of the
caller's enclosing loop, but are today.
Bug: 32547653
Test: run-test --host 478-checker-inline-noreturn
Change-Id: I9694a1cb861430051c801d07f7ce29752332cba5
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index 0e449e3..7d74e47 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -769,6 +769,8 @@
bool DominatesAllBackEdges(HBasicBlock* block);
+ bool HasExitEdge() const;
+
private:
// Internal recursive implementation of `Populate`.
void PopulateRecursive(HBasicBlock* block);