Skip to content

Commit 307aab1

Browse files
committed
[GR-59869] Add SIMD code generation and Vector API support
PullRequest: graal/20854
2 parents 1e09043 + ee1e972 commit 307aab1

File tree

118 files changed

+23410
-136
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+23410
-136
lines changed

compiler/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ This changelog summarizes newly introduced optimizations and other compiler rela
88
which has no dependency on Native Image internals. This
99
is required for Galahad CE where libgraal must be buildable from the Graal compiler sources in the OpenJDK
1010
while using Native Image as an external tool.
11+
* (GR-59869) Implemented initial optimization of Java Vector API (JEP 338) operations.
12+
Load, store, basic arithmetic, reduce, compare, and blend operations are transformed to efficient machine instructions where possible.
13+
Coverage of more operations is planned for the future.
14+
This optimization is experimental.
15+
It is enabled by default and can be disabled by setting the `OptimizeVectorAPI` option to `false`.
16+
Vector API operations are supported both on JIT and when building native images.
17+
Native image builds must use the `--add-modules jdk.incubator.vector` and `-H:+VectorAPISupport` options to enable optimization.
1118

1219
## GraalVM for JDK 24 (Internal Version 24.2.0)
1320
* (GR-57209): The default number of JVMCI threads is now the same as the number of C2 threads (`-XX:JVMCINativeLibraryThreadFraction=0.66`).

