< 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




  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) {


  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, ignoresSideEffects = true)
  71 @MatchableNode(nodeClass = FloatConvertNode.class, inputs = {"value"}, ignoresSideEffects = true)
  72 @MatchableNode(nodeClass = FloatingReadNode.class, inputs = {"address"})
  73 @MatchableNode(nodeClass = IfNode.class, inputs = {"condition"})
  74 @MatchableNode(nodeClass = SubNode.class, inputs = {"x", "y"}, ignoresSideEffects = true)
  75 @MatchableNode(nodeClass = LeftShiftNode.class, inputs = {"x", "y"}, ignoresSideEffects = true)
  76 @MatchableNode(nodeClass = NarrowNode.class, inputs = {"value"}, ignoresSideEffects = true)
  77 @MatchableNode(nodeClass = ReadNode.class, inputs = {"address"})
  78 @MatchableNode(nodeClass = ReinterpretNode.class, inputs = {"value"}, ignoresSideEffects = true)
  79 @MatchableNode(nodeClass = SignExtendNode.class, inputs = {"value"}, ignoresSideEffects = true)
  80 @MatchableNode(nodeClass = UnsignedRightShiftNode.class, inputs = {"x", "y"}, ignoresSideEffects = true)
  81 @MatchableNode(nodeClass = WriteNode.class, inputs = {"address", "value"})
  82 @MatchableNode(nodeClass = ZeroExtendNode.class, inputs = {"value"}, ignoresSideEffects = true)
  83 @MatchableNode(nodeClass = AndNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  84 @MatchableNode(nodeClass = NegateNode.class, inputs = {"value"}, ignoresSideEffects = true)
  85 @MatchableNode(nodeClass = NotNode.class, inputs = {"value"}, ignoresSideEffects = true)
  86 @MatchableNode(nodeClass = FloatEqualsNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  87 @MatchableNode(nodeClass = FloatLessThanNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  88 @MatchableNode(nodeClass = PointerEqualsNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  89 @MatchableNode(nodeClass = AddNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  90 @MatchableNode(nodeClass = IntegerBelowNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  91 @MatchableNode(nodeClass = IntegerEqualsNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  92 @MatchableNode(nodeClass = IntegerLessThanNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  93 @MatchableNode(nodeClass = MulNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  94 @MatchableNode(nodeClass = IntegerTestNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  95 @MatchableNode(nodeClass = ObjectEqualsNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  96 @MatchableNode(nodeClass = OrNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  97 @MatchableNode(nodeClass = XorNode.class, inputs = {"x", "y"}, commutative = true, ignoresSideEffects = true)
  98 @MatchableNode(nodeClass = PiNode.class, inputs = {"object"}, ignoresSideEffects = true)
  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"}, ignoresSideEffects = true)
 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 >