Skip to content

Commit 72849a6

Browse files
committed
[GR-62642] Remove redundant callee saved register spilling.
PullRequest: graal/20452
2 parents da18562 + 5dc332a commit 72849a6

File tree

2 files changed

+2
-25
lines changed

2 files changed

+2
-25
lines changed

substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignGraphKit.java

+1-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 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
@@ -27,9 +27,6 @@
2727
import java.lang.invoke.MethodType;
2828
import java.util.ArrayList;
2929
import java.util.List;
30-
import java.util.Map;
31-
import java.util.stream.Collectors;
32-
import java.util.stream.StreamSupport;
3330

3431
import org.graalvm.collections.Pair;
3532

@@ -43,8 +40,6 @@
4340
import jdk.graal.compiler.nodes.extended.PublishWritesNode;
4441
import jdk.graal.compiler.nodes.java.NewArrayNode;
4542
import jdk.graal.compiler.replacements.nodes.ReadRegisterNode;
46-
import jdk.graal.compiler.replacements.nodes.WriteRegisterNode;
47-
import jdk.vm.ci.amd64.AMD64;
4843
import jdk.vm.ci.code.Register;
4944
import jdk.vm.ci.meta.JavaKind;
5045
import jdk.vm.ci.meta.MetaAccessProvider;
@@ -125,18 +120,4 @@ public ValueNode createReturn(ValueNode returnValue, MethodType methodType) {
125120
public ValueNode bindRegister(Register register, JavaKind kind) {
126121
return append(new ReadRegisterNode(register, kind, false, false));
127122
}
128-
129-
private JavaKind getRegisterKind(Register register) {
130-
// GR-62468: possible incorrect backup/restore of XMM register (Windows only)
131-
return AMD64.XMM.equals(register.getRegisterCategory()) ? JavaKind.Double : getWordTypes().getWordKind();
132-
}
133-
134-
public Map<Register, ValueNode> saveRegisters(Iterable<Register> registers) {
135-
return StreamSupport.stream(registers.spliterator(), false)
136-
.collect(Collectors.toMap(reg -> reg, register -> bindRegister(register, getRegisterKind(register))));
137-
}
138-
139-
public void restoreRegisters(Map<Register, ValueNode> save) {
140-
save.forEach((register, value) -> append(new WriteRegisterNode(register, value)));
141-
}
142123
}

substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/UpcallStub.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 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
@@ -196,7 +196,6 @@ public StructuredGraph buildGraph(DebugContext debug, AnalysisMethod method, Hos
196196
*/
197197
assert !savedRegisters.asList().contains(registers.methodHandle());
198198
assert !savedRegisters.asList().contains(registers.isolate());
199-
var save = kit.saveRegisters(savedRegisters);
200199
ValueNode enterResult = kit.append(CEntryPointEnterNode.attachThread(isolate, false, true));
201200

202201
kit.startIf(IntegerEqualsNode.create(enterResult, ConstantNode.forInt(CEntryPointErrors.NO_ERROR, kit.getGraph()), NodeView.DEFAULT),
@@ -235,8 +234,6 @@ public StructuredGraph buildGraph(DebugContext debug, AnalysisMethod method, Hos
235234
long offset = 0;
236235
for (AssignedLocation loc : AbiUtils.create().toMemoryAssignment(jep.returnAssignment(), true)) {
237236
assert loc.assignsToRegister();
238-
// an output location must not be a callee-save register
239-
assert !save.containsKey(loc.register());
240237

241238
AddressNode address = new OffsetAddressNode(returnBuffer, ConstantNode.forLong(offset, kit.getGraph()));
242239
ReadNode val = kit.append(new ReadNode(address, LocationIdentity.any(), StampFactory.forKind(loc.registerKind()), BarrierType.NONE, MemoryOrderMode.PLAIN));
@@ -251,7 +248,6 @@ public StructuredGraph buildGraph(DebugContext debug, AnalysisMethod method, Hos
251248
assert offset == jep.returnBufferSize();
252249
}
253250
kit.append(new CEntryPointLeaveNode(CEntryPointLeaveNode.LeaveAction.Leave));
254-
kit.restoreRegisters(save);
255251
kit.createReturn(returnValue, jep.cMethodType());
256252

257253
return kit.finalizeGraph();

0 commit comments

Comments
 (0)