compiler/mx.compiler/suite.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@
262262
"java.instrument",
263263
"java.management",
264264
"jdk.jfr",
265+
"jdk.incubator.vector",
265266
],
266267
"requiresConcealed" : {
267268
"java.base" : [
@@ -297,6 +298,8 @@
297298
"checkstyle" : "jdk.graal.compiler",
298299
"javaCompliance" : "21+",
299300
"jacoco" : "exclude",
301+
# warning: [incubating] using incubating module(s): jdk.incubator.vector
302+
"javac.lint.overrides" : "-incubating",
300303
"graalCompilerSourceEdition": "ignore",
301304
},
302305

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.graal.compiler.core.test;
27+
28+
import org.junit.Assert;
29+
import org.junit.Assume;
30+
import org.junit.Test;
31+
32+
import jdk.graal.compiler.core.common.type.IntegerStamp;
33+
import jdk.graal.compiler.core.common.type.StampFactory;
34+
import jdk.graal.compiler.nodes.NodeView;
35+
import jdk.graal.compiler.nodes.StructuredGraph;
36+
import jdk.graal.compiler.nodes.calc.AddNode;
37+
import jdk.graal.compiler.nodes.memory.ReadNode;
38+
import jdk.graal.compiler.test.AddModules;
39+
import jdk.graal.compiler.vector.architecture.VectorArchitecture;
40+
import jdk.graal.compiler.vector.architecture.VectorLoweringProvider;
41+
import jdk.graal.compiler.vector.nodes.simd.SimdBroadcastNode;
42+
import jdk.graal.compiler.vector.nodes.simd.SimdStamp;
43+
import jdk.incubator.vector.IntVector;
44+
import jdk.vm.ci.meta.JavaKind;
45+
46+
/** Basic testing for intrinsification of Vector API operations. */
47+
@AddModules("jdk.incubator.vector")
48+
public class VectorAPISmokeTest extends GraalCompilerTest {
49+
50+
public static int[] testSnippet(int[] ints, int x, int[] output) {
51+
IntVector.fromArray(IntVector.SPECIES_PREFERRED, ints, 0).add(x).intoArray(output, 0);
52+
return output;
53+
}
54+
55+
@Override
56+
protected void checkLowTierGraph(StructuredGraph graph) {
57+
/* Expect a SIMD load, a SIMD broadcast, and a SIMD add. */
58+
int simdLoads = graph.getNodes().filter(ReadNode.class).filter(read -> ((ReadNode) read).stamp(NodeView.DEFAULT) instanceof SimdStamp).count();
59+
Assert.assertEquals("simd loads", 1, simdLoads);
60+
int simdBroadcasts = graph.getNodes().filter(SimdBroadcastNode.class).count();
61+
Assert.assertEquals("simd broadcasts", 1, simdBroadcasts);
62+
int simdAdds = graph.getNodes().filter(AddNode.class).filter(add -> ((AddNode) add).stamp(NodeView.DEFAULT) instanceof SimdStamp).count();
63+
Assert.assertEquals("simd adds", 1, simdAdds);
64+
}
65+
66+
@Test
67+
public void runTest() {
68+
int vectorLength = IntVector.SPECIES_PREFERRED.length();
69+
VectorArchitecture vectorArch = ((VectorLoweringProvider) getProviders().getLowerer()).getVectorArchitecture();
70+
Assume.assumeTrue("test needs minimal vectorization support",
71+
vectorArch.getSupportedVectorArithmeticLength(StampFactory.forKind(JavaKind.Int), vectorLength, IntegerStamp.OPS.getAdd()) == vectorLength);
72+
73+
int[] ints = new int[vectorLength];
74+
for (int i = 0; i < ints.length; i++) {
75+
ints[i] = i;
76+
}
77+
ArgSupplier output = () -> new int[ints.length];
78+
test("testSnippet", ints, 7, output);
79+
}
80+
}

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/aarch64/AArch64SuitesCreator.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -24,9 +24,19 @@
2424
*/
2525
package jdk.graal.compiler.core.aarch64;
2626

27+
import java.util.ListIterator;
28+
29+
import jdk.graal.compiler.core.common.GraalOptions;
2730
import jdk.graal.compiler.java.DefaultSuitesCreator;
2831
import jdk.graal.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
32+
import jdk.graal.compiler.options.OptionValues;
33+
import jdk.graal.compiler.phases.BasePhase;
34+
import jdk.graal.compiler.phases.common.DeadCodeEliminationPhase;
2935
import jdk.graal.compiler.phases.tiers.CompilerConfiguration;
36+
import jdk.graal.compiler.phases.tiers.LowTierContext;
37+
import jdk.graal.compiler.phases.tiers.Suites;
38+
import jdk.graal.compiler.vector.phases.aarch64.AArch64VectorLoweringPhase;
39+
import jdk.vm.ci.code.Architecture;
3040

3141
public abstract class AArch64SuitesCreator extends DefaultSuitesCreator {
3242

@@ -37,4 +47,17 @@ public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins
3747
public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration) {
3848
super(compilerConfiguration);
3949
}
50+
51+
@Override
52+
public Suites createSuites(OptionValues options, Architecture arch) {
53+
Suites suites = super.createSuites(options, arch);
54+
if (GraalOptions.TargetVectorLowering.getValue(options)) {
55+
ListIterator<BasePhase<? super LowTierContext>> position = suites.getLowTier().findPhase(DeadCodeEliminationPhase.class);
56+
if (position != null) {
57+
position.previous();
58+
position.add(new AArch64VectorLoweringPhase());
59+
}
60+
}
61+
return suites;
62+
}
4063
}

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/amd64/AMD64SuitesCreator.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -26,17 +26,19 @@
2626

2727
import java.util.ListIterator;
2828

29+
import jdk.graal.compiler.core.common.GraalOptions;
2930
import jdk.graal.compiler.java.DefaultSuitesCreator;
3031
import jdk.graal.compiler.lir.amd64.phases.StackMoveOptimizationPhase;
3132
import jdk.graal.compiler.lir.phases.LIRSuites;
3233
import jdk.graal.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
3334
import jdk.graal.compiler.options.OptionValues;
3435
import jdk.graal.compiler.phases.BasePhase;
36+
import jdk.graal.compiler.phases.common.DeadCodeEliminationPhase;
3537
import jdk.graal.compiler.phases.common.UseTrappingNullChecksPhase;
3638
import jdk.graal.compiler.phases.tiers.CompilerConfiguration;
3739
import jdk.graal.compiler.phases.tiers.LowTierContext;
3840
import jdk.graal.compiler.phases.tiers.Suites;
39-
41+
import jdk.graal.compiler.vector.phases.amd64.AMD64VectorLoweringPhase;
4042
import jdk.vm.ci.code.Architecture;
4143

