< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/UseTrappingNullChecksPhase.java

Print this page

        

*** 33,42 **** --- 33,43 ---- import org.graalvm.compiler.nodes.AbstractBeginNode; import org.graalvm.compiler.nodes.AbstractDeoptimizeNode; import org.graalvm.compiler.nodes.AbstractEndNode; import org.graalvm.compiler.nodes.AbstractMergeNode; import org.graalvm.compiler.nodes.BeginNode; + import org.graalvm.compiler.nodes.CompressionNode; import org.graalvm.compiler.nodes.DeoptimizeNode; import org.graalvm.compiler.nodes.DeoptimizingFixedWithNextNode; import org.graalvm.compiler.nodes.DynamicDeoptimizeNode; import org.graalvm.compiler.nodes.FixedNode; import org.graalvm.compiler.nodes.IfNode;
*** 195,204 **** --- 196,213 ---- FixedAccessNode fixedAccessNode = (FixedAccessNode) nextNonTrapping; if (fixedAccessNode.canNullCheck()) { AddressNode address = fixedAccessNode.getAddress(); ValueNode base = address.getBase(); ValueNode index = address.getIndex(); + // allow for architectures which cannot fold an + // intervening uncompress out of the address chain + if (base != null && base instanceof CompressionNode) { + base = ((CompressionNode) base).getValue(); + } + if (index != null && index instanceof CompressionNode) { + index = ((CompressionNode) index).getValue(); + } if (((base == value && index == null) || (base == null && index == value)) && address.getMaxConstantDisplacement() < implicitNullCheckLimit) { // Opportunity for implicit null check as part of an existing read found! fixedAccessNode.setStateBefore(deopt.stateBefore()); fixedAccessNode.setNullCheck(true); deopt.graph().removeSplit(ifNode, nonTrappingContinuation);
< prev index next >