forked from OSchip/llvm-project
f564c6959e
This is an incremental change to the promotion feature. There are two problems with the current behavior: 1) loops with multiple exiting blocks are totally disabled 2) a counter update can only be promoted one level up in the loop nest -- which does help much for short trip count inner loops inside a high trip-count outer loops. Due to this limitation, we still saw very large profile count fluctuations from run to run for the affected loops which are usually very hot. This patch adds the support for promotion counters iteratively across the loop nest. It also turns on the promotion for loops with multiple exiting blocks (with a limit). For single-threaded applications, the performance impact is flat on average. For instance, dealII improves, but povray regresses. llvm-svn: 307863 |
||
---|---|---|
.. | ||
Inputs | ||
X86 | ||
PR28219.ll | ||
branch1.ll | ||
branch2.ll | ||
comdat_internal.ll | ||
comdat_rename.ll | ||
counter_promo.ll | ||
counter_promo_exit_merge.ll | ||
counter_promo_mexits.ll | ||
counter_promo_nest.ll | ||
criticaledge.ll | ||
diag_FE_profile.ll | ||
diag_mismatch.ll | ||
diag_no_funcprofdata.ll | ||
diag_no_profile.ll | ||
do-not-instrument.ll | ||
icp_covariant_call_return.ll | ||
icp_covariant_invoke_return.ll | ||
icp_invoke.ll | ||
icp_mismatch_msg.ll | ||
icp_vararg.ll | ||
indirect_call_annotation.ll | ||
indirect_call_profile.ll | ||
indirect_call_promotion.ll | ||
landingpad.ll | ||
loop1.ll | ||
loop2.ll | ||
memcpy.ll | ||
memop_size_annotation.ll | ||
memop_size_from_strlen.ll | ||
memop_size_opt.ll | ||
memop_size_opt_zero.ll | ||
multiple_hash_profile.ll | ||
noreturncall.ll | ||
preinline.ll | ||
select1.ll | ||
select2.ll | ||
single_bb.ll | ||
statics_counter_naming.ll | ||
switch.ll | ||
thinlto_indirect_call_promotion.ll | ||
thinlto_samplepgo_icp.ll | ||
unreachable_bb.ll |