43 DIV,
44 REM
45 }
46
47 public enum Type {
48 SIGNED,
49 UNSIGNED
50 }
51
52 private final Op op;
53 private final Type type;
54 private final boolean canDeopt;
55
56 protected IntegerDivRemNode(NodeClass<? extends IntegerDivRemNode> c, Stamp stamp, Op op, Type type, ValueNode x, ValueNode y) {
57 super(c, stamp, x, y);
58 this.op = op;
59 this.type = type;
60
61 // Assigning canDeopt during constructor, because it must never change during lifetime of
62 // the node.
63 this.canDeopt = ((IntegerStamp) getY().stamp(NodeView.DEFAULT)).contains(0);
64 }
65
66 public final Op getOp() {
67 return op;
68 }
69
70 public final Type getType() {
71 return type;
72 }
73
74 @Override
75 public void lower(LoweringTool tool) {
76 tool.getLowerer().lower(this, tool);
77 }
78
79 @Override
80 public boolean canDeoptimize() {
81 return canDeopt;
82 }
83 }
|
43 DIV,
44 REM
45 }
46
47 public enum Type {
48 SIGNED,
49 UNSIGNED
50 }
51
52 private final Op op;
53 private final Type type;
54 private final boolean canDeopt;
55
56 protected IntegerDivRemNode(NodeClass<? extends IntegerDivRemNode> c, Stamp stamp, Op op, Type type, ValueNode x, ValueNode y) {
57 super(c, stamp, x, y);
58 this.op = op;
59 this.type = type;
60
61 // Assigning canDeopt during constructor, because it must never change during lifetime of
62 // the node.
63 IntegerStamp yStamp = (IntegerStamp) getY().stamp(NodeView.DEFAULT);
64 this.canDeopt = yStamp.contains(0) || yStamp.contains(-1);
65 }
66
67 public final Op getOp() {
68 return op;
69 }
70
71 public final Type getType() {
72 return type;
73 }
74
75 @Override
76 public void lower(LoweringTool tool) {
77 tool.getLowerer().lower(this, tool);
78 }
79
80 @Override
81 public boolean canDeoptimize() {
82 return canDeopt;
83 }
84 }
|