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);
}

Reply via email to