Mercurial > hg > graal-compiler
changeset 23137:23c58fe0a582
improved readability of test for which instanceof usages can be materialized
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 04 Dec 2015 14:03:02 +0100 |
parents | 12b57821cc0b |
children | 07f7a8d2de57 |
files | graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java |
diffstat | 1 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java Fri Dec 04 14:02:31 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java Fri Dec 04 14:03:02 2015 +0100 @@ -110,8 +110,7 @@ */ protected InstanceOfUsageReplacer createReplacer(FloatingNode instanceOf, Instantiation instantiation, Node usage, final StructuredGraph graph) { InstanceOfUsageReplacer replacer; - if ((usage instanceof ConditionalNode && !(((ConditionalNode) usage).trueValue().isConstant() && ((ConditionalNode) usage).falseValue().isConstant())) || usage instanceof IfNode || - usage instanceof FixedGuardNode || usage instanceof ShortCircuitOrNode || usage instanceof ConditionAnchorNode) { + if (!canMaterialize(usage)) { ValueNode trueValue = ConstantNode.forInt(1, graph); ValueNode falseValue = ConstantNode.forInt(0, graph); if (instantiation.isInitialized() && (trueValue != instantiation.trueValue || falseValue != instantiation.falseValue)) { @@ -132,6 +131,20 @@ } /** + * Determines if an {@code instanceof} usage can be materialized. + */ + protected boolean canMaterialize(Node usage) { + if (usage instanceof ConditionalNode) { + ConditionalNode cn = (ConditionalNode) usage; + return cn.trueValue().isConstant() && cn.falseValue().isConstant(); + } + if (usage instanceof IfNode || usage instanceof FixedGuardNode || usage instanceof ShortCircuitOrNode || usage instanceof ConditionAnchorNode) { + return false; + } + return true; + } + + /** * The result of instantiating an instanceof snippet. This enables a snippet instantiation to be * re-used which reduces compile time and produces better code. */