Skip to content

Commit d9b2a3a

Browse files
committed
Merge branch 'master' into msimacek/experiment-faster-interpretation
2 parents ba651d9 + c312882 commit d9b2a3a

File tree

12 files changed

+165
-110
lines changed

12 files changed

+165
-110
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,6 @@
164164
import com.oracle.graal.python.builtins.objects.range.RangeNodes.LenOfIntRangeNodeExact;
165165
import com.oracle.graal.python.builtins.objects.set.PFrozenSet;
166166
import com.oracle.graal.python.builtins.objects.set.PSet;
167-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
168167
import com.oracle.graal.python.builtins.objects.str.PString;
169168
import com.oracle.graal.python.builtins.objects.str.StringBuiltins.IsIdentifierNode;
170169
import com.oracle.graal.python.builtins.objects.superobject.SuperObject;
@@ -198,6 +197,7 @@
198197
import com.oracle.graal.python.lib.PyObjectIsTrueNode;
199198
import com.oracle.graal.python.lib.PyObjectSizeNode;
200199
import com.oracle.graal.python.lib.PyObjectStrAsObjectNode;
200+
import com.oracle.graal.python.lib.PySliceNew;
201201
import com.oracle.graal.python.nodes.BuiltinNames;
202202
import com.oracle.graal.python.nodes.ErrorMessages;
203203
import com.oracle.graal.python.nodes.PConstructAndRaiseNode;
@@ -3248,13 +3248,20 @@ abstract static class SliceNode extends PythonQuaternaryBuiltinNode {
32483248
@Specialization(guards = {"isNoValue(second)"})
32493249
@SuppressWarnings("unused")
32503250
static Object singleArg(Object cls, Object first, Object second, Object third,
3251-
@Cached SliceNodes.CreateSliceNode sliceNode) {
3251+
@Cached PySliceNew sliceNode) {
32523252
return sliceNode.execute(PNone.NONE, first, PNone.NONE);
32533253
}
32543254

3255+
@Specialization(guards = {"!isNoValue(stop)", "isNoValue(step)"})
3256+
@SuppressWarnings("unused")
3257+
static Object twoArgs(Object cls, Object start, Object stop, Object step,
3258+
@Cached PySliceNew sliceNode) {
3259+
return sliceNode.execute(start, stop, PNone.NONE);
3260+
}
3261+
32553262
@Fallback
3256-
static Object moreArgs(Object cls, Object start, Object stop, Object step,
3257-
@Cached SliceNodes.CreateSliceNode sliceNode) {
3263+
static Object threeArgs(@SuppressWarnings("unused") Object cls, Object start, Object stop, Object step,
3264+
@Cached PySliceNew sliceNode) {
32583265
return sliceNode.execute(start, stop, step);
32593266
}
32603267
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextAbstractBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@
9090
import com.oracle.graal.python.builtins.objects.dict.PDict;
9191
import com.oracle.graal.python.builtins.objects.list.PList;
9292
import com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy;
93-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
9493
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
9594
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsSameTypeNode;
9695
import com.oracle.graal.python.lib.PyNumberFloatNode;
9796
import com.oracle.graal.python.lib.PyObjectDelItem;
9897
import com.oracle.graal.python.lib.PyObjectGetAttr;
9998
import com.oracle.graal.python.lib.PyObjectLookupAttr;
99+
import com.oracle.graal.python.lib.PySliceNew;
100100
import com.oracle.graal.python.nodes.ErrorMessages;
101101
import com.oracle.graal.python.nodes.SpecialMethodNames;
102102
import com.oracle.graal.python.nodes.builtins.ListNodes.ConstructListNode;
@@ -751,7 +751,7 @@ abstract static class PySequenceGetSliceNode extends PythonTernaryBuiltinNode {
751751
Object getSlice(VirtualFrame frame, Object obj, long iLow, long iHigh,
752752
@Shared("check") @SuppressWarnings("unused") @Cached com.oracle.graal.python.lib.PySequenceCheckNode checkNode,
753753
@Cached PyObjectLookupAttr lookupAttrNode,
754-
@Cached SliceNodes.CreateSliceNode sliceNode,
754+
@Cached PySliceNew sliceNode,
755755
@Cached CallNode callNode,
756756
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
757757
try {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextListBuiltins.java

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,12 @@
6464
import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeWrapper;
6565
import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
6666
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
67-
import com.oracle.graal.python.builtins.objects.ints.PInt;
6867
import com.oracle.graal.python.builtins.objects.list.ListBuiltins;
6968
import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListExtendNode;
7069
import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListInsertNode;
7170
import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListSortNode;
7271
import com.oracle.graal.python.builtins.objects.list.PList;
73-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
72+
import com.oracle.graal.python.lib.PySliceNew;
7473
import com.oracle.graal.python.nodes.ErrorMessages;
7574
import com.oracle.graal.python.nodes.PGuards;
7675
import com.oracle.graal.python.nodes.builtins.ListNodes.AppendNode;
@@ -93,7 +92,6 @@
9392
import com.oracle.truffle.api.dsl.Specialization;
9493
import com.oracle.truffle.api.dsl.TypeSystemReference;
9594
import com.oracle.truffle.api.frame.VirtualFrame;
96-
import com.oracle.truffle.api.profiles.BranchProfile;
9795

9896
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
9997
@GenerateNodeFactory
@@ -265,29 +263,10 @@ protected boolean isListSubtype(VirtualFrame frame, Object obj, GetClassNode get
265263
@TypeSystemReference(PythonTypes.class)
266264
@GenerateNodeFactory
267265
abstract static class PyListGetSliceNode extends PythonTernaryBuiltinNode {
268-
269-
@Specialization
270-
Object getSlice(VirtualFrame frame, PList list, long iLow, long iHigh,
271-
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.GetItemNode getItemNode,
272-
@Cached SliceNodes.CreateSliceNode sliceNode,
273-
@Cached BranchProfile isIntRangeProfile,
274-
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
275-
try {
276-
if (PInt.isIntRange(iLow) && PInt.isIntRange(iHigh)) {
277-
isIntRangeProfile.enter();
278-
return getItemNode.execute(frame, list, sliceNode.execute((int) iLow, (int) iHigh, PNone.NONE));
279-
}
280-
return getItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE));
281-
} catch (PException e) {
282-
transformExceptionToNativeNode.execute(e);
283-
return getContext().getNativeNull();
284-
}
285-
}
286-
287266
@Specialization
288267
Object getSlice(VirtualFrame frame, PList list, Object iLow, Object iHigh,
289268
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.GetItemNode getItemNode,
290-
@Cached SliceNodes.CreateSliceNode sliceNode,
269+
@Cached PySliceNew sliceNode,
291270
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
292271
try {
293272
return getItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE));
@@ -324,29 +303,10 @@ protected boolean isListSubtype(VirtualFrame frame, Object obj, GetClassNode get
324303
@GenerateNodeFactory
325304
abstract static class PyListSetSliceNode extends PythonQuaternaryBuiltinNode {
326305

327-
@Specialization
328-
static Object getSlice(VirtualFrame frame, PList list, long iLow, long iHigh, Object s,
329-
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.SetItemNode setItemNode,
330-
@Cached SliceNodes.CreateSliceNode sliceNode,
331-
@Cached BranchProfile isIntRangeProfile,
332-
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
333-
try {
334-
if (PInt.isIntRange(iLow) && PInt.isIntRange(iHigh)) {
335-
isIntRangeProfile.enter();
336-
setItemNode.execute(frame, list, sliceNode.execute((int) iLow, (int) iHigh, PNone.NONE), s);
337-
}
338-
setItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE), s);
339-
return 0;
340-
} catch (PException e) {
341-
transformExceptionToNativeNode.execute(e);
342-
return -1;
343-
}
344-
}
345-
346306
@Specialization
347307
static Object getSlice(VirtualFrame frame, PList list, Object iLow, Object iHigh, Object s,
348308
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.SetItemNode setItemNode,
349-
@Cached SliceNodes.CreateSliceNode sliceNode,
309+
@Cached PySliceNew sliceNode,
350310
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
351311
try {
352312
setItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE), s);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextSliceBuiltins.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
import com.oracle.graal.python.builtins.CoreFunctions;
4747
import com.oracle.graal.python.builtins.Python3Core;
4848
import com.oracle.graal.python.builtins.PythonBuiltins;
49+
import com.oracle.graal.python.builtins.objects.PNone;
4950
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
50-
import com.oracle.graal.python.builtins.objects.ints.PInt;
51-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
51+
import com.oracle.graal.python.lib.PySliceNew;
5252
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5353
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5454
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
@@ -58,7 +58,6 @@
5858
import com.oracle.truffle.api.dsl.NodeFactory;
5959
import com.oracle.truffle.api.dsl.Specialization;
6060
import com.oracle.truffle.api.dsl.TypeSystemReference;
61-
import com.oracle.truffle.api.profiles.BranchProfile;
6261

6362
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
6463
@GenerateNodeFactory
@@ -79,20 +78,16 @@ public void initialize(Python3Core core) {
7978
@GenerateNodeFactory
8079
public abstract static class PySliceNewNode extends PythonTernaryBuiltinNode {
8180
@Specialization
82-
public static Object slice(long start, long stop, Object step,
83-
@Cached SliceNodes.CreateSliceNode sliceNode,
84-
@Cached BranchProfile isIntRangeProfile) {
85-
if (PInt.isIntRange(start) && PInt.isIntRange(stop)) {
86-
isIntRangeProfile.enter();
87-
return sliceNode.execute((int) start, (int) stop, step);
88-
}
89-
return sliceNode.execute(start, stop, step);
81+
public static Object slice(Object start, Object stop, Object step,
82+
@Cached PySliceNew sliceNode) {
83+
return sliceNode.execute(prepare(start), prepare(stop), prepare(step));
9084
}
9185

92-
@Specialization(guards = {"!isInteger(start) || !isInteger(stop)"})
93-
public static Object slice(Object start, Object stop, Object step,
94-
@Cached SliceNodes.CreateSliceNode sliceNode) {
95-
return sliceNode.execute(start, stop, step);
86+
private static Object prepare(Object obj) {
87+
if (obj == PNone.NO_VALUE) {
88+
return PNone.NONE;
89+
}
90+
return obj;
9691
}
9792
}
9893

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextTupleBuiltins.java

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,10 @@
6464
import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeWrapper;
6565
import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
6666
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
67-
import com.oracle.graal.python.builtins.objects.ints.PInt;
68-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
6967
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
7068
import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins.GetItemNode;
7169
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
70+
import com.oracle.graal.python.lib.PySliceNew;
7271
import com.oracle.graal.python.nodes.ErrorMessages;
7372
import com.oracle.graal.python.nodes.PGuards;
7473
import com.oracle.graal.python.nodes.PRaiseNode;
@@ -89,7 +88,6 @@
8988
import com.oracle.truffle.api.dsl.Specialization;
9089
import com.oracle.truffle.api.dsl.TypeSystemReference;
9190
import com.oracle.truffle.api.frame.VirtualFrame;
92-
import com.oracle.truffle.api.profiles.BranchProfile;
9391

9492
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
9593
@GenerateNodeFactory
@@ -198,29 +196,10 @@ public static int size(VirtualFrame frame, Object tuple,
198196
@TypeSystemReference(PythonTypes.class)
199197
@GenerateNodeFactory
200198
abstract static class PyTupleGetSliceNode extends PythonTernaryBuiltinNode {
201-
202-
@Specialization
203-
Object getSlice(VirtualFrame frame, PTuple tuple, long iLow, long iHigh,
204-
@Cached GetItemNode getItemNode,
205-
@Cached SliceNodes.CreateSliceNode sliceNode,
206-
@Cached BranchProfile isIntRangeProfile,
207-
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
208-
try {
209-
if (PInt.isIntRange(iLow) && PInt.isIntRange(iHigh)) {
210-
isIntRangeProfile.enter();
211-
return getItemNode.execute(frame, tuple, sliceNode.execute((int) iLow, (int) iHigh, PNone.NONE));
212-
}
213-
return getItemNode.execute(frame, tuple, sliceNode.execute(iLow, iHigh, PNone.NONE));
214-
} catch (PException e) {
215-
transformExceptionToNativeNode.execute(e);
216-
return getContext().getNativeNull();
217-
}
218-
}
219-
220199
@Specialization
221200
Object getSlice(VirtualFrame frame, PTuple tuple, Object iLow, Object iHigh,
222201
@Cached GetItemNode getItemNode,
223-
@Cached SliceNodes.CreateSliceNode sliceNode,
202+
@Cached PySliceNew sliceNode,
224203
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
225204
try {
226205
return getItemNode.execute(frame, tuple, sliceNode.execute(iLow, iHigh, PNone.NONE));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.GetByteArrayNode;
7979
import com.oracle.graal.python.builtins.objects.ints.PInt;
8080
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
81-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
8281
import com.oracle.graal.python.builtins.objects.str.NativeCharSequence;
8382
import com.oracle.graal.python.builtins.objects.str.PString;
8483
import com.oracle.graal.python.builtins.objects.str.StringBuiltins;
@@ -92,6 +91,7 @@
9291
import com.oracle.graal.python.builtins.objects.str.StringBuiltins.ReplaceNode;
9392
import com.oracle.graal.python.builtins.objects.str.StringBuiltins.StartsWithNode;
9493
import com.oracle.graal.python.lib.PyObjectLookupAttr;
94+
import com.oracle.graal.python.lib.PySliceNew;
9595
import com.oracle.graal.python.nodes.ErrorMessages;
9696
import com.oracle.graal.python.nodes.PGuards;
9797
import com.oracle.graal.python.nodes.call.CallNode;
@@ -409,7 +409,7 @@ public abstract static class PyUnicodeSubstringNode extends PythonTernaryBuiltin
409409
@Specialization(guards = {"isString(s) || isStringSubtype(frame, s, getClassNode, isSubtypeNode)"})
410410
public Object find(VirtualFrame frame, Object s, long start, long end,
411411
@Cached PyObjectLookupAttr lookupAttrNode,
412-
@Cached SliceNodes.CreateSliceNode sliceNode,
412+
@Cached PySliceNew sliceNode,
413413
@Cached CallNode callNode,
414414
@SuppressWarnings("unused") @Cached GetClassNode getClassNode,
415415
@SuppressWarnings("unused") @Cached IsSubtypeNode isSubtypeNode,
@@ -510,7 +510,7 @@ public abstract static class PyUnicodeTailmatchNode extends PythonBuiltinNode {
510510
@Specialization(guards = {"isAnyString(frame, string, getClassNode, isSubtypeNode)", "isAnyString(frame, substring, getClassNode, isSubtypeNode)", "direction > 0"})
511511
public static int tailmatch(VirtualFrame frame, Object string, Object substring, long start, long end, @SuppressWarnings("unused") long direction,
512512
@Cached PyObjectLookupAttr lookupAttrNode,
513-
@Cached SliceNodes.CreateSliceNode sliceNode,
513+
@Cached PySliceNew sliceNode,
514514
@Cached CallNode callNode,
515515
@Cached EndsWithNode endsWith,
516516
@SuppressWarnings("unused") @Cached GetClassNode getClassNode,
@@ -529,7 +529,7 @@ public static int tailmatch(VirtualFrame frame, Object string, Object substring,
529529
@Specialization(guards = {"isAnyString(frame, string, getClassNode, isSubtypeNode)", "isAnyString(frame, substring, getClassNode, isSubtypeNode)", "direction <= 0"})
530530
public static int tailmatch(VirtualFrame frame, Object string, Object substring, long start, long end, @SuppressWarnings("unused") long direction,
531531
@Cached PyObjectLookupAttr lookupAttrNode,
532-
@Cached SliceNodes.CreateSliceNode sliceNode,
532+
@Cached PySliceNew sliceNode,
533533
@Cached CallNode callNode,
534534
@Cached StartsWithNode endsWith,
535535
@SuppressWarnings("unused") @Cached GetClassNode getClassNode,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/ByteArrayBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@
6060
import com.oracle.graal.python.builtins.objects.list.PList;
6161
import com.oracle.graal.python.builtins.objects.slice.PSlice;
6262
import com.oracle.graal.python.builtins.objects.slice.PSlice.SliceInfo;
63-
import com.oracle.graal.python.builtins.objects.slice.SliceNodes;
6463
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
6564
import com.oracle.graal.python.builtins.objects.type.TypeBuiltins;
6665
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
6766
import com.oracle.graal.python.lib.PyIndexCheckNode;
6867
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
6968
import com.oracle.graal.python.lib.PyObjectLookupAttr;
69+
import com.oracle.graal.python.lib.PySliceNew;
7070
import com.oracle.graal.python.nodes.ErrorMessages;
7171
import com.oracle.graal.python.nodes.SpecialAttributeNames;
7272
import com.oracle.graal.python.nodes.SpecialMethodNames;
@@ -618,7 +618,7 @@ public abstract static class ClearNode extends PythonUnaryBuiltinNode {
618618
@Specialization
619619
public PNone clear(VirtualFrame frame, PByteArray byteArray,
620620
@Cached SequenceStorageNodes.DeleteNode deleteNode,
621-
@Cached SliceNodes.CreateSliceNode sliceNode) {
621+
@Cached PySliceNew sliceNode) {
622622
byteArray.checkCanResize(this);
623623
deleteNode.execute(frame, byteArray.getSequenceStorage(), sliceNode.execute(PNone.NONE, PNone.NONE, 1));
624624
return PNone.NONE;

0 commit comments

Comments
 (0)