Skip to content

Commit 6896349

Browse files
committed
Fix unreachable specializations
1 parent e7e895b commit 6896349

File tree

3 files changed

+14
-36
lines changed

3 files changed

+14
-36
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ctypes/CFieldBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ static void doit(VirtualFrame frame, CFieldObject self, Object inst, Object valu
161161
cDataSetNode.execute(frame, dst, self.proto, self.setfunc, value, self.index, self.size, dst.b_ptr.withOffset(self.offset));
162162
}
163163

164-
@Specialization(guards = "!isNoValue(value)")
164+
@Specialization(guards = "isNoValue(value)")
165165
@InliningCutoff
166166
static void doit(CFieldObject self, Object inst, Object value,
167167
@Cached PRaiseNode raiseNode) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/NativeCharSequence.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -46,13 +46,8 @@
4646

4747
import com.oracle.graal.python.PythonLanguage;
4848
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.ReadUnicodeArrayNode;
49-
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
5049
import com.oracle.truffle.api.CompilerAsserts;
51-
import com.oracle.truffle.api.CompilerDirectives;
5250
import com.oracle.truffle.api.TruffleLogger;
53-
import com.oracle.truffle.api.interop.InteropLibrary;
54-
import com.oracle.truffle.api.interop.UnsupportedMessageException;
55-
import com.oracle.truffle.api.nodes.Node;
5651
import com.oracle.truffle.api.strings.TruffleString;
5752
import com.oracle.truffle.api.strings.TruffleString.Encoding;
5853

@@ -97,17 +92,6 @@ public int length() {
9792
return TruffleString.CodePointLengthNode.getUncached().execute(materialize(), TS_ENCODING);
9893
}
9994

100-
int length(Node inliningTarget, InteropLibrary lib, CastToJavaIntExactNode castToJavaIntNode) {
101-
try {
102-
int arraySize = castToJavaIntNode.execute(inliningTarget, lib.getArraySize(ptr));
103-
assert arraySize % elementSize == 0;
104-
// we need to subtract the terminating null character
105-
return arraySize / elementSize;
106-
} catch (UnsupportedMessageException e) {
107-
throw CompilerDirectives.shouldNotReachHere("pointer of NativeCharSequence is not an array");
108-
}
109-
}
110-
11195
@Override
11296
public char charAt(int index) {
11397
return (char) TruffleString.CodePointAtIndexNode.getUncached().execute(materialize(), index, TS_ENCODING);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringNodes.java

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
7474
import com.oracle.graal.python.nodes.object.GetClassNode;
7575
import com.oracle.graal.python.nodes.util.CannotCastException;
76-
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
7776
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
7877
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
7978
import com.oracle.graal.python.runtime.PythonOptions;
@@ -95,8 +94,6 @@
9594
import com.oracle.truffle.api.dsl.ImportStatic;
9695
import com.oracle.truffle.api.dsl.Specialization;
9796
import com.oracle.truffle.api.frame.VirtualFrame;
98-
import com.oracle.truffle.api.interop.InteropLibrary;
99-
import com.oracle.truffle.api.library.CachedLibrary;
10097
import com.oracle.truffle.api.nodes.Node;
10198
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
10299
import com.oracle.truffle.api.strings.TruffleString;
@@ -160,27 +157,24 @@ static int doMaterialized(PString x,
160157
return doString(x.getMaterialized(), codePointLengthNode);
161158
}
162159

163-
@Specialization(guards = "x.isNativeCharSequence()")
164-
static int doNativeCharSequence(PString x,
160+
@Specialization(guards = {"x.isNativeCharSequence()", "isKnownLength(elements)"})
161+
static int doNativeKnownLength(PString x,
162+
@Bind("x.getNativeCharSequence().getElements()") int elements) {
163+
return elements;
164+
}
165+
166+
@Specialization(guards = {"x.isNativeCharSequence()", "!isKnownLength(elements)"})
167+
static int doNativeUnknownLength(PString x,
168+
@SuppressWarnings("unused") @Bind("x.getNativeCharSequence().getElements()") int elements,
165169
@Bind("this") Node inliningTarget,
166170
@Cached StringMaterializeNode materializeNode,
167171
@Shared @Cached TruffleString.CodePointLengthNode codePointLengthNode) {
168172
return doString(materializeNode.execute(inliningTarget, x), codePointLengthNode);
169173
}
170174

171-
@Specialization(guards = {"x.isNativeCharSequence()", "x.isNativeMaterialized()"})
172-
static int nativeString(PString x,
173-
@Shared @Cached TruffleString.CodePointLengthNode codePointLengthNode) {
174-
return doString(x.getNativeCharSequence().getMaterialized(), codePointLengthNode);
175-
}
176-
177-
@Specialization(guards = {"x.isNativeCharSequence()", "!x.isNativeMaterialized()"}, replaces = "nativeString", limit = "3")
178-
static int nativeStringMat(@SuppressWarnings("unused") PString x,
179-
@Bind("this") Node inliningTarget,
180-
@Bind("x.getNativeCharSequence()") NativeCharSequence ncs,
181-
@CachedLibrary("ncs") InteropLibrary lib,
182-
@Cached CastToJavaIntExactNode castToJavaIntNode) {
183-
return ncs.length(inliningTarget, lib, castToJavaIntNode);
175+
static boolean isKnownLength(int elements) {
176+
// -1 means we have to search for the null terminator to compute the length
177+
return elements != -1;
184178
}
185179

186180
@Specialization

0 commit comments

Comments
 (0)