https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92657
Bug ID: 92657
Summary: High stack usage due ftree-ch
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: adhemerval.zanella at linaro dot org
Target Milestone: ---
Created attachment 47351
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47351&action=edit
High stack usage due ftree-ch
The code snippet (gcc_free_ch_stack.c) shows a high stack usage. With GCC
9.2.1 I see the resulting stack usage using -fstack-usage along with -O2:
arm 632
aarch64 448
powerpc 912
powerpc64le 560
s390 600
s390x 632
i386 1376
x86_64 784
The same issue also shows in master branch. It seems that it is due -ftree-ch
pass with feeds -ftree-loop-im, -ftree-pre, -fmove-loop-invariants, and -fgcse.
Andrew Pinski suggested is mostly due lack of a good estimate register pressure
for loop invariant code motion.
Andrew also suggested to use -fno-tree-loop-im -fno-tree-pre -fno-gcse, however
even with this options the resulting stack usage does not get in par with -Os
option (which disables -ftree-ch). On powerpc64le:
$ ./gcc/xgcc -v 2>&1 | grep 'gcc version'
gcc version 10.0.0 20191121 (experimental) (GCC)
$ ./gcc/xgcc -B gcc -O2 stack_usage.c -fstack-usage -c; cat stack_usage.su
stack_usage.c:157:6:mlx5e_grp_sw_update_stats 496 static
$ ./gcc/xgcc -B gcc -O2 stack_usage.c -fstack-usage -c -fno-tree-loop-im
-fno-tree-pre -fno-move-loop-invariants -fno-gcse; cat stack_usage.su
stack_usage.c:157:6:mlx5e_grp_sw_update_stats 176 static$ ./gcc/xgcc -B
gcc -Os stack_usage.c -fstack-usage -c; cat stack_usage.su
$ ./gcc/xgcc -B gcc -Os stack_usage.c -fstack-usage -c; cat stack_usage.su
stack_usage.c:157:6:mlx5e_grp_sw_update_stats 32 static