91
91
import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .RepeatNodeGen ;
92
92
import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .SetItemDynamicNodeGen ;
93
93
import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .SetItemNodeGen ;
94
- import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .SetItemScalarNodeGen ;
95
94
import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .SetItemSliceNodeGen ;
96
95
import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .SetLenNodeGen ;
97
96
import com .oracle .graal .python .builtins .objects .common .SequenceStorageNodesFactory .StorageToNativeNodeGen ;
@@ -1166,9 +1165,9 @@ public static SequenceStorageNodes.SetItemNode createForList() {
1166
1165
}
1167
1166
}
1168
1167
1169
- @ GenerateUncached
1168
+ @ GenerateCached ( false )
1170
1169
@ ImportStatic ({SequenceStorageBaseNode .class , PGuards .class })
1171
- public abstract static class SetItemScalarNode extends Node {
1170
+ public abstract static class AbstractSetItemScalarNode extends Node {
1172
1171
1173
1172
public abstract void execute (SequenceStorage s , int idx , Object value );
1174
1173
@@ -1250,22 +1249,42 @@ protected static void doObject(ObjectSequenceStorage storage, int idx, Object va
1250
1249
storage .setItemNormalized (idx , value );
1251
1250
}
1252
1251
1252
+ @ Fallback
1253
+ @ SuppressWarnings ("unused" )
1254
+ static void doError (SequenceStorage s , int idx , Object item ) {
1255
+ throw new SequenceStoreException (item );
1256
+ }
1257
+ }
1258
+
1259
+ @ GenerateUncached
1260
+ public abstract static class SetItemScalarNode extends AbstractSetItemScalarNode {
1261
+
1253
1262
@ InliningCutoff
1254
1263
@ Specialization
1255
1264
protected static void doNative (NativeSequenceStorage storage , int idx , Object value ,
1256
1265
@ Cached SetNativeItemScalarNode setItem ) {
1257
1266
setItem .execute (storage , idx , value );
1258
1267
}
1259
1268
1260
- @ Fallback
1261
- @ SuppressWarnings ("unused" )
1262
- static void doError (SequenceStorage s , int idx , Object item ) {
1263
- throw new SequenceStoreException (item );
1269
+ @ NeverDefault
1270
+ public static SetItemScalarNode create () {
1271
+ return SequenceStorageNodesFactory .SetItemScalarNodeGen .create ();
1272
+ }
1273
+ }
1274
+
1275
+ @ GenerateUncached
1276
+ public abstract static class InitializeItemScalarNode extends AbstractSetItemScalarNode {
1277
+
1278
+ @ InliningCutoff
1279
+ @ Specialization
1280
+ protected static void doNative (NativeSequenceStorage storage , int idx , Object value ,
1281
+ @ Cached InitializeNativeItemScalarNode initializeItem ) {
1282
+ initializeItem .execute (storage , idx , value );
1264
1283
}
1265
1284
1266
1285
@ NeverDefault
1267
- public static SetItemScalarNode create () {
1268
- return SetItemScalarNodeGen .create ();
1286
+ public static InitializeItemScalarNode create () {
1287
+ return SequenceStorageNodesFactory . InitializeItemScalarNodeGen .create ();
1269
1288
}
1270
1289
}
1271
1290
@@ -2014,11 +2033,6 @@ static boolean isByteSequenceStorage(SequenceStorage s) {
2014
2033
2015
2034
abstract static class ConcatBaseNode extends SequenceStorageBaseNode {
2016
2035
2017
- @ Child private SetItemScalarNode setItemNode ;
2018
- @ Child private GetItemScalarNode getItemNode ;
2019
- @ Child private GetItemScalarNode getRightItemNode ;
2020
- @ Child private SetLenNode setLenNode ;
2021
-
2022
2036
public abstract SequenceStorage execute (SequenceStorage dest , SequenceStorage left , SequenceStorage right );
2023
2037
2024
2038
@ Specialization (guards = "!isNative(right)" )
@@ -2046,22 +2060,24 @@ static SequenceStorage doRightEmpty(@SuppressWarnings("unused") EmptySequenceSto
2046
2060
}
2047
2061
2048
2062
@ Specialization (guards = {"dest == left" , "left.getClass() == right.getClass()" , "cachedClass == left.getClass()" }, limit = "1" )
2049
- SequenceStorage doManagedManagedSameTypeInplace (@ SuppressWarnings ("unused" ) BasicSequenceStorage dest , BasicSequenceStorage left , BasicSequenceStorage right ,
2050
- @ Cached ("left.getClass()" ) Class <? extends SequenceStorage > cachedClass ) {
2063
+ static SequenceStorage doManagedManagedSameTypeInplace (@ SuppressWarnings ("unused" ) BasicSequenceStorage dest , BasicSequenceStorage left , BasicSequenceStorage right ,
2064
+ @ Cached ("left.getClass()" ) Class <? extends SequenceStorage > cachedClass ,
2065
+ @ Shared @ Cached SetLenNode setLenNode ) {
2051
2066
SequenceStorage leftProfiled = cachedClass .cast (left );
2052
2067
SequenceStorage rightProfiled = cachedClass .cast (right );
2053
2068
Object arr1 = leftProfiled .getInternalArrayObject ();
2054
2069
int len1 = leftProfiled .length ();
2055
2070
Object arr2 = rightProfiled .getInternalArrayObject ();
2056
2071
int len2 = rightProfiled .length ();
2057
2072
PythonUtils .arraycopy (arr2 , 0 , arr1 , len1 , len2 );
2058
- getSetLenNode () .execute (leftProfiled , len1 + len2 );
2073
+ setLenNode .execute (leftProfiled , len1 + len2 );
2059
2074
return leftProfiled ;
2060
2075
}
2061
2076
2062
2077
@ Specialization (guards = {"dest != left" , "dest.getClass() == left.getClass()" , "left.getClass() == right.getClass()" , "cachedClass == dest.getClass()" }, limit = "1" )
2063
- SequenceStorage doManagedManagedSameType (BasicSequenceStorage dest , BasicSequenceStorage left , BasicSequenceStorage right ,
2064
- @ Cached ("left.getClass()" ) Class <? extends SequenceStorage > cachedClass ) {
2078
+ static SequenceStorage doManagedManagedSameType (BasicSequenceStorage dest , BasicSequenceStorage left , BasicSequenceStorage right ,
2079
+ @ Cached ("left.getClass()" ) Class <? extends SequenceStorage > cachedClass ,
2080
+ @ Shared @ Cached SetLenNode setLenNode ) {
2065
2081
SequenceStorage destProfiled = cachedClass .cast (dest );
2066
2082
SequenceStorage leftProfiled = cachedClass .cast (left );
2067
2083
SequenceStorage rightProfiled = cachedClass .cast (right );
@@ -2070,91 +2086,68 @@ SequenceStorage doManagedManagedSameType(BasicSequenceStorage dest, BasicSequenc
2070
2086
Object arr2 = rightProfiled .getInternalArrayObject ();
2071
2087
int len2 = rightProfiled .length ();
2072
2088
concat (destProfiled .getInternalArrayObject (), arr1 , len1 , arr2 , len2 );
2073
- getSetLenNode () .execute (destProfiled , len1 + len2 );
2089
+ setLenNode .execute (destProfiled , len1 + len2 );
2074
2090
return destProfiled ;
2075
2091
}
2076
2092
2077
2093
@ Specialization (guards = {"dest.getClass() == right.getClass()" , "cachedClass == dest.getClass()" }, limit = "1" )
2078
- SequenceStorage doEmptyManagedSameType (BasicSequenceStorage dest , @ SuppressWarnings ("unused" ) EmptySequenceStorage left , BasicSequenceStorage right ,
2079
- @ Cached ("dest.getClass()" ) Class <? extends SequenceStorage > cachedClass ) {
2094
+ static SequenceStorage doEmptyManagedSameType (BasicSequenceStorage dest , @ SuppressWarnings ("unused" ) EmptySequenceStorage left , BasicSequenceStorage right ,
2095
+ @ Cached ("dest.getClass()" ) Class <? extends SequenceStorage > cachedClass ,
2096
+ @ Shared @ Cached SetLenNode setLenNode ) {
2080
2097
SequenceStorage destProfiled = cachedClass .cast (dest );
2081
2098
SequenceStorage rightProfiled = cachedClass .cast (right );
2082
2099
Object arr2 = rightProfiled .getInternalArrayObject ();
2083
2100
int len2 = rightProfiled .length ();
2084
2101
PythonUtils .arraycopy (arr2 , 0 , destProfiled .getInternalArrayObject (), 0 , len2 );
2085
- getSetLenNode () .execute (destProfiled , len2 );
2102
+ setLenNode .execute (destProfiled , len2 );
2086
2103
return destProfiled ;
2087
2104
}
2088
2105
2089
2106
@ Specialization (guards = {"dest.getClass() == left.getClass()" , "cachedClass == dest.getClass()" }, limit = "1" )
2090
- SequenceStorage doManagedEmptySameType (BasicSequenceStorage dest , BasicSequenceStorage left , @ SuppressWarnings ("unused" ) EmptySequenceStorage right ,
2091
- @ Cached ("left.getClass()" ) Class <? extends SequenceStorage > cachedClass ) {
2107
+ static SequenceStorage doManagedEmptySameType (BasicSequenceStorage dest , BasicSequenceStorage left , @ SuppressWarnings ("unused" ) EmptySequenceStorage right ,
2108
+ @ Cached ("left.getClass()" ) Class <? extends SequenceStorage > cachedClass ,
2109
+ @ Shared @ Cached SetLenNode setLenNode ) {
2092
2110
SequenceStorage destProfiled = cachedClass .cast (dest );
2093
2111
SequenceStorage leftProfiled = cachedClass .cast (left );
2094
2112
Object arr1 = leftProfiled .getInternalArrayObject ();
2095
2113
int len1 = leftProfiled .length ();
2096
2114
PythonUtils .arraycopy (arr1 , 0 , destProfiled .getInternalArrayObject (), 0 , len1 );
2097
- getSetLenNode () .execute (destProfiled , len1 );
2115
+ setLenNode .execute (destProfiled , len1 );
2098
2116
return destProfiled ;
2099
2117
}
2100
2118
2101
2119
@ Specialization (guards = "dest == left" )
2102
- SequenceStorage doGenericInplace (@ SuppressWarnings ("unused" ) SequenceStorage dest , SequenceStorage left , SequenceStorage right ) {
2120
+ static SequenceStorage doGenericInplace (@ SuppressWarnings ("unused" ) SequenceStorage dest , SequenceStorage left , SequenceStorage right ,
2121
+ @ Shared @ Cached GetItemScalarNode getItemRightNode ,
2122
+ @ Shared @ Cached InitializeItemScalarNode initalizeItemNode ,
2123
+ @ Shared @ Cached SetLenNode setLenNode ) {
2103
2124
int len1 = left .length ();
2104
2125
int len2 = right .length ();
2105
2126
for (int i = 0 ; i < len2 ; i ++) {
2106
- getSetItemNode () .execute (left , i + len1 , getGetRightItemNode () .execute (right , i ));
2127
+ initalizeItemNode .execute (left , i + len1 , getItemRightNode .execute (right , i ));
2107
2128
}
2108
- getSetLenNode () .execute (left , len1 + len2 );
2129
+ setLenNode .execute (left , len1 + len2 );
2109
2130
return left ;
2110
2131
}
2111
2132
2112
2133
@ Specialization (guards = "dest != left" )
2113
- SequenceStorage doGeneric (SequenceStorage dest , SequenceStorage left , SequenceStorage right ) {
2134
+ static SequenceStorage doGeneric (SequenceStorage dest , SequenceStorage left , SequenceStorage right ,
2135
+ @ Exclusive @ Cached GetItemScalarNode getItemLeftNode ,
2136
+ @ Shared @ Cached GetItemScalarNode getItemRightNode ,
2137
+ @ Shared @ Cached InitializeItemScalarNode initalizeItemNode ,
2138
+ @ Shared @ Cached SetLenNode setLenNode ) {
2114
2139
int len1 = left .length ();
2115
2140
int len2 = right .length ();
2116
2141
for (int i = 0 ; i < len1 ; i ++) {
2117
- getSetItemNode () .execute (dest , i , getGetItemNode () .execute (left , i ));
2142
+ initalizeItemNode .execute (dest , i , getItemLeftNode .execute (left , i ));
2118
2143
}
2119
2144
for (int i = 0 ; i < len2 ; i ++) {
2120
- getSetItemNode () .execute (dest , i + len1 , getGetRightItemNode () .execute (right , i ));
2145
+ initalizeItemNode .execute (dest , i + len1 , getItemRightNode .execute (right , i ));
2121
2146
}
2122
- getSetLenNode () .execute (dest , len1 + len2 );
2147
+ setLenNode .execute (dest , len1 + len2 );
2123
2148
return dest ;
2124
2149
}
2125
2150
2126
- private SetItemScalarNode getSetItemNode () {
2127
- if (setItemNode == null ) {
2128
- CompilerDirectives .transferToInterpreterAndInvalidate ();
2129
- setItemNode = insert (SetItemScalarNode .create ());
2130
- }
2131
- return setItemNode ;
2132
- }
2133
-
2134
- private GetItemScalarNode getGetItemNode () {
2135
- if (getItemNode == null ) {
2136
- CompilerDirectives .transferToInterpreterAndInvalidate ();
2137
- getItemNode = insert (GetItemScalarNode .create ());
2138
- }
2139
- return getItemNode ;
2140
- }
2141
-
2142
- private GetItemScalarNode getGetRightItemNode () {
2143
- if (getRightItemNode == null ) {
2144
- CompilerDirectives .transferToInterpreterAndInvalidate ();
2145
- getRightItemNode = insert (GetItemScalarNode .create ());
2146
- }
2147
- return getRightItemNode ;
2148
- }
2149
-
2150
- private SetLenNode getSetLenNode () {
2151
- if (setLenNode == null ) {
2152
- CompilerDirectives .transferToInterpreterAndInvalidate ();
2153
- setLenNode = insert (SetLenNode .create ());
2154
- }
2155
- return setLenNode ;
2156
- }
2157
-
2158
2151
private static void concat (Object dest , Object arr1 , int len1 , Object arr2 , int len2 ) {
2159
2152
PythonUtils .arraycopy (arr1 , 0 , dest , 0 , len1 );
2160
2153
PythonUtils .arraycopy (arr2 , 0 , dest , len1 , len2 );
@@ -2892,12 +2885,12 @@ static SequenceStorage doEmpty(EmptySequenceStorage s, Object val, GenNodeSuppli
2892
2885
return recursive .execute (newStorage , val , genNodeSupplier );
2893
2886
}
2894
2887
2895
- @ Specialization
2896
- static SequenceStorage doManaged ( BasicSequenceStorage s , Object val , GenNodeSupplier genNodeSupplier ,
2888
+ @ Fallback
2889
+ static SequenceStorage doNonEmpty ( SequenceStorage s , Object val , GenNodeSupplier genNodeSupplier ,
2897
2890
@ Bind ("this" ) Node inliningTarget ,
2898
- @ Shared @ Cached EnsureCapacityNode ensureCapacity ,
2899
- @ Shared @ Cached SetLenNode setLenNode ,
2900
- @ Shared @ Cached SetItemScalarNode setItemNode ,
2891
+ @ Cached EnsureCapacityNode ensureCapacity ,
2892
+ @ Cached SetLenNode setLenNode ,
2893
+ @ Cached InitializeItemScalarNode initializeItemNode ,
2901
2894
@ Shared ("genNode" ) @ Cached DoGeneralizationNode doGenNode ) {
2902
2895
int len = s .length ();
2903
2896
int newLen = len + 1 ;
@@ -2906,14 +2899,14 @@ static SequenceStorage doManaged(BasicSequenceStorage s, Object val, GenNodeSupp
2906
2899
ensureCapacity .execute (inliningTarget , s , len + 1 );
2907
2900
}
2908
2901
try {
2909
- setItemNode .execute (s , len , val );
2902
+ initializeItemNode .execute (s , len , val );
2910
2903
setLenNode .execute (s , len + 1 );
2911
2904
return s ;
2912
2905
} catch (SequenceStoreException e ) {
2913
2906
SequenceStorage generalized = doGenNode .execute (genNodeSupplier , s , e .getIndicationValue ());
2914
2907
ensureCapacity .execute (inliningTarget , generalized , len + 1 );
2915
2908
try {
2916
- setItemNode .execute (generalized , len , val );
2909
+ initializeItemNode .execute (generalized , len , val );
2917
2910
setLenNode .execute (generalized , len + 1 );
2918
2911
return generalized ;
2919
2912
} catch (SequenceStoreException e1 ) {
@@ -2923,21 +2916,6 @@ static SequenceStorage doManaged(BasicSequenceStorage s, Object val, GenNodeSupp
2923
2916
}
2924
2917
}
2925
2918
2926
- @ Specialization
2927
- static SequenceStorage doNative (NativeSequenceStorage s , Object val , @ SuppressWarnings ("unused" ) GenNodeSupplier genNodeSupplier ,
2928
- @ Bind ("this" ) Node inliningTarget ,
2929
- @ Shared @ Cached EnsureCapacityNode ensureCapacity ,
2930
- @ Shared @ Cached SetLenNode setLenNode ,
2931
- @ Shared @ Cached SetItemScalarNode setItemNode ) {
2932
- assert s .getElementType () == Generic ;
2933
- int index = s .length ();
2934
- int newLength = s .length () + 1 ;
2935
- SequenceStorage resized = ensureCapacity .execute (inliningTarget , s , newLength );
2936
- setLenNode .execute (resized , newLength );
2937
- setItemNode .execute (resized , index , val );
2938
- return resized ;
2939
- }
2940
-
2941
2919
@ NeverDefault
2942
2920
public static AppendNode create () {
2943
2921
return AppendNodeGen .create ();
0 commit comments