Hi Suwa-san, On Mon, Jun 17, 2024 at 04:17:15PM +0900, Takayuki 'January June' Suwa wrote: > The previous constant synthesis logic had some issues that were non-fatal > but worth considering: > > - It didn't work with DFmode literals, because those were cast to SImode > rather SFmode when splitting into two natural-width words by > split_double(). > > - It didn't work with large literals when TARGET_AUTO_LITPOOLS was enabled, > because those were relaxed MOVI immediates rather references to literal > pool entries, > > - It didn't take into account that when literals with the same RTL > representation are pooled multiple times within a function, those entries > are shared (especially important when optimizing for size). > > This patch addresses the above issues by making appropriate tweaks to the > constant synthesis logic. > > gcc/ChangeLog: > > * config/xtensa/xtensa-protos.h (xtensa_constantsynth): > Change the second argument from HOST_WIDE_INT to rtx. > * config/xtensa/xtensa.cc (#include): > Add "context.h" and "pass_manager.h". > (machine_function): Add a new hash_map field "litpool_usage". > (xtensa_constantsynth): Make "src" (the second operand) accept > RTX literal instead of its value, and treat both bare and pooled > SI/SFmode literals equally by bit-exact canonicalization into > CONST_INT RTX internally. And then, make avoid synthesis if > such multiple identical canonicalized literals are found in same > function when optimizing for size. Finally, for literals where > synthesis is not possible or has been avoided, re-emit "move" > RTXes with canonicalized ones to increase the chances of sharing > literal pool entries. > * config/xtensa/xtensa.md (split patterns for constant synthesis): > Change to simply invoke xtensa_constantsynth() as mentioned above, > and add new patterns for when TARGET_AUTO_LITPOOLS is enabled. > --- > gcc/config/xtensa/xtensa-protos.h | 2 +- > gcc/config/xtensa/xtensa.cc | 75 ++++++++++++++++++++++++++++--- > gcc/config/xtensa/xtensa.md | 56 ++++++++++++++--------- > 3 files changed, 103 insertions(+), 30 deletions(-)
This series introduced a few ICE regressions: +FAIL: gcc.dg/atomic/c11-atomic-exec-2.c -Os (internal compiler error: Segmentation fault) +FAIL: gcc.dg/atomic/c11-atomic-exec-3.c -Os (internal compiler error: Segmentation fault) +FAIL: gcc.dg/atomic/c11-atomic-exec-4.c -Os (internal compiler error: Segmentation fault) +FAIL: gcc.dg/torture/vec-cvt-1.c -Os (internal compiler error: Segmentation fault) +FAIL: c-c++-common/torture/complex-sign-mixed-add.c -Os (internal compiler error: Segmentation fault) +FAIL: c-c++-common/torture/complex-sign-mixed-div.c -Os (internal compiler error: Segmentation fault) +FAIL: c-c++-common/torture/complex-sign-mixed-sub.c -Os (internal compiler error: Segmentation fault) +FAIL: gfortran.dg/bind-c-contiguous-1.f90 -Os (internal compiler error: Segmentation fault) +FAIL: gfortran.dg/bind-c-contiguous-4.f90 -Os (internal compiler error: Segmentation fault) +FAIL: gfortran.dg/minlocval_4.f90 -Os (internal compiler error: Segmentation fault) they all have a backtrace like this: /home/jcmvbkbc/ws/tensilica/gcc/gcc/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c: In function 'test_main_long_double_postinc': /home/jcmvbkbc/ws/tensilica/gcc/gcc/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c:73:1: internal compiler error: Segmentation fault /home/jcmvbkbc/ws/tensilica/gcc/gcc/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c:97:1: note: in expansion of macro 'TEST_FUNCS' 0xf0493f crash_signal /home/jcmvbkbc/ws/tensilica/gcc/gcc/gcc/toplev.cc:319 0x7fcc65b98d5f ??? ./signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x98cd63 lookup_page_table_entry /home/jcmvbkbc/ws/tensilica/gcc/gcc/gcc/ggc-page.cc:630 0x98cd63 ggc_set_mark(void const*) /home/jcmvbkbc/ws/tensilica/gcc/gcc/gcc/ggc-page.cc:1553 0x12b31bd gt_ggc_mx_hash_map_rtx_int_(void*) ./gt-xtensa.h:39 0xc19207 gt_ggc_mx_function(void*) /home/jcmvbkbc/ws/tensilica/gcc/builds/gcc-15-1382-g448482d3d5c2-xtensa-call0-le/gcc/gtype-desc.cc:1696 0xc19207 gt_ggc_mx_function(void*) /home/jcmvbkbc/ws/tensilica/gcc/builds/gcc-15-1382-g448482d3d5c2-xtensa-call0-le/gcc/gtype-desc.cc:1680 0x85ffe7 gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:289 0x86019c gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:381 0x860134 gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:365 0x85fa04 gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:259 0x86019c gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:381 0x86063e gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:204 0x8601be gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:383 0x85fa04 gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:259 0x86019c gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:381 0x8600ee gt_ggc_mx_lang_tree_node(void*) ./gt-c-c-decl.h:360 0xc99b58 gt_ggc_mx_ipa_return_value_summary(void*) ./gt-ipa-prop.h:44 0xc99b58 gt_ggc_mx_ipa_return_value_summary(void*) ./gt-ipa-prop.h:39 0xc99b58 gt_ggc_mx(ipa_return_value_summary*&) ./gt-ipa-prop.h:62 -- Thanks. -- Max