profile.c (12345B)
1 #include "core/profile.h" 2 3 void kit_profiler_reset(KitProfiler* p) { 4 unsigned char* b; 5 size_t i; 6 if (!p) return; 7 b = (unsigned char*)p; 8 for (i = 0; i < sizeof(*p); ++i) b[i] = 0; 9 } 10 11 const char* kit_profile_scope_name(KitProfileScope scope) { 12 switch (scope) { 13 case KIT_PROFILE_SCOPE_COMPILE_TU: 14 return "compile.tu"; 15 case KIT_PROFILE_SCOPE_COMPILE_FRONTEND: 16 return "compile.frontend"; 17 case KIT_PROFILE_SCOPE_COMPILE_OBJ_FINALIZE: 18 return "compile.obj_finalize"; 19 case KIT_PROFILE_SCOPE_COMPILE_ASM_LEX_OPEN: 20 return "compile.asm.lex_open"; 21 case KIT_PROFILE_SCOPE_COMPILE_ASM_MC_NEW: 22 return "compile.asm.mc_new"; 23 case KIT_PROFILE_SCOPE_COMPILE_ASM_PARSE: 24 return "compile.asm.parse"; 25 case KIT_PROFILE_SCOPE_COMPILE_ASM_MC_FREE: 26 return "compile.asm.mc_free"; 27 case KIT_PROFILE_SCOPE_CG: 28 return "cg"; 29 case KIT_PROFILE_SCOPE_NDT: 30 return "cg.ndt"; 31 case KIT_PROFILE_SCOPE_NATIVE_TARGET: 32 return "cg.native_target"; 33 case KIT_PROFILE_SCOPE_MC_EMIT: 34 return "mc.emit"; 35 case KIT_PROFILE_SCOPE_OPT_CFG_BUILD_1: 36 return "opt.cfg.build_1"; 37 case KIT_PROFILE_SCOPE_OPT_CFG_JUMP_CLEANUP_CFG: 38 return "opt.cfg.jump_cleanup_cfg"; 39 case KIT_PROFILE_SCOPE_OPT_CFG_BUILD_2: 40 return "opt.cfg.build_2"; 41 case KIT_PROFILE_SCOPE_OPT_CFG_SIMPLIFY_LOCAL: 42 return "opt.cfg.simplify_local"; 43 case KIT_PROFILE_SCOPE_OPT_CFG_VERIFY: 44 return "opt.cfg.verify"; 45 case KIT_PROFILE_SCOPE_OPT_MACHINIZE: 46 return "opt.machinize"; 47 case KIT_PROFILE_SCOPE_OPT_MACHINIZE_VERIFY: 48 return "opt.machinize.verify"; 49 case KIT_PROFILE_SCOPE_OPT_O1_ADDR_XFORM_PREGS: 50 return "opt.o1.addr_xform_pregs"; 51 case KIT_PROFILE_SCOPE_OPT_O1_ADDR_XFORM_VERIFY: 52 return "opt.o1.addr_xform.verify"; 53 case KIT_PROFILE_SCOPE_OPT_O1_PROMOTE_SCALAR_LOCALS: 54 return "opt.o1.promote_scalar_locals"; 55 case KIT_PROFILE_SCOPE_OPT_O1_PROMOTE_SCALAR_VERIFY: 56 return "opt.o1.promote_scalar.verify"; 57 case KIT_PROFILE_SCOPE_OPT_O1_ADDR_OF_GLOBAL_CSE: 58 return "opt.o1.addr_of_global_cse"; 59 case KIT_PROFILE_SCOPE_OPT_O1_ADDR_OF_GLOBAL_VERIFY: 60 return "opt.o1.addr_of_global.verify"; 61 case KIT_PROFILE_SCOPE_OPT_BUILD_LOOP_TREE: 62 return "opt.build_loop_tree"; 63 case KIT_PROFILE_SCOPE_OPT_O1_LOWER_LOOP_IMM: 64 return "opt.o1.lower_loop_imm"; 65 case KIT_PROFILE_SCOPE_OPT_O1_HOIST_LOOP_CONSTS: 66 return "opt.o1.hoist_loop_consts"; 67 case KIT_PROFILE_SCOPE_OPT_LIVE_BLOCKS_PRE_DDE: 68 return "opt.live_blocks.pre_dde"; 69 case KIT_PROFILE_SCOPE_OPT_DEAD_DEF_ELIM: 70 return "opt.dead_def_elim"; 71 case KIT_PROFILE_SCOPE_OPT_REGALLOC: 72 return "opt.regalloc"; 73 case KIT_PROFILE_SCOPE_OPT_REGALLOC_VERIFY: 74 return "opt.regalloc.verify"; 75 case KIT_PROFILE_SCOPE_OPT_LIVE_RANGES_REGALLOC: 76 return "opt.live_ranges.regalloc"; 77 case KIT_PROFILE_SCOPE_OPT_LOWER_MIR: 78 return "opt.lower_mir"; 79 case KIT_PROFILE_SCOPE_OPT_LOWER_MIR_VERIFY: 80 return "opt.lower_mir.verify"; 81 case KIT_PROFILE_SCOPE_OPT_COMBINE: 82 return "opt.combine"; 83 case KIT_PROFILE_SCOPE_OPT_COMBINE_VERIFY: 84 return "opt.combine.verify"; 85 case KIT_PROFILE_SCOPE_OPT_DCE: 86 return "opt.dce"; 87 case KIT_PROFILE_SCOPE_OPT_DCE_VERIFY: 88 return "opt.dce.verify"; 89 case KIT_PROFILE_SCOPE_OPT_POST_RA_JUMP_CLEANUP_CFG: 90 return "opt.post_ra.jump_cleanup_cfg"; 91 case KIT_PROFILE_SCOPE_OPT_POST_RA_BUILD_CFG: 92 return "opt.post_ra.build_cfg"; 93 case KIT_PROFILE_SCOPE_OPT_POST_RA_VERIFY: 94 return "opt.post_ra.verify"; 95 case KIT_PROFILE_SCOPE_OPT_POST_RA_JUMP_CLEANUP_LAYOUT: 96 return "opt.post_ra.jump_cleanup_layout"; 97 case KIT_PROFILE_SCOPE_OPT_EMIT: 98 return "opt.emit"; 99 case KIT_PROFILE_SCOPE_OPT_O1_TINY_INLINE: 100 return "opt.o1.tiny_inline"; 101 case KIT_PROFILE_SCOPE_OPT_O1_CG_IR_LOWER: 102 return "opt.o1.cg_ir_lower"; 103 case KIT_PROFILE_SCOPE_OPT_INLINE_TOTAL: 104 return "opt.inline.total"; 105 case KIT_PROFILE_SCOPE_OPT_O1_TOTAL: 106 return "opt.o1.total"; 107 case KIT_PROFILE_SCOPE_OPT_INTERP_TOTAL: 108 return "opt.interp.total"; 109 case KIT_PROFILE_SCOPE_OPT_NATIVE_EMIT_SETUP: 110 return "opt.native_emit.setup"; 111 case KIT_PROFILE_SCOPE_OPT_NATIVE_EMIT_FUNC_BEGIN: 112 return "opt.native_emit.func_begin"; 113 case KIT_PROFILE_SCOPE_OPT_NATIVE_EMIT_BODY: 114 return "opt.native_emit.body"; 115 case KIT_PROFILE_SCOPE_OPT_NATIVE_EMIT_FUNC_END: 116 return "opt.native_emit.func_end"; 117 case KIT_PROFILE_SCOPE_LINK_RESOLVE_TOTAL: 118 return "link.resolve.total"; 119 case KIT_PROFILE_SCOPE_LINK_INGEST_ARCHIVES: 120 return "link.ingest_archives"; 121 case KIT_PROFILE_SCOPE_LINK_RESOLVE_SYMBOLS: 122 return "link.resolve_symbols"; 123 case KIT_PROFILE_SCOPE_LINK_GC: 124 return "link.gc"; 125 case KIT_PROFILE_SCOPE_LINK_LAYOUT_SECTIONS: 126 return "link.layout_sections"; 127 case KIT_PROFILE_SCOPE_LINK_EMIT_SEGMENT_BYTES: 128 return "link.emit_segment_bytes"; 129 case KIT_PROFILE_SCOPE_LINK_LAYOUT_DEBUG: 130 return "link.layout_debug"; 131 case KIT_PROFILE_SCOPE_LINK_ASSIGN_VADDRS: 132 return "link.assign_vaddrs"; 133 case KIT_PROFILE_SCOPE_LINK_EMIT_BOUNDARIES: 134 return "link.emit_boundaries"; 135 case KIT_PROFILE_SCOPE_LINK_RESOLVE_UNDEFS: 136 return "link.resolve_undefs"; 137 case KIT_PROFILE_SCOPE_LINK_GC_DROP_DEAD: 138 return "link.gc_drop_dead"; 139 case KIT_PROFILE_SCOPE_LINK_LAYOUT_IPLT: 140 return "link.layout_iplt"; 141 case KIT_PROFILE_SCOPE_LINK_LAYOUT_JIT_STUBS: 142 return "link.layout_jit_stubs"; 143 case KIT_PROFILE_SCOPE_LINK_LAYOUT_GOT: 144 return "link.layout_got"; 145 case KIT_PROFILE_SCOPE_LINK_EMIT_RELOCATIONS: 146 return "link.emit_relocations"; 147 case KIT_PROFILE_SCOPE_LINK_LAYOUT_DYN: 148 return "link.layout_dyn"; 149 case KIT_PROFILE_SCOPE_LINK_RESOLVE_ENTRY: 150 return "link.resolve_entry"; 151 case KIT_PROFILE_SCOPE_LINK_CAPTURE_DEBUG: 152 return "link.capture_debug"; 153 case KIT_PROFILE_SCOPE_JIT_RESERVE: 154 return "jit.reserve"; 155 case KIT_PROFILE_SCOPE_JIT_COPY_SEGMENTS: 156 return "jit.copy_segments"; 157 case KIT_PROFILE_SCOPE_JIT_APPLY_RELOCS: 158 return "jit.apply_relocs"; 159 case KIT_PROFILE_SCOPE_JIT_PROTECT: 160 return "jit.protect"; 161 case KIT_PROFILE_SCOPE_JIT_FLUSH_ICACHE: 162 return "jit.flush_icache"; 163 case KIT_PROFILE_SCOPE_JIT_CTORS: 164 return "jit.ctors"; 165 case KIT_PROFILE_SCOPE_DRIVER_LOAD_SOURCES: 166 return "driver.load_sources"; 167 case KIT_PROFILE_SCOPE_DRIVER_LOAD_OBJECTS: 168 return "driver.load_objects"; 169 case KIT_PROFILE_SCOPE_DRIVER_LOAD_ARCHIVES: 170 return "driver.load_archives"; 171 case KIT_PROFILE_SCOPE_DRIVER_LINK_SETUP: 172 return "driver.link_setup"; 173 default: 174 return 0; 175 } 176 } 177 178 const char* kit_profile_counter_name(KitProfileCounter counter) { 179 switch (counter) { 180 case KIT_PROFILE_COUNTER_COMPILE_INPUT_BYTES: 181 return "compile.input_bytes"; 182 case KIT_PROFILE_COUNTER_COMPILE_OBJ_SECTIONS: 183 return "compile.obj_sections"; 184 case KIT_PROFILE_COUNTER_COMPILE_OBJ_RELOCS: 185 return "compile.obj_relocs"; 186 case KIT_PROFILE_COUNTER_CG_SWITCH_TABLE: 187 return "cg.switch.table"; 188 case KIT_PROFILE_COUNTER_CG_SWITCH_CHAIN: 189 return "cg.switch.chain"; 190 case KIT_PROFILE_COUNTER_OPT_FUNCS: 191 return "opt.funcs"; 192 case KIT_PROFILE_COUNTER_OPT_BLOCKS: 193 return "opt.blocks"; 194 case KIT_PROFILE_COUNTER_OPT_PREGS: 195 return "opt.pregs"; 196 case KIT_PROFILE_COUNTER_OPT_LIVE_WORDS: 197 return "opt.live_words"; 198 case KIT_PROFILE_COUNTER_OPT_RANGES: 199 return "opt.ranges"; 200 case KIT_PROFILE_COUNTER_OPT_RANGE_POINTS: 201 return "opt.range_points"; 202 case KIT_PROFILE_COUNTER_OPT_RANGE_RAW_POINTS: 203 return "opt.range_raw_points"; 204 case KIT_PROFILE_COUNTER_OPT_RANGE_MAX_PER_PREG: 205 return "opt.range_max_per_preg"; 206 case KIT_PROFILE_COUNTER_OPT_RANGE_MAX_LENGTH: 207 return "opt.range_max_length"; 208 case KIT_PROFILE_COUNTER_OPT_RANGE_WHOLE_BLOCK_SPANS: 209 return "opt.range_whole_block_spans"; 210 case KIT_PROFILE_COUNTER_OPT_LIVE_BITSET_WORDS_TOUCHED: 211 return "opt.live.bitset_words_touched"; 212 case KIT_PROFILE_COUNTER_OPT_LIVE_DATAFLOW_ITERATIONS: 213 return "opt.live.dataflow_iterations"; 214 case KIT_PROFILE_COUNTER_OPT_LIVE_DATAFLOW_BLOCK_VISITS: 215 return "opt.live.dataflow_block_visits"; 216 case KIT_PROFILE_COUNTER_OPT_RANGE_POINT_VISITS: 217 return "opt.range.point_visits"; 218 case KIT_PROFILE_COUNTER_OPT_RANGE_PREG_SCANS: 219 return "opt.range.preg_scans"; 220 case KIT_PROFILE_COUNTER_OPT_RANGE_LIVE_WORDS_TOUCHED: 221 return "opt.range.live_words_touched"; 222 case KIT_PROFILE_COUNTER_OPT_CONFLICT_BYTES: 223 return "opt.conflict_bytes"; 224 case KIT_PROFILE_COUNTER_OPT_COALESCE_MOVES_SEEN: 225 return "opt.coalesce.moves_seen"; 226 case KIT_PROFILE_COUNTER_OPT_COALESCE_CANDIDATES: 227 return "opt.coalesce.candidates"; 228 case KIT_PROFILE_COUNTER_OPT_COALESCE_CONFLICTS: 229 return "opt.coalesce.conflicts"; 230 case KIT_PROFILE_COUNTER_OPT_COALESCE_MERGE_ATTEMPTS: 231 return "opt.coalesce.merge_attempts"; 232 case KIT_PROFILE_COUNTER_OPT_COALESCE_MERGES: 233 return "opt.coalesce.merges"; 234 case KIT_PROFILE_COUNTER_OPT_INLINE_CANDIDATES: 235 return "opt.inline.candidates"; 236 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_POLICY: 237 return "opt.inline.refuse_policy"; 238 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SCC: 239 return "opt.inline.refuse_scc"; 240 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE: 241 return "opt.inline.refuse_shape"; 242 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_GROWTH: 243 return "opt.inline.refuse_growth"; 244 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_REWRITE_SHAPE: 245 return "opt.inline.refuse_rewrite_shape"; 246 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_REWRITE: 247 return "opt.inline.refuse_rewrite"; 248 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE_VARIADIC: 249 return "opt.inline.refuse_shape_variadic"; 250 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE_ENTRY: 251 return "opt.inline.refuse_shape_entry"; 252 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE_OP: 253 return "opt.inline.refuse_shape_op"; 254 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE_RET_POS: 255 return "opt.inline.refuse_shape_ret_pos"; 256 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE_RET_COUNT: 257 return "opt.inline.refuse_shape_ret_count"; 258 case KIT_PROFILE_COUNTER_OPT_INLINE_REFUSE_SHAPE_BUDGET: 259 return "opt.inline.refuse_shape_budget"; 260 case KIT_PROFILE_COUNTER_OPT_INLINE_INLINED: 261 return "opt.inline.inlined"; 262 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_CANDIDATES: 263 return "opt.tiny_inline.candidates"; 264 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_REFUSE_POLICY: 265 return "opt.tiny_inline.refuse_policy"; 266 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_REFUSE_SCC: 267 return "opt.tiny_inline.refuse_scc"; 268 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_REFUSE_SHAPE: 269 return "opt.tiny_inline.refuse_shape"; 270 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_REFUSE_BUDGET: 271 return "opt.tiny_inline.refuse_budget"; 272 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_REFUSE_REWRITE_SHAPE: 273 return "opt.tiny_inline.refuse_rewrite_shape"; 274 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_REFUSE_REWRITE: 275 return "opt.tiny_inline.refuse_rewrite"; 276 case KIT_PROFILE_COUNTER_OPT_TINY_INLINE_INLINED: 277 return "opt.tiny_inline.inlined"; 278 case KIT_PROFILE_COUNTER_LINK_INPUTS: 279 return "link.inputs"; 280 case KIT_PROFILE_COUNTER_LINK_SECTIONS: 281 return "link.sections"; 282 case KIT_PROFILE_COUNTER_LINK_SEGMENTS: 283 return "link.segments"; 284 case KIT_PROFILE_COUNTER_LINK_SYMS: 285 return "link.syms"; 286 case KIT_PROFILE_COUNTER_LINK_RELOCS: 287 return "link.relocs"; 288 case KIT_PROFILE_COUNTER_JIT_INPUT_SECTION_BYTES: 289 return "jit.input_section_bytes"; 290 case KIT_PROFILE_COUNTER_JIT_MASTER_SIZE: 291 return "jit.master_size"; 292 case KIT_PROFILE_COUNTER_JIT_NSEGMENTS: 293 return "jit.nsegments"; 294 case KIT_PROFILE_COUNTER_JIT_SEGMENT_BYTES: 295 return "jit.segment_bytes"; 296 case KIT_PROFILE_COUNTER_OPT_NATIVE_EMIT_SCAVENGES: 297 return "opt.native_emit.scavenges"; 298 default: 299 return 0; 300 } 301 }