Skip to content

Commit 22c2c84

Browse files
committed
Add optimization for join of length 1
1 parent 7c10b1d commit 22c2c84

File tree

2 files changed

+7
-1
lines changed
  • graalpython

2 files changed

+7
-1
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_unicode.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_additional_rsplit
1414
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_additional_split
1515
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_ascii
16+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_bug1001011
1617
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_bytes_comparison
1718
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_capitalize
1819
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_capitalize_nonascii

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ static String doPSequence(VirtualFrame frame, String self, PSequence sequence,
256256
@Cached @SuppressWarnings("unused") IsBuiltinClassProfile listProfile,
257257
@Cached SequenceNodes.GetSequenceStorageNode getSequenceStorageNode,
258258
@Cached SequenceStorageNodes.LenNode lenNode,
259-
@Cached("createBinaryProfile()") ConditionProfile isEmptyProfile,
259+
@Cached ConditionProfile isEmptyProfile,
260+
@Cached ConditionProfile isSingleItemProfile,
260261
@Cached SequenceStorageNodes.GetItemNode getItemNode,
261262
@Cached CastToJavaStringCheckedNode castToJavaStringNode,
262263
@Cached PRaiseNode raise) {
@@ -275,6 +276,10 @@ static String doPSequence(VirtualFrame frame, String self, PSequence sequence,
275276
try {
276277
// manually peel first iteration
277278
Object item = getItemNode.execute(frame, storage, i);
279+
// shortcut
280+
if (isSingleItemProfile.profile(len == 1)) {
281+
return castToJavaStringNode.cast(item, INVALID_SEQ_ITEM, i, item);
282+
}
278283
StringUtils.append(sb, castToJavaStringNode.cast(item, INVALID_SEQ_ITEM, i, item));
279284

280285
for (i = 1; i < len; i++) {

0 commit comments

Comments
 (0)