https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125571
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #3)
> tree SSA rewrite : 352.44 ( 98%) 32M ( 6%)
> TOTAL : 360.54 563M
> 306.06user 0.69system 6:00.60elapsed 85%CPU (0avgtext+0avgdata
> 1160676maxresident)k
> 4880inputs+0outputs (28major+219305minor)pagefaults 0swaps
>
> so that's for 16.1 at -O0.
Halving the number of if (setjmp) {} else {} blocks gives
tree SSA rewrite : 14.71 ( 87%) 13M ( 5%)
TOTAL : 16.90 263M
16.76user 0.14system 0:16.92elapsed 99%CPU (0avgtext+0avgdata
574108maxresident)k
0inputs+0outputs (0major+101781minor)pagefaults 0swaps
3/4s of the number of if (setjmp) {} else {} blocks gives
tree SSA rewrite : 58.71 ( 94%) 21M ( 5%)
TOTAL : 62.48 424M
62.29user 0.20system 1:02.50elapsed 99%CPU (0avgtext+0avgdata
848596maxresident)k
0inputs+0outputs (0major+147906minor)pagefaults 0swaps
7/8s of the number of if (setjmp) {} else {} blocks gives
tree SSA rewrite : 107.31 ( 96%) 24M ( 5%)
TOTAL : 111.88 491M
111.63user 0.25system 1:51.91elapsed 99%CPU (0avgtext+0avgdata
993624maxresident)k
0inputs+0outputs (0major+179664minor)pagefaults 0swaps
In the above I always cut on the bottom, noticing that cuts the very
few more "complex" fprintf arguments the following happens when I
cut the first 1/8s of the if (setjmp) {} else {} blocks
tree SSA rewrite : 131.01 ( 96%) 25M ( 5%)
TOTAL : 135.85 507M
135.55user 0.27system 2:15.88elapsed 99%CPU (0avgtext+0avgdata
1036824maxresident)k
0inputs+0outputs (0major+200800minor)pagefaults 0swaps
I think we're mostly seeing cache effects due to increasing workload
size for IDF compute here, besides of at least linear growth of course.
The following is a scalable reduction:
#include <setjmp.h>
#include <stdio.h>
typedef unsigned char TRAIAN_TYPE_STEP;
TRAIAN_TYPE_STEP CAESAR_CONSTANT_PARAM__S_3_1;
TRAIAN_TYPE_STEP CAESAR_CONSTANT_PARAM__S_6_5;
jmp_buf CAESAR_SETJMP_BUFFER;
int main()
{
static FILE *CAESAR_RESULT;
CAESAR_RESULT = freopen ("/dev/null", "w", stdout);
#define X if ( _setjmp ( CAESAR_SETJMP_BUFFER) == 0) \
fprintf (CAESAR_RESULT,(((CAESAR_CONSTANT_PARAM__S_3_1) ==
(CAESAR_CONSTANT_PARAM__S_6_5))) ? "1\n" : "0\n"); \
else \
fprintf (CAESAR_RESULT,"2\n");
#define Y X X X X X X X X X X
#define Z Y Y Y Y Y Y Y Y Y Y
#define W Z Z Z Z Z Z Z Z Z Z
#define R W W W W W W W W W W
R
fclose(CAESAR_RESULT);
}