Skip to content

Commit 21a011b

Browse files
committed
[GR-19738] Review all users of ExplodeLoop
PullRequest: graalpython/743
2 parents eab2caf + dea144e commit 21a011b

File tree

19 files changed

+77
-65
lines changed

19 files changed

+77
-65
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ overlay: "73db7dffa2266bb7e9f00fd8c6725480547b6365" }
1+
{ overlay: "ce65e9108577ef31130e4646ea4e7df0368a6358" }

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -491,11 +491,11 @@ private void evalNonInteractive(Context context) throws IOException {
491491
} catch (IOException e) {
492492
}
493493
File f = new File(inputFile);
494-
if (f.isFile() && (mimeType == null || !mimeType.equals("application/zip"))) {
495-
src = Source.newBuilder(getLanguageId(), f).mimeType(MIME_TYPE).build();
496-
} else {
494+
if (f.isDirectory() || (mimeType != null && mimeType.equals("application/zip"))) {
497495
String runMod = String.format("import sys; sys.path.insert(0, '%s'); import runpy; runpy._run_module_as_main('__main__', False)", inputFile);
498496
src = Source.newBuilder(getLanguageId(), runMod, "<string>").build();
497+
} else {
498+
src = Source.newBuilder(getLanguageId(), f).mimeType(MIME_TYPE).build();
499499
}
500500
}
501501
context.eval(src);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
import com.oracle.truffle.api.instrumentation.StandardTags;
8686
import com.oracle.truffle.api.nodes.ExecutableNode;
8787
import com.oracle.truffle.api.nodes.ExplodeLoop;
88+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
8889
import com.oracle.truffle.api.nodes.Node;
8990
import com.oracle.truffle.api.nodes.RootNode;
9091
import com.oracle.truffle.api.source.Source;
@@ -134,7 +135,7 @@ public static int getNumberOfSpecialSingletons() {
134135
return CONTEXT_INSENSITIVE_SINGLETONS.length;
135136
}
136137

