kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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 }