On Fri, Oct 26, 2012 at 07:27:43PM +0200, Jakub Jelinek wrote: > This patch extends optimize_range_tests optimization, so that it > handles also the cases where the truth && or || has been gimplifed > as a series of GIMPLE_CONDs or mixture thereof and BIT_{AND,IOR}_EXPR > stmts.
Some statistics from x86_64-linux and i686-linux bootstraps (--enable-checking=yes,rtl --enable-languages=all,obj-c++,ada,go for x86_64 and the same without ada for i686). I've gathered how many calls to update_range_test there were, whether it was inter-bb (opcode == ERROR_MARK) or normal range merge and how many range tests were merged into one. Numberes are split for -m32 compilations and -m64 compilations during those bootstraps, vanilla numbers are normal merges with unpatched trunk, patched are normal merges with patched trunk and inter-bb are inter-bb merges with patched trunk. The patched numbers are somewhat smaller than the vanilla numbers, because some merges are done by inter-bb, but the sum of normal and inter-bb range test merges is always bigger. # ranges is how many ranges were merged together, i.e. count argument to update_range_test + 1. | -m32 | | -m64 | # ranges vanilla patched inter-bb vanilla patched inter-bb 2 57921 57136 19123 62148 61276 18927 3 2965 3359 4 2 2 879 2 2 1010 5 111 127 6 242 243 7 13 19 8 23 23 9 12 9 10 4 4 11 6 12 12 2 2 Jakub