Mercurial > hg > graal-compiler
changeset 22824:7efb735091c5
Store complete canSafepoint status in LoopEndNode, propagate value from LoopBeginNode eagerly
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Wed, 14 Oct 2015 15:18:44 -0700 |
parents | ea1f44a4c0c9 |
children | c7753ef3467e |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java |
diffstat | 2 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java Wed Oct 14 14:25:43 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java Wed Oct 14 15:18:44 2015 -0700 @@ -61,7 +61,12 @@ /** Disables safepoint for the whole loop, i.e., for all {@link LoopEndNode loop ends}. */ public void disableSafepoint() { + /* Store flag locally in case new loop ends are created later on. */ this.canSafepoint = false; + /* Propagate flag to all existing loop ends. */ + for (LoopEndNode loopEnd : loopEnds()) { + loopEnd.disableSafepoint(); + } } public double loopFrequency() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java Wed Oct 14 14:25:43 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java Wed Oct 14 15:18:44 2015 -0700 @@ -48,7 +48,7 @@ assert idx >= 0; this.endIndex = idx; this.loopBegin = begin; - this.canSafepoint = true; + this.canSafepoint = begin.canSafepoint; } @Override @@ -74,7 +74,8 @@ } public boolean canSafepoint() { - return canSafepoint && loopBegin.canSafepoint; + assert !canSafepoint || loopBegin.canSafepoint : "When safepoints are disabled for loop begin, safepoints must be disabled for all loop ends"; + return canSafepoint; } @Override