@@ -1666,13 +1666,11 @@ def testfunc(n):
16661666 self .assertIn ("_CONTAINS_OP_DICT" , uops )
16671667 self .assertNotIn ("_TO_BOOL_BOOL" , uops )
16681668
1669-
16701669 def test_remove_guard_for_known_type_str (self ):
16711670 def f (n ):
16721671 for i in range (n ):
16731672 false = i == TIER2_THRESHOLD
16741673 empty = "X" [:false ]
1675- empty += "" # Make JIT realize this is a string.
16761674 if empty :
16771675 return 1
16781676 return 0
@@ -2249,6 +2247,34 @@ def f(n):
22492247 self .assertNotIn ("_LOAD_ATTR_METHOD_NO_DICT" , uops )
22502248 self .assertNotIn ("_LOAD_ATTR_METHOD_LAZY_DICT" , uops )
22512249
2250+ def test_remove_guard_for_slice_list (self ):
2251+ def f (n ):
2252+ for i in range (n ):
2253+ false = i == TIER2_THRESHOLD
2254+ sliced = [1 , 2 , 3 ][:false ]
2255+ if sliced :
2256+ return 1
2257+ return 0
2258+
2259+ res , ex = self ._run_with_optimizer (f , TIER2_THRESHOLD )
2260+ self .assertEqual (res , 0 )
2261+ self .assertIsNotNone (ex )
2262+ uops = get_opnames (ex )
2263+ self .assertIn ("_TO_BOOL_LIST" , uops )
2264+ self .assertNotIn ("_GUARD_TOS_LIST" , uops )
2265+
2266+ def test_remove_guard_for_slice_tuple (self ):
2267+ def f (n ):
2268+ for i in range (n ):
2269+ false = i == TIER2_THRESHOLD
2270+ a , b = (1 , 2 , 3 )[: false + 2 ]
2271+
2272+ _ , ex = self ._run_with_optimizer (f , TIER2_THRESHOLD )
2273+ self .assertIsNotNone (ex )
2274+ uops = get_opnames (ex )
2275+ self .assertIn ("_UNPACK_SEQUENCE_TWO_TUPLE" , uops )
2276+ self .assertNotIn ("_GUARD_TOS_TUPLE" , uops )
2277+
22522278
22532279def global_identity (x ):
22542280 return x
0 commit comments