Skip to content

Commit 2742c41

Browse files
committed
Reduce the number of assumptions per function
1 parent 44f207b commit 2742c41

File tree

3 files changed

+11
-32
lines changed

3 files changed

+11
-32
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/function/PFunction.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public final class PFunction extends PythonObject {
6363
private TruffleString qualname;
6464
private boolean forceSplitDirectCalls;
6565
private final Assumption codeStableAssumption;
66-
private final Assumption defaultsStableAssumption;
6766
private final PythonObject globals;
6867
@CompilationFinal private boolean isBuiltin;
6968
@CompilationFinal(dimensions = 1) private final PCell[] closure;
@@ -81,14 +80,12 @@ public PFunction(PythonLanguage lang, TruffleString name, TruffleString qualname
8180
}
8281

8382
public PFunction(PythonLanguage lang, TruffleString name, TruffleString qualname, PCode code, PythonObject globals, Object[] defaultValues,
84-
PKeyword[] kwDefaultValues,
85-
PCell[] closure) {
86-
this(lang, name, qualname, code, globals, defaultValues, kwDefaultValues, closure, Truffle.getRuntime().createAssumption(), Truffle.getRuntime().createAssumption());
83+
PKeyword[] kwDefaultValues, PCell[] closure) {
84+
this(lang, name, qualname, code, globals, defaultValues, kwDefaultValues, closure, Truffle.getRuntime().createAssumption());
8785
}
8886

8987
public PFunction(PythonLanguage lang, TruffleString name, TruffleString qualname, PCode code, PythonObject globals, Object[] defaultValues,
90-
PKeyword[] kwDefaultValues,
91-
PCell[] closure, Assumption codeStableAssumption, Assumption defaultsStableAssumption) {
88+
PKeyword[] kwDefaultValues, PCell[] closure, Assumption codeStableAssumption) {
9289
super(PythonBuiltinClassType.PFunction, PythonBuiltinClassType.PFunction.getInstanceShape(lang));
9390
this.name = name;
9491
this.qualname = qualname;
@@ -100,18 +97,13 @@ public PFunction(PythonLanguage lang, TruffleString name, TruffleString qualname
10097
this.kwDefaultValues = this.finalKwDefaultValues = kwDefaultValues == null ? PKeyword.EMPTY_KEYWORDS : kwDefaultValues;
10198
this.closure = closure;
10299
this.codeStableAssumption = codeStableAssumption;
103-
this.defaultsStableAssumption = defaultsStableAssumption;
104100
this.forceSplitDirectCalls = false;
105101
}
106102

107103
public Assumption getCodeStableAssumption() {
108104
return codeStableAssumption;
109105
}
110106

111-
public Assumption getDefaultsStableAssumption() {
112-
return defaultsStableAssumption;
113-
}
114-
115107
public PythonObject getGlobals() {
116108
return globals;
117109
}
@@ -203,7 +195,7 @@ public void setCode(PCode code) {
203195

204196
public Object[] getDefaults() {
205197
if (CompilerDirectives.inCompiledCode() && CompilerDirectives.isPartialEvaluationConstant(this)) {
206-
if (defaultsStableAssumption.isValid()) {
198+
if (codeStableAssumption.isValid()) {
207199
return finalDefaultValues;
208200
}
209201
}
@@ -212,14 +204,14 @@ public Object[] getDefaults() {
212204

213205
@TruffleBoundary
214206
public void setDefaults(Object[] defaults) {
215-
this.defaultsStableAssumption.invalidate("defaults changed for function " + getName());
207+
this.codeStableAssumption.invalidate("defaults changed for function " + getName());
216208
this.finalDefaultValues = null; // avoid leak, and make code that wrongly uses it crash
217209
this.defaultValues = defaults;
218210
}
219211

220212
public PKeyword[] getKwDefaults() {
221213
if (CompilerDirectives.inCompiledCode() && CompilerDirectives.isPartialEvaluationConstant(this)) {
222-
if (defaultsStableAssumption.isValid()) {
214+
if (codeStableAssumption.isValid()) {
223215
return finalKwDefaultValues;
224216
}
225217
}
@@ -228,7 +220,7 @@ public PKeyword[] getKwDefaults() {
228220

229221
@TruffleBoundary
230222
public void setKwDefaults(PKeyword[] defaults) {
231-
this.defaultsStableAssumption.invalidate("kw defaults changed for function " + getName());
223+
this.codeStableAssumption.invalidate("kw defaults changed for function " + getName());
232224
this.finalDefaultValues = null; // avoid leak, and make code that wrongly uses it crash
233225
this.kwDefaultValues = defaults;
234226
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode/MakeFunctionNode.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ public abstract class MakeFunctionNode extends PNodeWithContext {
7171
private final Signature signature;
7272
@CompilationFinal private PCode cachedCode;
7373

74-
private final Assumption sharedCodeStableAssumption = Truffle.getRuntime().createAssumption("shared code stable assumption");
75-
private final Assumption sharedDefaultsStableAssumption = Truffle.getRuntime().createAssumption("shared defaults stable assumption");
74+
private final Assumption codeStableAssumption = Truffle.getRuntime().createAssumption("code stable assumption");
7675

7776
public abstract int execute(VirtualFrame frame, Object globals, int initialStackTop, int flags);
7877

@@ -125,17 +124,7 @@ int makeFunction(VirtualFrame frame, Object globals, int initialStackTop, int fl
125124
frame.setObject(stackTop--, null);
126125
}
127126

128-
Assumption codeStableAssumption;
129-
Assumption defaultsStableAssumption;
130-
if (CompilerDirectives.inCompiledCode()) {
131-
codeStableAssumption = sharedCodeStableAssumption;
132-
defaultsStableAssumption = sharedDefaultsStableAssumption;
133-
} else {
134-
codeStableAssumption = Truffle.getRuntime().createAssumption();
135-
defaultsStableAssumption = Truffle.getRuntime().createAssumption();
136-
}
137-
PFunction function = PFactory.createFunction(language, code.name, code.qualname, codeObj, (PythonObject) globals, defaults, kwdefaults, closure, codeStableAssumption,
138-
defaultsStableAssumption);
127+
PFunction function = PFactory.createFunction(language, code.name, code.qualname, codeObj, (PythonObject) globals, defaults, kwdefaults, closure, codeStableAssumption);
139128

140129
if (annotations != null) {
141130
writeAttrNode.execute(function, T___ANNOTATIONS__, annotations);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PFactory.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -533,10 +533,8 @@ public static PFunction createFunction(PythonLanguage language, TruffleString na
533533
}
534534

535535
public static PFunction createFunction(PythonLanguage language, TruffleString name, TruffleString qualname, PCode code, PythonObject globals, Object[] defaultValues, PKeyword[] kwDefaultValues,
536-
PCell[] closure,
537-
Assumption codeStableAssumption, Assumption defaultsStableAssumption) {
538-
return trace(language, new PFunction(language, name, qualname, code, globals, defaultValues, kwDefaultValues, closure,
539-
codeStableAssumption, defaultsStableAssumption));
536+
PCell[] closure, Assumption codeStableAssumption) {
537+
return trace(language, new PFunction(language, name, qualname, code, globals, defaultValues, kwDefaultValues, closure, codeStableAssumption));
540538
}
541539

542540
public static PBuiltinFunction createBuiltinFunction(PythonLanguage language, TruffleString name, Object type, int numDefaults, int flags, RootCallTarget callTarget) {

0 commit comments

Comments
 (0)