To document the gains from the bitmaps, here is (part of) the annotated source from callgrind profiler, showing instruction count. Before:

 1,154,400      if (bitmap_bit_p(regs_invalidated_by_call_regset, i)
 8,080,800  => bitmap.c:bitmap_bit_p (192400x)
 1,021,200          && !bitmap_bit_p (&defs_generated, i)
 5,106,000  => bitmap.c:bitmap_bit_p (170200x)
   340,400          && (!is_sibling_call
         .              || !bitmap_bit_p (df->exit_block_uses, i)
         .              || refers_to_regno_p (i, i+1,
         .                                    crtl->return_rtx, NULL)))
 2,053,500        df_ref_record (DF_REF_BASE, collection_rec, regno_reg_rtx[i
35,279,934  => df-scan.c:df_ref_record (170200x)
         .                       NULL, bb, insn_info, DF_REF_REG_DEF,
         .                       DF_REF_MAY_CLOBBER | flags);
         .      }


After:


 1,346,800      if (TEST_HARD_REG_BIT(regs_invalidated_by_call, i)
   510,600          && !TEST_HARD_REG_BIT (defs_generated, i)
   340,400          && (!is_sibling_call
         .              || !bitmap_bit_p (df->exit_block_uses, i)
         .              || refers_to_regno_p (i, i+1,
         .                                    crtl->return_rtx, NULL)))
 2,057,200        df_ref_record (DF_REF_BASE, collection_rec, regno_reg_rtx[i
35,279,934  => df-scan.c:df_ref_record (170200x)
         .                       NULL, bb, insn_info, DF_REF_REG_DEF,
         .                       DF_REF_MAY_CLOBBER | flags);
         .      }



Dimitris

Reply via email to