src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/Block.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/Block.java Thu Oct 31 14:23:06 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/Block.java Thu Oct 31 16:54:16 2019 -0700
@@ -260,10 +260,10 @@
LocationSet result = new LocationSet();
for (FixedNode node : this.getNodes()) {
if (node instanceof MemoryCheckpoint.Single) {
- LocationIdentity identity = ((MemoryCheckpoint.Single) node).getLocationIdentity();
+ LocationIdentity identity = ((MemoryCheckpoint.Single) node).getKilledLocationIdentity();
result.add(identity);
} else if (node instanceof MemoryCheckpoint.Multi) {
- for (LocationIdentity identity : ((MemoryCheckpoint.Multi) node).getLocationIdentities()) {
+ for (LocationIdentity identity : ((MemoryCheckpoint.Multi) node).getKilledLocationIdentities()) {
result.add(identity);
}
}
@@ -365,4 +365,26 @@
protected void setPostDominator(Block postdominator) {
this.postdominator = postdominator;
}
+
+ /**
+ * Checks whether {@code this} block is in the same loop or an outer loop of the block given as
+ * parameter.
+ */
+ public boolean isInSameOrOuterLoopOf(Block block) {
+
+ if (this.loop == null) {
+ // We are in no loop, so this holds true for every other block.
+ return true;
+ }
+
+ Loop<Block> l = block.loop;
+ while (l != null) {
+ if (l == this.loop) {
+ return true;
+ }
+ l = l.getParent();
+ }
+
+ return false;
+ }
}