4244
public abstract class AMD64SuitesCreator extends DefaultSuitesCreator {
@@ -57,6 +59,13 @@ public Suites createSuites(OptionValues options, Architecture arch) {
5759
position.previous();
5860
position.add(new UseTrappingDivPhase());
5961
}
62+
if (GraalOptions.TargetVectorLowering.getValue(options)) {
63+
position = suites.getLowTier().findPhase(DeadCodeEliminationPhase.class);
64+
if (position != null) {
65+
position.previous();
66+
position.add(new AMD64VectorLoweringPhase());
67+
}
68+
}
6069
return suites;
6170
}
6271

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/GraalOptions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,4 +347,7 @@ public final class GraalOptions {
347347
@Option(help = "The maximum number of profiled types that will be used when compiling a profiled type check. " +
348348
"Note that TypeCheckMinProfileHitProbability also influences whether profiling info is used in compiled type checks.", type = OptionType.Debug)
349349
public static final OptionKey<Integer> TypeCheckMaxHints = new OptionKey<>(2);
350+
351+
@Option(help = "Enables target-specific lowering and legalization of SIMD operations. Required for SIMD code generation.", type = OptionType.Debug)
352+
public static final OptionKey<Boolean> TargetVectorLowering = new OptionKey<>(true);
350353
}

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/phases/CEOptimization.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -52,6 +52,8 @@
5252
import jdk.graal.compiler.phases.common.UseTrappingNullChecksPhase;
5353
import jdk.graal.compiler.phases.common.inlining.InliningPhase;
5454
import jdk.graal.compiler.phases.schedule.SchedulePhase;
55+
import jdk.graal.compiler.vector.replacements.vectorapi.VectorAPIExpansionPhase;
56+
import jdk.graal.compiler.vector.replacements.vectorapi.VectorAPIIntrinsics;
5557
import jdk.graal.compiler.virtual.phases.ea.PartialEscapePhase;
5658
import jdk.graal.compiler.virtual.phases.ea.ReadEliminationPhase;
5759

