fprintf(out, "opcode[BINARY_SLICE].specializable : 1\n");
fprintf(out, "opcode[STORE_SLICE].specializable : 1\n");
for (int i = 0; i < 256; i++) {
- if (_PyOpcode_Caches[i]) {
+ if (_PyOpcode_Caches[i] && i != JUMP_BACKWARD) {
fprintf(out, "opcode[%s].specializable : 1\n", _PyOpcode_OpName[i]);
}
PRINT_STAT(i, specialization.success);
def get_specialized_total_counts(self) -> tuple[int, int, int]:
basic = 0
- specialized = 0
+ specialized_hits = 0
+ specialized_misses = 0
not_specialized = 0
for opcode, opcode_stat in self._data.items():
if "execution_count" not in opcode_stat:
not_specialized += count
elif opcode in self._specialized_instructions:
miss = opcode_stat.get("specialization.miss", 0)
- not_specialized += miss
- specialized += count - miss
+ specialized_hits += count - miss
+ specialized_misses += miss
else:
basic += count
- return basic, specialized, not_specialized
+ return basic, specialized_hits, specialized_misses, not_specialized
def get_deferred_counts(self) -> dict[str, int]:
return {
opcode: opcode_stat.get("specialization.deferred", 0)
for opcode, opcode_stat in self._data.items()
+ if opcode != "RESUME"
}
def get_misses_counts(self) -> dict[str, int]:
(
basic,
- specialized,
+ specialized_hits,
+ specialized_misses,
not_specialized,
) = opcode_stats.get_specialized_total_counts()
Count(not_specialized),
Ratio(not_specialized, total),
),
- ("Specialized", Count(specialized), Ratio(specialized, total)),
+ (
+ "Specialized hits",
+ Count(specialized_hits),
+ Ratio(specialized_hits, total),
+ ),
+ (
+ "Specialized misses",
+ Count(specialized_misses),
+ Ratio(specialized_misses, total),
+ ),
]
def calc_deferred_by_table(stats: Stats) -> Rows: