108 public void virtualize(VirtualizerTool tool) {
109 ValueNode alias1 = tool.getAlias(array1);
110 ValueNode alias2 = tool.getAlias(array2);
111 if (alias1 == alias2) {
112 // the same virtual objects will always have the same contents
113 tool.replaceWithValue(ConstantNode.forInt(0, graph()));
114 }
115 }
116
117 @NodeIntrinsic
118 public static native int compareTo(Object array1, Object array2, int length1, int length2, @ConstantNodeParameter JavaKind kind1, @ConstantNodeParameter JavaKind kind2);
119
120 @Override
121 public void generate(NodeLIRBuilderTool gen) {
122 Value result = gen.getLIRGeneratorTool().emitArrayCompareTo(kind1, kind2, gen.operand(array1), gen.operand(array2), gen.operand(length1), gen.operand(length2));
123 gen.setResult(this, result);
124 }
125
126 @Override
127 public LocationIdentity getLocationIdentity() {
128 return NamedLocationIdentity.getArrayLocation(kind1);
129 }
130
131 @Override
132 public MemoryNode getLastLocationAccess() {
133 return lastLocationAccess;
134 }
135
136 @Override
137 public void setLastLocationAccess(MemoryNode lla) {
138 updateUsages(ValueNodeUtil.asNode(lastLocationAccess), ValueNodeUtil.asNode(lla));
139 lastLocationAccess = lla;
140 }
141 }
|
108 public void virtualize(VirtualizerTool tool) {
109 ValueNode alias1 = tool.getAlias(array1);
110 ValueNode alias2 = tool.getAlias(array2);
111 if (alias1 == alias2) {
112 // the same virtual objects will always have the same contents
113 tool.replaceWithValue(ConstantNode.forInt(0, graph()));
114 }
115 }
116
117 @NodeIntrinsic
118 public static native int compareTo(Object array1, Object array2, int length1, int length2, @ConstantNodeParameter JavaKind kind1, @ConstantNodeParameter JavaKind kind2);
119
120 @Override
121 public void generate(NodeLIRBuilderTool gen) {
122 Value result = gen.getLIRGeneratorTool().emitArrayCompareTo(kind1, kind2, gen.operand(array1), gen.operand(array2), gen.operand(length1), gen.operand(length2));
123 gen.setResult(this, result);
124 }
125
126 @Override
127 public LocationIdentity getLocationIdentity() {
128 return kind1 != kind2 ? LocationIdentity.ANY_LOCATION : NamedLocationIdentity.getArrayLocation(kind1);
129 }
130
131 @Override
132 public MemoryNode getLastLocationAccess() {
133 return lastLocationAccess;
134 }
135
136 @Override
137 public void setLastLocationAccess(MemoryNode lla) {
138 updateUsages(ValueNodeUtil.asNode(lastLocationAccess), ValueNodeUtil.asNode(lla));
139 lastLocationAccess = lla;
140 }
141 }
|