< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/CompareNode.java

Print this page
rev 52509 : [mq]: graal

*** 1,7 **** /* ! * Copyright (c) 2011, 2016, 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. --- 1,7 ---- /* ! * Copyright (c) 2011, 2018, 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.
*** 134,153 **** ConvertNode convertY = (ConvertNode) forY; if (convertX.preservesOrder(condition) && convertY.preservesOrder(condition) && convertX.getValue().stamp(view).isCompatible(convertY.getValue().stamp(view))) { boolean supported = true; if (convertX.getValue().stamp(view) instanceof IntegerStamp) { IntegerStamp intStamp = (IntegerStamp) convertX.getValue().stamp(view); ! supported = smallestCompareWidth != null && intStamp.getBits() >= smallestCompareWidth; } if (supported) { ! boolean multiUsage = (convertX.asNode().hasMoreThanOneUsage() || convertY.asNode().hasMoreThanOneUsage()); ! if ((forX instanceof ZeroExtendNode || forX instanceof SignExtendNode) && multiUsage) { ! // Do not perform for zero or sign extend if there are multiple usages ! // of the value. return null; } return duplicateModified(convertX.getValue(), convertY.getValue(), unorderedIsTrue, view); } } } return null; --- 134,176 ---- ConvertNode convertY = (ConvertNode) forY; if (convertX.preservesOrder(condition) && convertY.preservesOrder(condition) && convertX.getValue().stamp(view).isCompatible(convertY.getValue().stamp(view))) { boolean supported = true; if (convertX.getValue().stamp(view) instanceof IntegerStamp) { IntegerStamp intStamp = (IntegerStamp) convertX.getValue().stamp(view); ! boolean isConversionCompatible = convertX.getClass() == convertY.getClass(); ! supported = smallestCompareWidth != null && intStamp.getBits() >= smallestCompareWidth && isConversionCompatible; } if (supported) { ! ! ValueNode xValue = convertX.getValue(); ! ValueNode yValue = convertY.getValue(); ! ! if (forX instanceof ZeroExtendNode || forX instanceof SignExtendNode) { ! ! int introducedUsages = 0; ! int eliminatedNodes = 0; ! ! if (convertX.asNode().hasExactlyOneUsage()) { ! eliminatedNodes++; ! } else if (xValue.hasExactlyOneUsage()) { ! introducedUsages++; ! } ! ! if (convertY.asNode().hasExactlyOneUsage()) { ! eliminatedNodes++; ! } else if (yValue.hasExactlyOneUsage()) { ! introducedUsages++; ! } ! ! if (introducedUsages > eliminatedNodes) { ! // Only perform the optimization if there is ! // a good trade-off between introduced new usages and ! // eliminated nodes. return null; } + } return duplicateModified(convertX.getValue(), convertY.getValue(), unorderedIsTrue, view); } } } return null;
*** 173,183 **** } boolean supported = true; if (convert.getValue().stamp(view) instanceof IntegerStamp) { IntegerStamp intStamp = (IntegerStamp) convert.getValue().stamp(view); ! supported = smallestCompareWidth != null && intStamp.getBits() > smallestCompareWidth; } if (supported) { ConstantNode newConstant = canonicalConvertConstant(constantReflection, metaAccess, options, condition, convert, constant, view); if (newConstant != null) { --- 196,206 ---- } boolean supported = true; if (convert.getValue().stamp(view) instanceof IntegerStamp) { IntegerStamp intStamp = (IntegerStamp) convert.getValue().stamp(view); ! supported = smallestCompareWidth != null && intStamp.getBits() >= smallestCompareWidth; } if (supported) { ConstantNode newConstant = canonicalConvertConstant(constantReflection, metaAccess, options, condition, convert, constant, view); if (newConstant != null) {
< prev index next >