[aot] Add more stats to the AOT compiler output.
authorZoltan Varga <vargaz@gmail.com>
Wed, 26 Mar 2014 21:56:31 +0000 (17:56 -0400)
committerZoltan Varga <vargaz@gmail.com>
Wed, 26 Mar 2014 21:56:31 +0000 (17:56 -0400)
mono/mini/aot-compiler.c

index 849bbcc65d1e441d2c96a603a09be7d4948b5232..dc1d868f343d4df6c89f70c1da158f79e6872121 100644 (file)
@@ -150,7 +150,7 @@ typedef struct MonoAotOptions {
 
 typedef struct MonoAotStats {
        int ccount, mcount, lmfcount, abscount, gcount, ocount, genericcount;
-       int code_size, info_size, ex_info_size, unwind_info_size, got_size, class_info_size, got_info_size;
+       int code_size, info_size, ex_info_size, unwind_info_size, got_size, class_info_size, got_info_size, plt_size;
        int methods_without_got_slots, direct_calls, all_calls, llvm_count;
        int got_slots, offsets_size;
        int got_slot_types [MONO_PATCH_INFO_NONE];
@@ -925,6 +925,7 @@ arch_emit_plt_entry (MonoAotCompile *acfg, int index)
                emit_symbol_diff (acfg, acfg->got_symbol, ".", ((acfg->plt_got_offset_base + index) * sizeof (gpointer)) -4);
                /* Used by mono_aot_get_plt_info_offset */
                emit_int32 (acfg, acfg->plt_got_info_offsets [index]);
+               acfg->stats.plt_size += 10;
 #elif defined(__native_client_codegen__)
                guint8 buf [256];
                guint8 *buf_aligned = ALIGN_TO(buf, kNaClAlignment);
@@ -8677,7 +8678,7 @@ int
 mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
 {
        MonoImage *image = ass->image;
-       int i, res;
+       int i, res, all_sizes;
        MonoAotCompile *acfg;
        char *outfile_name, *tmp_outfile_name, *p;
        char llvm_stats_msg [256];
@@ -9027,7 +9028,19 @@ mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
                sprintf (llvm_stats_msg, ", LLVM: %d (%d%%)", acfg->stats.llvm_count, acfg->stats.mcount ? (acfg->stats.llvm_count * 100) / acfg->stats.mcount : 100);
        else
                strcpy (llvm_stats_msg, "");
-       printf ("Code: %d Info: %d Ex Info: %d Unwind Info: %d Class Info: %d PLT: %d GOT Info: %d GOT: %d Offsets: %d\n", acfg->stats.code_size, acfg->stats.info_size, acfg->stats.ex_info_size, acfg->stats.unwind_info_size, acfg->stats.class_info_size, acfg->plt_offset, acfg->stats.got_info_size, (int)(acfg->got_offset * sizeof (gpointer)), acfg->stats.offsets_size);
+
+       all_sizes = acfg->stats.code_size + acfg->stats.info_size + acfg->stats.ex_info_size + acfg->stats.unwind_info_size + acfg->stats.class_info_size + acfg->stats.got_info_size + acfg->stats.offsets_size + acfg->stats.plt_size;
+
+       printf ("Code: %d(%d%%) Info: %d(%d%%) Ex Info: %d(%d%%) Unwind Info: %d(%d%%) Class Info: %d(%d%%) PLT: %d(%d%%) GOT Info: %d(%d%%) Offsets: %d(%d%%) GOT: %d\n",
+                       acfg->stats.code_size, acfg->stats.code_size * 100 / all_sizes,
+                       acfg->stats.info_size, acfg->stats.info_size * 100 / all_sizes,
+                       acfg->stats.ex_info_size, acfg->stats.ex_info_size * 100 / all_sizes,
+                       acfg->stats.unwind_info_size, acfg->stats.unwind_info_size * 100 / all_sizes,
+                       acfg->stats.class_info_size, acfg->stats.class_info_size * 100 / all_sizes,
+                       acfg->stats.plt_size ? acfg->stats.plt_size : acfg->plt_offset, acfg->stats.plt_size ? acfg->stats.plt_size * 100 / all_sizes : 0,
+                       acfg->stats.got_info_size, acfg->stats.got_info_size * 100 / all_sizes,
+                       acfg->stats.offsets_size, acfg->stats.offsets_size * 100 / all_sizes,
+                       (int)(acfg->got_offset * sizeof (gpointer)));
        printf ("Compiled: %d/%d (%d%%)%s, No GOT slots: %d (%d%%), Direct calls: %d (%d%%)\n", 
                        acfg->stats.ccount, acfg->stats.mcount, acfg->stats.mcount ? (acfg->stats.ccount * 100) / acfg->stats.mcount : 100,
                        llvm_stats_msg,