137-
@ExplodeLoop
138+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
138139
public static int getSingletonNativePtrIdx(Object obj) {
139140
for (int i = 0; i < CONTEXT_INSENSITIVE_SINGLETONS.length; i++) {
140141
if (CONTEXT_INSENSITIVE_SINGLETONS[i] == obj) {

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@
195195
import com.oracle.truffle.api.interop.UnsupportedMessageException;
196196
import com.oracle.truffle.api.library.CachedLibrary;
197197
import com.oracle.truffle.api.nodes.ExplodeLoop;
198+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
198199
import com.oracle.truffle.api.nodes.Node;
199200
import com.oracle.truffle.api.nodes.NodeUtil;
200201
import com.oracle.truffle.api.nodes.NodeVisitor;
@@ -1126,7 +1127,7 @@ boolean isInstance(VirtualFrame frame, Object instance, PythonAbstractClass cls,
11261127
}
11271128

11281129
@Specialization(guards = "getLength(clsTuple) == cachedLen", limit = "getVariableArgumentInlineCacheLimit()")
1129-
@ExplodeLoop
1130+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
11301131
boolean isInstanceTupleConstantLen(VirtualFrame frame, Object instance, PTuple clsTuple,
11311132
@Cached("getLength(clsTuple)") int cachedLen,
11321133
@Cached("create()") IsInstanceNode isInstanceNode) {
@@ -1195,7 +1196,7 @@ private boolean isSubclassCheckInternal(VirtualFrame frame, Object derived, Obje
11951196
}
11961197

11971198
@Specialization(guards = "getLength(clsTuple) == cachedLen", limit = "getVariableArgumentInlineCacheLimit()")
1198-
@ExplodeLoop
1199+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
11991200
public boolean isSubclassTupleConstantLen(VirtualFrame frame, Object derived, PTuple clsTuple,
12001201
@Cached("getLength(clsTuple)") int cachedLen,
12011202
@Cached("create()") IsSubClassNode isSubclassNode) {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@
193193
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
194194
import com.oracle.graal.python.runtime.sequence.storage.MroSequenceStorage;
195195
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
196+
import com.oracle.truffle.api.CompilerAsserts;
196197
import com.oracle.truffle.api.CompilerDirectives;
197198
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
198199
import com.oracle.truffle.api.RootCallTarget;
@@ -220,6 +221,7 @@
220221
import com.oracle.truffle.api.interop.UnsupportedTypeException;
221222
import com.oracle.truffle.api.library.CachedLibrary;
222223
import com.oracle.truffle.api.nodes.ExplodeLoop;
224+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
223225
import com.oracle.truffle.api.nodes.Node;
224226
import com.oracle.truffle.api.nodes.NodeVisitor;
225227
import com.oracle.truffle.api.nodes.RootNode;
@@ -1151,10 +1153,11 @@ private static ByteBuffer readWithSize(InteropLibrary arrLib, InteropLibrary ele
11511153
return buf;
11521154
}
11531155

1154-
@ExplodeLoop
1156+
@ExplodeLoop(kind = LoopExplosionKind.FULL_EXPLODE_UNTIL_RETURN)
11551157
private static int readElement(InteropLibrary arrLib, InteropLibrary elemLib, Object arr, int i, int elementSize)
11561158
throws InvalidArrayIndexException, UnsupportedMessageException, IllegalElementTypeException {
11571159
byte[] barr = new byte[4];
1160+
CompilerAsserts.partialEvaluationConstant(elementSize);
11581161
for (int j = 0; j < elementSize; j++) {
11591162
Object elem = arrLib.readArrayElement(arr, i + j);
11601163
// The array object could be one of our wrappers (e.g. 'PySequenceArrayWrapper').

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/HandleCache.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import com.oracle.truffle.api.library.ExportMessage;
5858
import com.oracle.truffle.api.nodes.ControlFlowException;
5959
import com.oracle.truffle.api.nodes.ExplodeLoop;
60+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
6061
import com.oracle.truffle.api.nodes.Node;
6162
import com.oracle.truffle.api.profiles.BranchProfile;
6263

@@ -161,7 +162,7 @@ protected static int lookupPositionUncached(HandleCache cache, long handle, int
161162
return lookupPosition(cache, handle, len, ptrToResolveHandle, InteropLibrary.getFactory().getUncached(ptrToResolveHandle));
162163
}
163164

164-
@ExplodeLoop
165+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
165166
protected static int lookupPosition(HandleCache cache, long handle, int cachedLen, TruffleObject ptrToResolveHandle, InteropLibrary interopLibrary)
166167
throws UnsupportedTypeException, ArityException, UnsupportedMessageException {
167168
for (int i = 0; i < cachedLen; i++) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/NativeCAPISymbols.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public abstract class NativeCAPISymbols {
103103
}
104104
}
105105

106-
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL)
106+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
107107
public static boolean isValid(String name) {
108108
for (int i = 0; i < values.length; i++) {
109109
if (values[i].equals(name)) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PyMappingMethodsWrapper.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949

5050
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
5151
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
52+
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
5253
import com.oracle.truffle.api.dsl.Cached;
5354
import com.oracle.truffle.api.dsl.Cached.Exclusive;
5455
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -61,6 +62,7 @@
6162
import com.oracle.truffle.api.library.ExportLibrary;
6263
import com.oracle.truffle.api.library.ExportMessage;
6364
import com.oracle.truffle.api.nodes.ExplodeLoop;
65+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
6466
import com.oracle.truffle.api.nodes.Node;
6567
import com.oracle.truffle.llvm.spi.NativeTypeLibrary;
6668

@@ -71,13 +73,13 @@
7173
@ExportLibrary(NativeTypeLibrary.class)
7274
public class PyMappingMethodsWrapper extends PythonNativeWrapper {
7375

74-
private static final String[] MAPPING_METHODS = new String[]{
76+
@CompilationFinal(dimensions = 1) private static final String[] MAPPING_METHODS = new String[]{
7577
MP_LENGTH,
7678
MP_SUBSCRIPT,
7779
MP_ASS_SUBSCRIPT,
7880
};
7981

80-
private static final String[] MAPPING_METHODS_MAPPING = new String[]{
82+
@CompilationFinal(dimensions = 1) private static final String[] MAPPING_METHODS_MAPPING = new String[]{
8183
__LEN__,
8284
__GETITEM__,
8385
__SETITEM__,
@@ -157,7 +159,7 @@ protected static boolean eq(String expected, String actual) {
157159
}
158160
}
159161

160-
@ExplodeLoop
162+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
161163
private static String translate(String key) {
162164
for (int i = 0; i < MAPPING_METHODS.length; i++) {
163165
if (MAPPING_METHODS[i].equals(key)) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PyNumberMethodsWrapper.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
6767
import com.oracle.graal.python.nodes.SpecialMethodNames;
6868
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
69+
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
6970
import com.oracle.truffle.api.dsl.Cached;
7071
import com.oracle.truffle.api.dsl.Cached.Exclusive;
7172
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -78,6 +79,7 @@
7879
import com.oracle.truffle.api.library.ExportLibrary;
7980
import com.oracle.truffle.api.library.ExportMessage;
8081
import com.oracle.truffle.api.nodes.ExplodeLoop;
82+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
8183
import com.oracle.truffle.api.nodes.Node;
8284
import com.oracle.truffle.llvm.spi.NativeTypeLibrary;
8385

@@ -89,7 +91,7 @@
8991
@ImportStatic(SpecialMethodNames.class)
9092
public class PyNumberMethodsWrapper extends PythonNativeWrapper {
9193

92-
private static final String[] NUMBER_METHODS = new String[]{
94+
@CompilationFinal(dimensions = 1) private static final String[] NUMBER_METHODS = new String[]{
9395
NB_ADD,
9496
NB_SUBTRACT,
9597
NB_REMAINDER,
@@ -103,7 +105,7 @@ public class PyNumberMethodsWrapper extends PythonNativeWrapper {
103105
NB_INPLACE_MULTIPLY
104106
};
105107

106-
private static final String[] NUMBER_METHODS_MAPPING = new String[]{
108+
@CompilationFinal(dimensions = 1) private static final String[] NUMBER_METHODS_MAPPING = new String[]{
107109
__ADD__,
108110
__SUB__,
109111
__MOD__,
@@ -191,7 +193,7 @@ protected static boolean eq(String expected, String actual) {
191193
}
192194
}
193195

194-
@ExplodeLoop
196+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
195197
private static String translate(String key) {
196198
for (int i = 0; i < NUMBER_METHODS.length; i++) {
197199
if (NUMBER_METHODS[i].equals(key)) {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import com.oracle.truffle.api.dsl.ImportStatic;
7777
import com.oracle.truffle.api.dsl.Specialization;
7878
import com.oracle.truffle.api.nodes.ExplodeLoop;
79+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
7980
import com.oracle.truffle.api.nodes.Node;
8081
import com.oracle.truffle.api.profiles.ConditionProfile;
8182

@@ -742,7 +743,7 @@ protected abstract static class FindKwDefaultNode extends Node {
742743
public abstract PKeyword execute(PKeyword[] kwdefaults, String kwname);
743744

744745
@Specialization(guards = {"kwdefaults.length == cachedLength", "kwdefaults.length < 32"})
745-
@ExplodeLoop
746+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
746747
PKeyword doCached(PKeyword[] kwdefaults, String kwname,
747748
@Cached("kwdefaults.length") int cachedLength) {
748749
for (int j = 0; j < cachedLength; j++) {

0 commit comments

Comments
 (0)