< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/NodeMatchRules.java

Print this page
rev 52509 : [mq]: graal2


  30 import org.graalvm.compiler.lir.LIRInstruction;
  31 import org.graalvm.compiler.lir.LabelRef;
  32 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
  33 import org.graalvm.compiler.nodes.ConstantNode;
  34 import org.graalvm.compiler.nodes.DeoptimizingNode;
  35 import org.graalvm.compiler.nodes.FixedNode;
  36 import org.graalvm.compiler.nodes.IfNode;
  37 import org.graalvm.compiler.nodes.PiNode;
  38 import org.graalvm.compiler.nodes.calc.AddNode;
  39 import org.graalvm.compiler.nodes.calc.AndNode;
  40 import org.graalvm.compiler.nodes.calc.FloatConvertNode;
  41 import org.graalvm.compiler.nodes.calc.FloatEqualsNode;
  42 import org.graalvm.compiler.nodes.calc.FloatLessThanNode;
  43 import org.graalvm.compiler.nodes.calc.IntegerBelowNode;
  44 import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
  45 import org.graalvm.compiler.nodes.calc.IntegerLessThanNode;
  46 import org.graalvm.compiler.nodes.calc.IntegerTestNode;
  47 import org.graalvm.compiler.nodes.calc.LeftShiftNode;
  48 import org.graalvm.compiler.nodes.calc.MulNode;
  49 import org.graalvm.compiler.nodes.calc.NarrowNode;


  50 import org.graalvm.compiler.nodes.calc.ObjectEqualsNode;
  51 import org.graalvm.compiler.nodes.calc.OrNode;
  52 import org.graalvm.compiler.nodes.calc.PointerEqualsNode;
  53 import org.graalvm.compiler.nodes.calc.ReinterpretNode;

  54 import org.graalvm.compiler.nodes.calc.SignExtendNode;
  55 import org.graalvm.compiler.nodes.calc.SubNode;
  56 import org.graalvm.compiler.nodes.calc.UnsignedRightShiftNode;
  57 import org.graalvm.compiler.nodes.calc.XorNode;
  58 import org.graalvm.compiler.nodes.calc.ZeroExtendNode;
  59 import org.graalvm.compiler.nodes.java.LogicCompareAndSwapNode;
  60 import org.graalvm.compiler.nodes.java.ValueCompareAndSwapNode;
  61 import org.graalvm.compiler.nodes.memory.FloatingReadNode;
  62 import org.graalvm.compiler.nodes.memory.ReadNode;
  63 import org.graalvm.compiler.nodes.memory.WriteNode;
  64 
  65 import jdk.vm.ci.meta.Value;
  66 
  67 @MatchableNode(nodeClass = ConstantNode.class, shareable = true)
  68 @MatchableNode(nodeClass = FloatConvertNode.class, inputs = {"value"})
  69 @MatchableNode(nodeClass = FloatingReadNode.class, inputs = {"address"})
  70 @MatchableNode(nodeClass = IfNode.class, inputs = {"condition"})
  71 @MatchableNode(nodeClass = SubNode.class, inputs = {"x", "y"})
  72 @MatchableNode(nodeClass = LeftShiftNode.class, inputs = {"x", "y"})
  73 @MatchableNode(nodeClass = NarrowNode.class, inputs = {"value"})
  74 @MatchableNode(nodeClass = ReadNode.class, inputs = {"address"})
  75 @MatchableNode(nodeClass = ReinterpretNode.class, inputs = {"value"})
  76 @MatchableNode(nodeClass = SignExtendNode.class, inputs = {"value"})
  77 @MatchableNode(nodeClass = UnsignedRightShiftNode.class, inputs = {"x", "y"})
  78 @MatchableNode(nodeClass = WriteNode.class, inputs = {"address", "value"})
  79 @MatchableNode(nodeClass = ZeroExtendNode.class, inputs = {"value"})
  80 @MatchableNode(nodeClass = AndNode.class, inputs = {"x", "y"}, commutative = true)


  81 @MatchableNode(nodeClass = FloatEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  82 @MatchableNode(nodeClass = FloatLessThanNode.class, inputs = {"x", "y"}, commutative = true)
  83 @MatchableNode(nodeClass = PointerEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  84 @MatchableNode(nodeClass = AddNode.class, inputs = {"x", "y"}, commutative = true)
  85 @MatchableNode(nodeClass = IntegerBelowNode.class, inputs = {"x", "y"}, commutative = true)
  86 @MatchableNode(nodeClass = IntegerEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  87 @MatchableNode(nodeClass = IntegerLessThanNode.class, inputs = {"x", "y"}, commutative = true)
  88 @MatchableNode(nodeClass = MulNode.class, inputs = {"x", "y"}, commutative = true)
  89 @MatchableNode(nodeClass = IntegerTestNode.class, inputs = {"x", "y"}, commutative = true)
  90 @MatchableNode(nodeClass = ObjectEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  91 @MatchableNode(nodeClass = OrNode.class, inputs = {"x", "y"}, commutative = true)
  92 @MatchableNode(nodeClass = XorNode.class, inputs = {"x", "y"}, commutative = true)
  93 @MatchableNode(nodeClass = PiNode.class, inputs = {"object"})
  94 @MatchableNode(nodeClass = LogicCompareAndSwapNode.class, inputs = {"address", "expectedValue", "newValue"})
  95 @MatchableNode(nodeClass = ValueCompareAndSwapNode.class, inputs = {"address", "expectedValue", "newValue"})

  96 public abstract class NodeMatchRules {
  97 
  98     NodeLIRBuilder lirBuilder;
  99     protected final LIRGeneratorTool gen;
 100 
 101     protected NodeMatchRules(LIRGeneratorTool gen) {
 102         this.gen = gen;
 103     }
 104 
 105     protected LIRGeneratorTool getLIRGeneratorTool() {
 106         return gen;
 107     }
 108 
 109     /*
 110      * For now we do not want to expose the full lirBuilder to subclasses, so we delegate the few
 111      * methods that are actually needed. If the list grows too long, exposing lirBuilder might be
 112      * the better approach.
 113      */
 114 
 115     protected final Value operand(Node node) {


  30 import org.graalvm.compiler.lir.LIRInstruction;
  31 import org.graalvm.compiler.lir.LabelRef;
  32 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
  33 import org.graalvm.compiler.nodes.ConstantNode;
  34 import org.graalvm.compiler.nodes.DeoptimizingNode;
  35 import org.graalvm.compiler.nodes.FixedNode;
  36 import org.graalvm.compiler.nodes.IfNode;
  37 import org.graalvm.compiler.nodes.PiNode;
  38 import org.graalvm.compiler.nodes.calc.AddNode;
  39 import org.graalvm.compiler.nodes.calc.AndNode;
  40 import org.graalvm.compiler.nodes.calc.FloatConvertNode;
  41 import org.graalvm.compiler.nodes.calc.FloatEqualsNode;
  42 import org.graalvm.compiler.nodes.calc.FloatLessThanNode;
  43 import org.graalvm.compiler.nodes.calc.IntegerBelowNode;
  44 import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
  45 import org.graalvm.compiler.nodes.calc.IntegerLessThanNode;
  46 import org.graalvm.compiler.nodes.calc.IntegerTestNode;
  47 import org.graalvm.compiler.nodes.calc.LeftShiftNode;
  48 import org.graalvm.compiler.nodes.calc.MulNode;
  49 import org.graalvm.compiler.nodes.calc.NarrowNode;
  50 import org.graalvm.compiler.nodes.calc.NegateNode;
  51 import org.graalvm.compiler.nodes.calc.NotNode;
  52 import org.graalvm.compiler.nodes.calc.ObjectEqualsNode;
  53 import org.graalvm.compiler.nodes.calc.OrNode;
  54 import org.graalvm.compiler.nodes.calc.PointerEqualsNode;
  55 import org.graalvm.compiler.nodes.calc.ReinterpretNode;
  56 import org.graalvm.compiler.nodes.calc.RightShiftNode;
  57 import org.graalvm.compiler.nodes.calc.SignExtendNode;
  58 import org.graalvm.compiler.nodes.calc.SubNode;
  59 import org.graalvm.compiler.nodes.calc.UnsignedRightShiftNode;
  60 import org.graalvm.compiler.nodes.calc.XorNode;
  61 import org.graalvm.compiler.nodes.calc.ZeroExtendNode;
  62 import org.graalvm.compiler.nodes.java.LogicCompareAndSwapNode;
  63 import org.graalvm.compiler.nodes.java.ValueCompareAndSwapNode;
  64 import org.graalvm.compiler.nodes.memory.FloatingReadNode;
  65 import org.graalvm.compiler.nodes.memory.ReadNode;
  66 import org.graalvm.compiler.nodes.memory.WriteNode;
  67 
  68 import jdk.vm.ci.meta.Value;
  69 
  70 @MatchableNode(nodeClass = ConstantNode.class, shareable = true)
  71 @MatchableNode(nodeClass = FloatConvertNode.class, inputs = {"value"})
  72 @MatchableNode(nodeClass = FloatingReadNode.class, inputs = {"address"})
  73 @MatchableNode(nodeClass = IfNode.class, inputs = {"condition"})
  74 @MatchableNode(nodeClass = SubNode.class, inputs = {"x", "y"})
  75 @MatchableNode(nodeClass = LeftShiftNode.class, inputs = {"x", "y"})
  76 @MatchableNode(nodeClass = NarrowNode.class, inputs = {"value"})
  77 @MatchableNode(nodeClass = ReadNode.class, inputs = {"address"})
  78 @MatchableNode(nodeClass = ReinterpretNode.class, inputs = {"value"})
  79 @MatchableNode(nodeClass = SignExtendNode.class, inputs = {"value"})
  80 @MatchableNode(nodeClass = UnsignedRightShiftNode.class, inputs = {"x", "y"})
  81 @MatchableNode(nodeClass = WriteNode.class, inputs = {"address", "value"})
  82 @MatchableNode(nodeClass = ZeroExtendNode.class, inputs = {"value"})
  83 @MatchableNode(nodeClass = AndNode.class, inputs = {"x", "y"}, commutative = true)
  84 @MatchableNode(nodeClass = NegateNode.class, inputs = {"value"})
  85 @MatchableNode(nodeClass = NotNode.class, inputs = {"value"})
  86 @MatchableNode(nodeClass = FloatEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  87 @MatchableNode(nodeClass = FloatLessThanNode.class, inputs = {"x", "y"}, commutative = true)
  88 @MatchableNode(nodeClass = PointerEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  89 @MatchableNode(nodeClass = AddNode.class, inputs = {"x", "y"}, commutative = true)
  90 @MatchableNode(nodeClass = IntegerBelowNode.class, inputs = {"x", "y"}, commutative = true)
  91 @MatchableNode(nodeClass = IntegerEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  92 @MatchableNode(nodeClass = IntegerLessThanNode.class, inputs = {"x", "y"}, commutative = true)
  93 @MatchableNode(nodeClass = MulNode.class, inputs = {"x", "y"}, commutative = true)
  94 @MatchableNode(nodeClass = IntegerTestNode.class, inputs = {"x", "y"}, commutative = true)
  95 @MatchableNode(nodeClass = ObjectEqualsNode.class, inputs = {"x", "y"}, commutative = true)
  96 @MatchableNode(nodeClass = OrNode.class, inputs = {"x", "y"}, commutative = true)
  97 @MatchableNode(nodeClass = XorNode.class, inputs = {"x", "y"}, commutative = true)
  98 @MatchableNode(nodeClass = PiNode.class, inputs = {"object"})
  99 @MatchableNode(nodeClass = LogicCompareAndSwapNode.class, inputs = {"address", "expectedValue", "newValue"})
 100 @MatchableNode(nodeClass = ValueCompareAndSwapNode.class, inputs = {"address", "expectedValue", "newValue"})
 101 @MatchableNode(nodeClass = RightShiftNode.class, inputs = {"x", "y"})
 102 public abstract class NodeMatchRules {
 103 
 104     NodeLIRBuilder lirBuilder;
 105     protected final LIRGeneratorTool gen;
 106 
 107     protected NodeMatchRules(LIRGeneratorTool gen) {
 108         this.gen = gen;
 109     }
 110 
 111     protected LIRGeneratorTool getLIRGeneratorTool() {
 112         return gen;
 113     }
 114 
 115     /*
 116      * For now we do not want to expose the full lirBuilder to subclasses, so we delegate the few
 117      * methods that are actually needed. If the list grows too long, exposing lirBuilder might be
 118      * the better approach.
 119      */
 120 
 121     protected final Value operand(Node node) {
< prev index next >