| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- -- Test cases for basic block execution frequency analysis.
- --
- -- These test cases are using exception transform test machinery for convenience.
- --
- -- NOTE: These must all have the _freq suffix
- [case testSimpleError_freq]
- from typing import List
- def f(x: List[int]) -> int:
- return x[0]
- [out]
- def f(x):
- x :: list
- r0 :: object
- r1, r2 :: int
- L0:
- r0 = CPyList_GetItemShort(x, 0)
- if is_error(r0) goto L3 (error at f:3) else goto L1
- L1:
- r1 = unbox(int, r0)
- dec_ref r0
- if is_error(r1) goto L3 (error at f:3) else goto L2
- L2:
- return r1
- L3:
- r2 = <error> :: int
- return r2
- hot blocks: [0, 1, 2]
- [case testHotBranch_freq]
- from typing import List
- def f(x: bool) -> None:
- if x:
- y = 1
- else:
- y = 2
- [out]
- def f(x):
- x :: bool
- y :: int
- L0:
- if x goto L1 else goto L2 :: bool
- L1:
- y = 2
- dec_ref y :: int
- goto L3
- L2:
- y = 4
- dec_ref y :: int
- L3:
- return 1
- hot blocks: [0, 1, 2, 3]
- [case testGoto_freq]
- from typing import List
- def f(x: bool) -> int:
- if x:
- y = 1
- else:
- return 2
- return y
- [out]
- def f(x):
- x :: bool
- y :: int
- L0:
- if x goto L1 else goto L2 :: bool
- L1:
- y = 2
- goto L3
- L2:
- return 4
- L3:
- return y
- hot blocks: [0, 1, 2, 3]
- [case testFalseOnError_freq]
- from typing import List
- def f(x: List[int]) -> None:
- x[0] = 1
- [out]
- def f(x):
- x :: list
- r0 :: object
- r1 :: bit
- r2 :: None
- L0:
- r0 = object 1
- inc_ref r0
- r1 = CPyList_SetItem(x, 0, r0)
- if not r1 goto L2 (error at f:3) else goto L1 :: bool
- L1:
- return 1
- L2:
- r2 = <error> :: None
- return r2
- hot blocks: [0, 1]
- [case testRareBranch_freq]
- from typing_extensions import Final
- x: Final = str()
- def f() -> str:
- return x
- [out]
- def f():
- r0 :: str
- r1 :: bool
- r2 :: str
- L0:
- r0 = __main__.x :: static
- if is_error(r0) goto L1 else goto L3
- L1:
- r1 = raise NameError('value for final name "x" was not set')
- if not r1 goto L4 (error at f:6) else goto L2 :: bool
- L2:
- unreachable
- L3:
- inc_ref r0
- return r0
- L4:
- r2 = <error> :: str
- return r2
- hot blocks: [0, 3]
|