< prev index next >

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

Print this page
rev 52509 : [mq]: graal


  31 import org.graalvm.compiler.graph.NodeClass;
  32 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
  33 import org.graalvm.compiler.lir.gen.ArithmeticLIRGeneratorTool;
  34 import org.graalvm.compiler.nodeinfo.NodeInfo;
  35 import org.graalvm.compiler.nodes.ConstantNode;
  36 import org.graalvm.compiler.nodes.NodeView;
  37 import org.graalvm.compiler.nodes.ValueNode;
  38 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
  39 
  40 import jdk.vm.ci.code.CodeUtil;
  41 
  42 @NodeInfo(shortName = ">>")
  43 public final class RightShiftNode extends ShiftNode<Shr> {
  44 
  45     public static final NodeClass<RightShiftNode> TYPE = NodeClass.create(RightShiftNode.class);
  46 
  47     public RightShiftNode(ValueNode x, ValueNode y) {
  48         super(TYPE, ArithmeticOpTable::getShr, x, y);
  49     }
  50 







  51     public static ValueNode create(ValueNode x, ValueNode y, NodeView view) {
  52         ArithmeticOpTable.ShiftOp<Shr> op = ArithmeticOpTable.forStamp(x.stamp(view)).getShr();
  53         Stamp stamp = op.foldStamp(x.stamp(view), (IntegerStamp) y.stamp(view));
  54         ValueNode value = ShiftNode.canonical(op, stamp, x, y, view);
  55         if (value != null) {
  56             return value;
  57         }
  58 
  59         return canonical(null, op, stamp, x, y, view);
  60     }
  61 
  62     @Override
  63     public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
  64         NodeView view = NodeView.from(tool);
  65         ValueNode ret = super.canonical(tool, forX, forY);
  66         if (ret != this) {
  67             return ret;
  68         }
  69 
  70         return canonical(this, getArithmeticOp(), stamp(view), forX, forY, view);




  31 import org.graalvm.compiler.graph.NodeClass;
  32 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
  33 import org.graalvm.compiler.lir.gen.ArithmeticLIRGeneratorTool;
  34 import org.graalvm.compiler.nodeinfo.NodeInfo;
  35 import org.graalvm.compiler.nodes.ConstantNode;
  36 import org.graalvm.compiler.nodes.NodeView;
  37 import org.graalvm.compiler.nodes.ValueNode;
  38 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
  39 
  40 import jdk.vm.ci.code.CodeUtil;
  41 
  42 @NodeInfo(shortName = ">>")
  43 public final class RightShiftNode extends ShiftNode<Shr> {
  44 
  45     public static final NodeClass<RightShiftNode> TYPE = NodeClass.create(RightShiftNode.class);
  46 
  47     public RightShiftNode(ValueNode x, ValueNode y) {
  48         super(TYPE, ArithmeticOpTable::getShr, x, y);
  49     }
  50 
  51     public static ValueNode create(ValueNode x, int y, NodeView view) {
  52         if (y == 0) {
  53             return x;
  54         }
  55         return create(x, ConstantNode.forInt(y), view);
  56     }
  57 
  58     public static ValueNode create(ValueNode x, ValueNode y, NodeView view) {
  59         ArithmeticOpTable.ShiftOp<Shr> op = ArithmeticOpTable.forStamp(x.stamp(view)).getShr();
  60         Stamp stamp = op.foldStamp(x.stamp(view), (IntegerStamp) y.stamp(view));
  61         ValueNode value = ShiftNode.canonical(op, stamp, x, y, view);
  62         if (value != null) {
  63             return value;
  64         }
  65 
  66         return canonical(null, op, stamp, x, y, view);
  67     }
  68 
  69     @Override
  70     public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
  71         NodeView view = NodeView.from(tool);
  72         ValueNode ret = super.canonical(tool, forX, forY);
  73         if (ret != this) {
  74             return ret;
  75         }
  76 
  77         return canonical(this, getArithmeticOp(), stamp(view), forX, forY, view);


< prev index next >