@@ -310,7 +312,16 @@ public enum CEOptimization {
310312
*
311313
* This phase is enabled by default.
312314
*/
313-
BoxNodeOptimization(null, BoxNodeOptimizationPhase.class);
315+
BoxNodeOptimization(null, BoxNodeOptimizationPhase.class),
316+
317+
/**
318+
* {@link VectorAPIExpansionPhase} lowers Java Vector API (JEP 338) operations to corresponding
319+
* SIMD code for more efficent execution.
320+
*
321+
* This phase is enabled by default and can be disabled with
322+
* {@link jdk.graal.compiler.vector.replacements.vectorapi.VectorAPIIntrinsics.Options#OptimizeVectorAPI}.
323+
*/
324+
VectorAPIOptimization(VectorAPIIntrinsics.Options.OptimizeVectorAPI, VectorAPIExpansionPhase.class);
314325

315326
private final OptionKey<?> option;
316327
private final Class<? extends BasePhase<?>> optimization;

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/phases/HighTier.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2013, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -48,6 +48,8 @@
4848
import jdk.graal.compiler.phases.common.inlining.InliningPhase;
4949
import jdk.graal.compiler.phases.common.inlining.policy.GreedyInliningPolicy;
5050
import jdk.graal.compiler.phases.tiers.HighTierContext;
51+
import jdk.graal.compiler.vector.replacements.vectorapi.VectorAPIExpansionPhase;
52+
import jdk.graal.compiler.vector.replacements.vectorapi.VectorAPIIntrinsics;
5153
import jdk.graal.compiler.virtual.phases.ea.FinalPartialEscapePhase;
5254
import jdk.graal.compiler.virtual.phases.ea.ReadEliminationPhase;
5355

@@ -108,6 +110,10 @@ public HighTier(OptionValues options) {
108110
appendPhase(new FinalPartialEscapePhase(true, canonicalizer, null, options));
109111
}
110112

113+
if (VectorAPIIntrinsics.intrinsificationSupported(options)) {
114+
appendPhase(new VectorAPIExpansionPhase(canonicalizer));
115+
}
116+
111117
if (GraalOptions.OptReadElimination.getValue(options)) {
112118
appendPhase(new ReadEliminationPhase(canonicalizer));
113119
}

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackend.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2013, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -75,9 +75,17 @@
7575
import jdk.graal.compiler.lir.framemap.FrameMapBuilder;
7676
import jdk.graal.compiler.lir.gen.LIRGenerationResult;
7777
import jdk.graal.compiler.lir.gen.LIRGeneratorTool;
78+
import jdk.graal.compiler.lir.gen.MoveFactory;
7879
import jdk.graal.compiler.nodes.StructuredGraph;
7980
import jdk.graal.compiler.nodes.spi.NodeLIRBuilderTool;
81+
import jdk.graal.compiler.vector.lir.VectorLIRGeneratorTool;
82+
import jdk.graal.compiler.vector.lir.aarch64.AArch64VectorArithmeticLIRGenerator;
83+
import jdk.graal.compiler.vector.lir.aarch64.AArch64VectorMoveFactory;
84+
import jdk.graal.compiler.vector.lir.aarch64.AArch64VectorNodeMatchRules;
85+
import jdk.graal.compiler.vector.lir.hotspot.aarch64.AArch64HotSpotSimdLIRKindTool;
86+
import jdk.graal.compiler.vector.lir.hotspot.aarch64.AArch64HotSpotVectorLIRGenerator;
8087
import jdk.internal.misc.Unsafe;
88+
import jdk.vm.ci.aarch64.AArch64;
8189
import jdk.vm.ci.aarch64.AArch64Kind;
8290
import jdk.vm.ci.code.CallingConvention;
8391
import jdk.vm.ci.code.CompilationRequest;
@@ -96,9 +104,11 @@
96104
* HotSpot AArch64 specific backend.
97105
*/
98106
public class AArch64HotSpotBackend extends HotSpotHostBackend implements LIRGenerationProvider {
107+
protected final boolean neonSupported;
99108

100109
public AArch64HotSpotBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) {
101110
super(config, runtime, providers);
111+
neonSupported = ((AArch64) providers.getCodeCache().getTarget().arch).getFeatures().contains(AArch64.CPUFeature.ASIMD);
102112
}
103113

104114
@Override
@@ -110,12 +120,26 @@ protected FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig, Stub
110120

111121
@Override
112122
public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) {
113-
return new AArch64HotSpotLIRGenerator(getProviders(), config, lirGenRes);
123+
if (neonSupported) {
124+
return new AArch64HotSpotVectorLIRGenerator(
125+
new AArch64HotSpotSimdLIRKindTool(),
126+
new AArch64VectorArithmeticLIRGenerator(null),
127+
new AArch64VectorMoveFactory(new AArch64HotSpotMoveFactory(), new MoveFactory.BackupSlotProvider(lirGenRes.getFrameMapBuilder())),
128+
getProviders(),
129+
config,
130+
lirGenRes);
131+
} else {
132+
return new AArch64HotSpotLIRGenerator(getProviders(), config, lirGenRes);
133+
}
114134
}
115135

116136
@Override
117137
public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) {
118-
return new AArch64HotSpotNodeLIRBuilder(graph, lirGen, new AArch64NodeMatchRules(lirGen));
138+
if (lirGen.getArithmetic() instanceof VectorLIRGeneratorTool) {
139+
return new AArch64HotSpotNodeLIRBuilder(graph, lirGen, new AArch64VectorNodeMatchRules(lirGen));
140+
} else {
141+
return new AArch64HotSpotNodeLIRBuilder(graph, lirGen, new AArch64NodeMatchRules(lirGen));
142+
}
119143
}
120144

