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