Skip to content

Commit 28ed0b1

Browse files
committed
[GR-46044] Fix peak regression after CreateArgumentsNode footprint optimization.
PullRequest: graalpython/2776
2 parents 010261d + 80d363f commit 28ed0b1

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/CodeNodes.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.oracle.graal.python.builtins.modules.MarshalModuleBuiltins;
4949
import com.oracle.graal.python.builtins.objects.code.CodeNodesFactory.GetCodeCallTargetNodeGen;
5050
import com.oracle.graal.python.builtins.objects.code.CodeNodesFactory.GetCodeRootNodeGen;
51+
import com.oracle.graal.python.builtins.objects.function.PFunction;
5152
import com.oracle.graal.python.builtins.objects.function.Signature;
5253
import com.oracle.graal.python.compiler.CodeUnit;
5354
import com.oracle.graal.python.nodes.IndirectCallNode;
@@ -233,6 +234,21 @@ static Signature doCached(Node inliningTarget, @SuppressWarnings("unused") PCode
233234
return getInSingleContextMode(inliningTarget, cachedCode, firstExecution);
234235
}
235236

237+
public static Signature getInSingleContextMode(Node inliningTarget, PFunction fun, InlinedBranchProfile firstExecution) {
238+
assert isSingleContext(inliningTarget);
239+
if (CompilerDirectives.inCompiledCode() && CompilerDirectives.isPartialEvaluationConstant(fun) && fun.getCodeStableAssumption().isValid()) {
240+
getInSingleContextMode(inliningTarget, fun.getCode(), firstExecution);
241+
}
242+
PCode code = fun.getCode();
243+
Signature signature = code.signature;
244+
if (signature == null) {
245+
firstExecution.enter(inliningTarget);
246+
RootCallTarget ct = code.initializeCallTarget();
247+
signature = code.initializeSignature(ct);
248+
}
249+
return signature;
250+
}
251+
236252
public static Signature getInSingleContextMode(Node inliningTarget, PCode code, InlinedBranchProfile firstExecution) {
237253
assert isSingleContext(inliningTarget);
238254
CompilerAsserts.partialEvaluationConstant(code);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/argument/CreateArgumentsNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ Object[] doFunctionCached(PFunction callable, Object[] userArguments, PKeyword[]
167167
@Cached(value = "callable", weak = true) @SuppressWarnings("unused") PFunction cachedCallable) {
168168

169169
PCode code = callable.getCode();
170-
Signature signature = CodeNodes.GetCodeSignatureNode.getInSingleContextMode(inliningTarget, code, firstExecution);
170+
Signature signature = CodeNodes.GetCodeSignatureNode.getInSingleContextMode(inliningTarget, callable, firstExecution);
171171
Object[] defaults = cachedCallable.getDefaults();
172172
PKeyword[] kwdefaults = cachedCallable.getKwDefaults();
173173
return createAndCheckArgumentsNode.execute(inliningTarget, callable, userArguments, keywords, signature, null, null, defaults, kwdefaults, false);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/builtins/FunctionNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ public static Signature getMethodSignatureSingleContext(PMethodBase method, Node
237237
public static Signature getFunctionSignatureSingleContext(Node inliningTarget, InlinedBranchProfile wasFirst, Object fun) {
238238
CompilerAsserts.partialEvaluationConstant(fun);
239239
if (fun instanceof PFunction f) {
240-
return CodeNodes.GetCodeSignatureNode.getInSingleContextMode(inliningTarget, f.getCode(), wasFirst);
240+
return CodeNodes.GetCodeSignatureNode.getInSingleContextMode(inliningTarget, f, wasFirst);
241241
} else if (fun instanceof PBuiltinFunction f) {
242242
return f.getSignature();
243243
}

0 commit comments

Comments
 (0)