(uop: Uop)
| 1370 | |
| 1371 | |
| 1372 | def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int, int]]: |
| 1373 | if uop.name == "_SPILL_OR_RELOAD": |
| 1374 | for inputs in range(MAX_CACHED_REGISTER+1): |
| 1375 | for outputs in range(MAX_CACHED_REGISTER+1): |
| 1376 | if inputs != outputs: |
| 1377 | yield inputs, outputs, inputs |
| 1378 | return |
| 1379 | if uop.name in ("_DEOPT", "_HANDLE_PENDING_AND_DEOPT", "_EXIT_TRACE", "_DYNAMIC_EXIT"): |
| 1380 | for i in range(MAX_CACHED_REGISTER+1): |
| 1381 | yield i, 0, 0 |
| 1382 | return |
| 1383 | if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP", "_COLD_EXIT"): |
| 1384 | yield 0, 0, 0 |
| 1385 | return |
| 1386 | if uop.name == "_ERROR_POP_N": |
| 1387 | yield 0, 0, 0 |
| 1388 | return |
| 1389 | ideal_inputs = 0 |
| 1390 | has_array = False |
| 1391 | for item in reversed(uop.stack.inputs): |
| 1392 | if item.size: |
| 1393 | has_array = True |
| 1394 | break |
| 1395 | ideal_inputs += 1 |
| 1396 | ideal_outputs = 0 |
| 1397 | for item in reversed(uop.stack.outputs): |
| 1398 | if item.size: |
| 1399 | has_array = True |
| 1400 | break |
| 1401 | ideal_outputs += 1 |
| 1402 | if ideal_inputs > MAX_CACHED_REGISTER: |
| 1403 | ideal_inputs = MAX_CACHED_REGISTER |
| 1404 | if ideal_outputs > MAX_CACHED_REGISTER: |
| 1405 | ideal_outputs = MAX_CACHED_REGISTER |
| 1406 | at_end = uop.properties.sync_sp or uop.properties.side_exit_at_end |
| 1407 | exit_depth = ideal_outputs if at_end else ideal_inputs |
| 1408 | if uop.properties.escapes or uop.properties.sync_sp or has_array or is_large(uop): |
| 1409 | yield ideal_inputs, ideal_outputs, exit_depth |
| 1410 | return |
| 1411 | for inputs in range(MAX_CACHED_REGISTER + 1): |
| 1412 | outputs = ideal_outputs - ideal_inputs + inputs |
| 1413 | if outputs < ideal_outputs: |
| 1414 | outputs = ideal_outputs |
| 1415 | elif outputs > MAX_CACHED_REGISTER: |
| 1416 | continue |
| 1417 | yield inputs, outputs, outputs if at_end else inputs |
| 1418 | |
| 1419 | |
| 1420 | def analyze_files(filenames: list[str]) -> Analysis: |
no test coverage detected
searching dependent graphs…