121145
@Override

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackendFactory.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2013, 2025, Oracle and/or its affiliates. All rights reserved.
33
* Copyright (c) 2018, Red Hat Inc. All rights reserved.
44
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
55
*
@@ -31,7 +31,6 @@
3131
import java.util.List;
3232

3333
import jdk.graal.compiler.core.aarch64.AArch64AddressLoweringByUse;
34-
import jdk.graal.compiler.core.aarch64.AArch64LIRKindTool;
3534
import jdk.graal.compiler.core.aarch64.AArch64SuitesCreator;
3635
import jdk.graal.compiler.hotspot.GraalHotSpotVMConfig;
3736
import jdk.graal.compiler.hotspot.HotSpotBackendFactory;
@@ -58,6 +57,8 @@
5857
import jdk.graal.compiler.phases.tiers.CompilerConfiguration;
5958
import jdk.graal.compiler.replacements.aarch64.AArch64GraphBuilderPlugins;
6059
import jdk.graal.compiler.serviceprovider.ServiceProvider;
60+
import jdk.graal.compiler.vector.architecture.aarch64.VectorAArch64;
61+
import jdk.graal.compiler.vector.lir.hotspot.aarch64.AArch64HotSpotSimdLIRKindTool;
6162
import jdk.vm.ci.aarch64.AArch64;
6263
import jdk.vm.ci.code.Register;
6364
import jdk.vm.ci.code.RegisterConfig;
@@ -66,6 +67,7 @@
6667
import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
6768
import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
6869
import jdk.vm.ci.hotspot.aarch64.AArch64HotSpotRegisterConfig;
70+
import jdk.vm.ci.meta.JavaKind;
6971
import jdk.vm.ci.meta.MetaAccessProvider;
7072
import jdk.vm.ci.meta.Value;
7173

@@ -134,15 +136,17 @@ protected HotSpotHostForeignCallsProvider createForeignCalls(HotSpotJVMCIRuntime
134136
protected HotSpotSuitesProvider createSuites(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins,
135137
HotSpotRegistersProvider registers, HotSpotReplacementsImpl replacements, OptionValues options) {
136138
AArch64SuitesCreator suitesCreator = new AArch64HotSpotSuitesCreator(compilerConfiguration, plugins);
137-
BasePhase<CoreProviders> addressLoweringPhase = new AddressLoweringByUsePhase(new AArch64AddressLoweringByUse(new AArch64LIRKindTool(), true));
139+
BasePhase<CoreProviders> addressLoweringPhase = new AddressLoweringByUsePhase(new AArch64AddressLoweringByUse(new AArch64HotSpotSimdLIRKindTool(), true));
138140
return new AddressLoweringHotSpotSuitesProvider(suitesCreator, config, runtime, addressLoweringPhase);
139141
}
140142

141143
@Override
142144
protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntimeProvider graalRuntime, MetaAccessProvider metaAccess, HotSpotHostForeignCallsProvider foreignCalls,
143145
HotSpotRegistersProvider registers, HotSpotConstantReflectionProvider constantReflection, HotSpotPlatformConfigurationProvider platformConfig,
144146
HotSpotMetaAccessExtensionProvider metaAccessExtensionProvider, TargetDescription target) {
145-
return new AArch64HotSpotLoweringProvider(graalRuntime, metaAccess, foreignCalls, registers, constantReflection, platformConfig, metaAccessExtensionProvider, target);
147+
VectorAArch64 varch = new VectorAArch64((AArch64) target.arch, metaAccess.getArrayIndexScale(JavaKind.Object), graalRuntime.getVMConfig().useCompressedOops,
148+
graalRuntime.getVMConfig().objectAlignment, graalRuntime.getVMConfig().maxVectorSize);
149+
return new AArch64HotSpotLoweringProvider(graalRuntime, metaAccess, foreignCalls, registers, constantReflection, platformConfig, metaAccessExtensionProvider, target, varch);
146150
}
147151

148152
@Override

0 commit comments

Comments
 (0)