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
To document the gains from the bitmaps, here is (part of) the annotated
source from callgrind profiler, showing instruction count. Before:
- [df-scan.c] Optimise DF_REFs ordering in collection_re... Dimitrios Apostolou
- Re: [df-scan.c] Optimise DF_REFs ordering in coll... Dimitrios Apostolou
- Re: [df-scan.c] Optimise DF_REFs ordering in coll... Dimitrios Apostolou
- Re: [df-scan.c] Optimise DF_REFs ordering in ... Paolo Bonzini
- Re: [df-scan.c] Optimise DF_REFs ordering... Dimitrios Apostolou
- Re: [df-scan.c] Optimise DF_REFs ordering in coll... Steven Bosscher
- Re: [df-scan.c] Optimise DF_REFs ordering in ... Dimitrios Apostolou
- Re: [df-scan.c] Optimise DF_REFs ordering in coll... Jakub Jelinek
- Re: [df-scan.c] Optimise DF_REFs ordering in ... Dimitrios Apostolou
- Re: [df-scan.c] Optimise DF_REFs ordering... Paolo Bonzini
- Re: [df-scan.c] Optimise DF_REFs ordering in coll... Richard Guenther
- Re: [df-scan.c] Optimise DF_REFs ordering in ... Dimitrios Apostolou
