Skip to content

Commit 943065c

Browse files
committed
also try to dispatch binary and ternary nodes for bound methods where the underlying builtin actually takes the self argument
1 parent 11275a0 commit 943065c

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/CallBinaryMethodNode.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
4646
import com.oracle.graal.python.nodes.call.CallNode;
4747
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
48+
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
4849
import com.oracle.truffle.api.RootCallTarget;
4950
import com.oracle.truffle.api.dsl.Cached;
5051
import com.oracle.truffle.api.dsl.Specialization;
@@ -199,13 +200,29 @@ Object callObject(@SuppressWarnings("unused") PBuiltinMethod func, Object arg1,
199200
return builtinNode.execute(arg1, arg2);
200201
}
201202

203+
@Specialization(guards = {"func == cachedFunc", "builtinNode != null", "isFixed"}, limit = "getCallSiteInlineCacheMaxDepth()", assumptions = "singleContextAssumption()")
204+
Object callObject(@SuppressWarnings("unused") PBuiltinMethod func, Object arg1, Object arg2,
205+
@SuppressWarnings("unused") @Cached("func") PBuiltinMethod cachedFunc,
206+
@SuppressWarnings("unused") @Cached("func.getArity().takesFixedNumOfPositionalArgs()") boolean isFixed,
207+
@Cached("getTernary(func.getFunction())") PythonTernaryBuiltinNode builtinNode) {
208+
return builtinNode.execute(func.getSelf(), arg1, arg2);
209+
}
210+
202211
@Specialization(guards = {"func.getCallTarget() == ct", "builtinNode != null"}, limit = "getCallSiteInlineCacheMaxDepth()")
203212
Object callObject(@SuppressWarnings("unused") PBuiltinMethod func, Object arg1, Object arg2,
204213
@SuppressWarnings("unused") @Cached("func.getCallTarget()") RootCallTarget ct,
205214
@Cached("getBinary(func.getFunction())") PythonBinaryBuiltinNode builtinNode) {
206215
return builtinNode.execute(arg1, arg2);
207216
}
208217

218+
@Specialization(guards = {"func.getCallTarget() == ct", "builtinNode != null", "isFixed"}, limit = "getCallSiteInlineCacheMaxDepth()")
219+
Object callObject(@SuppressWarnings("unused") PBuiltinMethod func, Object arg1, Object arg2,
220+
@SuppressWarnings("unused") @Cached("func.getCallTarget()") RootCallTarget ct,
221+
@SuppressWarnings("unused") @Cached("func.getArity().takesFixedNumOfPositionalArgs()") boolean isFixed,
222+
@Cached("getTernary(func.getFunction())") PythonTernaryBuiltinNode builtinNode) {
223+
return builtinNode.execute(func.getSelf(), arg1, arg2);
224+
}
225+
209226
@Specialization
210227
Object call(Object func, Object arg1, Object arg2,
211228
@Cached("create()") CallNode callNode) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/CallUnaryMethodNode.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.oracle.graal.python.builtins.objects.function.PKeyword;
4545
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
4646
import com.oracle.graal.python.nodes.call.CallNode;
47+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
4748
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
4849
import com.oracle.truffle.api.RootCallTarget;
4950
import com.oracle.truffle.api.dsl.Cached;
@@ -160,13 +161,29 @@ Object callObjectSingleContext(@SuppressWarnings("unused") PBuiltinMethod func,
160161
return builtinNode.execute(receiver);
161162
}
162163

164+
@Specialization(guards = {"func == cachedFunc", "builtinNode != null", "isFixed"}, limit = "getCallSiteInlineCacheMaxDepth()", assumptions = "singleContextAssumption()")
165+
Object callObjectSingleContext(@SuppressWarnings("unused") PBuiltinMethod func, Object arg,
166+
@SuppressWarnings("unused") @Cached("func") PBuiltinMethod cachedFunc,
167+
@SuppressWarnings("unused") @Cached("func.getArity().takesFixedNumOfPositionalArgs()") boolean isFixed,
168+
@Cached("getBinary(func.getFunction())") PythonBinaryBuiltinNode builtinNode) {
169+
return builtinNode.execute(func.getSelf(), arg);
170+
}
171+
163172
@Specialization(guards = {"func.getCallTarget() == ct", "builtinNode != null"}, limit = "getCallSiteInlineCacheMaxDepth()")
164173
Object call(@SuppressWarnings("unused") PBuiltinMethod func, Object receiver,
165174
@SuppressWarnings("unused") @Cached("func.getCallTarget()") RootCallTarget ct,
166175
@Cached("getUnary(func.getFunction())") PythonUnaryBuiltinNode builtinNode) {
167176
return builtinNode.execute(receiver);
168177
}
169178

179+
@Specialization(guards = {"func.getCallTarget() == ct", "builtinNode != null", "isFixed"}, limit = "getCallSiteInlineCacheMaxDepth()")
180+
Object call(@SuppressWarnings("unused") PBuiltinMethod func, Object arg,
181+
@SuppressWarnings("unused") @Cached("func.getCallTarget()") RootCallTarget ct,
182+
@SuppressWarnings("unused") @Cached("func.getArity().takesFixedNumOfPositionalArgs()") boolean isFixed,
183+
@Cached("getBinary(func.getFunction())") PythonBinaryBuiltinNode builtinNode) {
184+
return builtinNode.execute(func.getSelf(), arg);
185+
}
186+
170187
@Specialization
171188
Object call(Object func, Object receiver,
172189
@Cached("create()") CallNode callNode) {

0 commit comments

Comments
 (0)