src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerDivRemNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerDivRemNode.java	Mon Mar 20 17:40:37 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerDivRemNode.java	Mon Mar 20 17:40:37 2017

*** 1,7 **** --- 1,7 ---- /* ! * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 48,62 **** --- 48,67 ---- UNSIGNED } private final Op op; private final Type type; + private final boolean canDeopt; protected IntegerDivRemNode(NodeClass<? extends IntegerDivRemNode> c, Stamp stamp, Op op, Type type, ValueNode x, ValueNode y) { super(c, stamp, x, y); this.op = op; this.type = type; + + // Assigning canDeopt during constructor, because it must never change during lifetime of + // the node. + this.canDeopt = ((IntegerStamp) getY().stamp()).contains(0); } public final Op getOp() { return op; }
*** 70,77 **** --- 75,82 ---- tool.getLowerer().lower(this, tool); } @Override public boolean canDeoptimize() { ! return !(getY().stamp() instanceof IntegerStamp) || ((IntegerStamp) getY().stamp()).contains(0); ! return canDeopt; } }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerDivRemNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File