src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64FloatConvertNode.java
changeset 58533 46b0b7fe255c
parent 52910 583fd71c47d6
equal deleted inserted replaced
58532:b4f2e13d20ea 58533:46b0b7fe255c
     1 /*
     1 /*
     2  * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    24 
    24 
    25 package org.graalvm.compiler.replacements.amd64;
    25 package org.graalvm.compiler.replacements.amd64;
    26 
    26 
    27 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_8;
    27 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_8;
    28 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_1;
    28 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_1;
       
    29 import static org.graalvm.compiler.nodes.calc.BinaryArithmeticNode.getArithmeticOpTable;
    29 
    30 
    30 import jdk.vm.ci.meta.JavaConstant;
       
    31 import org.graalvm.compiler.core.common.calc.FloatConvert;
    31 import org.graalvm.compiler.core.common.calc.FloatConvert;
       
    32 import org.graalvm.compiler.core.common.type.ArithmeticOpTable;
    32 import org.graalvm.compiler.core.common.type.ArithmeticOpTable.FloatConvertOp;
    33 import org.graalvm.compiler.core.common.type.ArithmeticOpTable.FloatConvertOp;
       
    34 import org.graalvm.compiler.core.common.type.ArithmeticOpTable.UnaryOp;
    33 import org.graalvm.compiler.core.common.type.IntegerStamp;
    35 import org.graalvm.compiler.core.common.type.IntegerStamp;
    34 import org.graalvm.compiler.core.common.type.Stamp;
    36 import org.graalvm.compiler.core.common.type.Stamp;
    35 import org.graalvm.compiler.core.common.type.StampFactory;
    37 import org.graalvm.compiler.core.common.type.StampFactory;
    36 import org.graalvm.compiler.graph.NodeClass;
    38 import org.graalvm.compiler.graph.NodeClass;
    37 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
    39 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
    40 import org.graalvm.compiler.nodes.ValueNode;
    42 import org.graalvm.compiler.nodes.ValueNode;
    41 import org.graalvm.compiler.nodes.calc.FloatConvertNode;
    43 import org.graalvm.compiler.nodes.calc.FloatConvertNode;
    42 import org.graalvm.compiler.nodes.calc.UnaryArithmeticNode;
    44 import org.graalvm.compiler.nodes.calc.UnaryArithmeticNode;
    43 import org.graalvm.compiler.nodes.spi.ArithmeticLIRLowerable;
    45 import org.graalvm.compiler.nodes.spi.ArithmeticLIRLowerable;
    44 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
    46 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
       
    47 
       
    48 import jdk.vm.ci.meta.JavaConstant;
    45 
    49 
    46 /**
    50 /**
    47  * This node has the semantics of the AMD64 floating point conversions. It is used in the lowering
    51  * This node has the semantics of the AMD64 floating point conversions. It is used in the lowering
    48  * of the {@link FloatConvertNode} which, on AMD64 needs a {@link AMD64FloatConvertNode} plus some
    52  * of the {@link FloatConvertNode} which, on AMD64 needs a {@link AMD64FloatConvertNode} plus some
    49  * fixup code that handles the corner cases that differ between AMD64 and Java.
    53  * fixup code that handles the corner cases that differ between AMD64 and Java.
    56     public static final NodeClass<AMD64FloatConvertNode> TYPE = NodeClass.create(AMD64FloatConvertNode.class);
    60     public static final NodeClass<AMD64FloatConvertNode> TYPE = NodeClass.create(AMD64FloatConvertNode.class);
    57 
    61 
    58     protected final FloatConvert op;
    62     protected final FloatConvert op;
    59 
    63 
    60     public AMD64FloatConvertNode(FloatConvert op, ValueNode value) {
    64     public AMD64FloatConvertNode(FloatConvert op, ValueNode value) {
    61         super(TYPE, table -> table.getFloatConvert(op), value);
    65         super(TYPE, getArithmeticOpTable(value).getFloatConvert(op), value);
    62         this.op = op;
    66         this.op = op;
    63         this.stamp = this.stamp.meet(createInexactCaseStamp());
    67         this.stamp = this.stamp.meet(createInexactCaseStamp());
       
    68     }
       
    69 
       
    70     @Override
       
    71     protected UnaryOp<FloatConvertOp> getOp(ArithmeticOpTable table) {
       
    72         return table.getFloatConvert(op);
    64     }
    73     }
    65 
    74 
    66     @Override
    75     @Override
    67     public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) {
    76     public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) {
    68         // nothing to do
    77         // nothing to do