src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java Fri Aug 17 11:56:59 2018 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java Fri Aug 17 13:20:53 2018 -0700
@@ -239,6 +239,10 @@
lowerBinaryMath((BinaryMathIntrinsicNode) n, tool);
} else if (n instanceof StringIndexOfNode) {
lowerIndexOf((StringIndexOfNode) n);
+ } else if (n instanceof StringLatin1IndexOfNode) {
+ lowerLatin1IndexOf((StringLatin1IndexOfNode) n);
+ } else if (n instanceof StringUTF16IndexOfNode) {
+ lowerUTF16IndexOf((StringUTF16IndexOfNode) n);
} else if (n instanceof UnpackEndianHalfNode) {
lowerSecondHalf((UnpackEndianHalfNode) n);
} else {
@@ -269,6 +273,40 @@
}
}
+ private void lowerLatin1IndexOf(StringLatin1IndexOfNode n) {
+ if (n.getArgument(2).isConstant()) {
+ SnippetLowering lowering = new SnippetLowering() {
+ @Override
+ public void lower(SnippetLowerableMemoryNode node, LoweringTool tool) {
+ if (tool.getLoweringStage() != LoweringTool.StandardLoweringStage.LOW_TIER) {
+ return;
+ }
+ indexOfSnippets.lowerLatin1(node, tool);
+ }
+ };
+ SnippetLowerableMemoryNode snippetLower = new SnippetLowerableMemoryNode(lowering, NamedLocationIdentity.getArrayLocation(JavaKind.Byte), n.stamp(NodeView.DEFAULT), n.toArgumentArray());
+ n.graph().add(snippetLower);
+ n.graph().replaceFixedWithFixed(n, snippetLower);
+ }
+ }
+
+ private void lowerUTF16IndexOf(StringUTF16IndexOfNode n) {
+ if (n.getArgument(2).isConstant()) {
+ SnippetLowering lowering = new SnippetLowering() {
+ @Override
+ public void lower(SnippetLowerableMemoryNode node, LoweringTool tool) {
+ if (tool.getLoweringStage() != LoweringTool.StandardLoweringStage.LOW_TIER) {
+ return;
+ }
+ indexOfSnippets.lowerUTF16(node, tool);
+ }
+ };
+ SnippetLowerableMemoryNode snippetLower = new SnippetLowerableMemoryNode(lowering, NamedLocationIdentity.getArrayLocation(JavaKind.Byte), n.stamp(NodeView.DEFAULT), n.toArgumentArray());
+ n.graph().add(snippetLower);
+ n.graph().replaceFixedWithFixed(n, snippetLower);
+ }
+ }
+
private void lowerBinaryMath(BinaryMathIntrinsicNode math, LoweringTool tool) {
if (tool.getLoweringStage() == LoweringTool.StandardLoweringStage.HIGH_TIER) {
return;
@@ -762,7 +800,7 @@
barrierType = fieldInitializationBarrier(entryKind);
}
} else {
- address = createOffsetAddress(graph, newObject, tool.getMetaAccess().getArrayBaseOffset(entryKind) + i * arrayScalingFactor(entryKind));
+ address = createOffsetAddress(graph, newObject, arrayBaseOffset(entryKind) + i * arrayScalingFactor(entryKind));
barrierType = arrayInitializationBarrier(entryKind);
}
if (address != null) {