[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 Richard Biener changed: What|Removed |Added Status|ASSIGNED|NEW Assignee|rguenth at gcc dot gnu.org |unassigned at gcc dot gnu.org
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #26 from Richard Biener --- I've enabled vec_set for hard-regs on the branch and plugged the vectorizer hole for GCC 13. I'm not sure to what extent we need the expansion change.
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #25 from GCC Commits --- The releases/gcc-13 branch has been updated by Richard Biener : https://gcc.gnu.org/g:d4c0800aab864bb95260e12342d18695c6ebbec8 commit r13-8483-gd4c0800aab864bb95260e12342d18695c6ebbec8 Author: Richard Biener Date: Mon Jan 29 09:47:31 2024 +0100 middle-end/113622 - allow .VEC_SET and .VEC_EXTRACT for global hard regs The following expands .VEC_SET and .VEC_EXTRACT instruction selection to global hard registers, not only automatic variables (possibly) promoted to registers. This can avoid some ICEs later and create better code. PR middle-end/113622 * gimple-isel.cc (gimple_expand_vec_set_extract_expr): Also allow DECL_HARD_REGISTER variables. * gcc.target/i386/pr113622-1.c: New testcase. (cherry picked from commit 96bc048d78f804bac0fa7b2ca3b6dd3a04c68217)
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #24 from Xi Ruoyao --- It looks I can rewrite the LoongArch test case (still broken though ICE is stopped) using check-function-bodies. Will try later...
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #23 from rguenther at suse dot de --- On Tue, 30 Jan 2024, xry111 at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 > > --- Comment #22 from Xi Ruoyao --- > On x86_64: > > $ cat t.c > typedef float __attribute__ ((vector_size (16))) vec; > typedef int __attribute__ ((vector_size (16))) ivec; > register vec a asm("xmm0"), b asm("xmm1"); > register ivec c asm("xmm2"); > > void > test (void) > { > for (int i = 0; i < 4; i++) > c[i] = a[i] < b[i] ? -1 : 1; > } > $ gcc/cc1 -msse2 t.c -O2 -fno-vect-cost-model -nostdinc -ffixed-xmm{0,1,2} > t.c: In function 'test': > t.c:7:1: internal compiler error: in expand_expr_addr_expr_1, at expr.cc:9139 > 7 | test (void) > | ^~~~ > 0x10e6d6e expand_expr_addr_expr_1 > ../../gcc/gcc/expr.cc:9139 > 0x10e76e2 expand_expr_addr_expr > ../../gcc/gcc/expr.cc:9252 > 0x10f73a7 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > expand_modifier, rtx_def**, bool) > ../../gcc/gcc/expr.cc:12585 > 0x10e7dc8 expand_expr_real(tree_node*, rtx_def*, machine_mode, > expand_modifier, > rtx_def**, bool) > ../../gcc/gcc/expr.cc:9440 > 0xef7346 expand_expr(tree_node*, rtx_def*, machine_mode, expand_modifier) > ../../gcc/gcc/expr.h:316 > 0x10e91fa expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > expand_modifier) > ../../gcc/gcc/expr.cc:9762 > 0x10ef77d expand_expr_real_gassign(gassign*, rtx_def*, machine_mode, > expand_modifier, rtx_def**, bool) > ../../gcc/gcc/expr.cc:11096 > 0xf2db31 expand_gimple_stmt_1 > ../../gcc/gcc/cfgexpand.cc:4010 > 0xf2ddd4 expand_gimple_stmt > ../../gcc/gcc/cfgexpand.cc:4071 > 0xf36844 expand_gimple_basic_block > ../../gcc/gcc/cfgexpand.cc:6127 > 0xf38ff8 execute > ../../gcc/gcc/cfgexpand.cc:6866 > > Should I open a new ticket or add back 14 Regression to the subject? Please open a new ticked - this seems to be another vectorizer issue. We end up with the invalid _28 = (sizetype)
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #22 from Xi Ruoyao --- On x86_64: $ cat t.c typedef float __attribute__ ((vector_size (16))) vec; typedef int __attribute__ ((vector_size (16))) ivec; register vec a asm("xmm0"), b asm("xmm1"); register ivec c asm("xmm2"); void test (void) { for (int i = 0; i < 4; i++) c[i] = a[i] < b[i] ? -1 : 1; } $ gcc/cc1 -msse2 t.c -O2 -fno-vect-cost-model -nostdinc -ffixed-xmm{0,1,2} t.c: In function 'test': t.c:7:1: internal compiler error: in expand_expr_addr_expr_1, at expr.cc:9139 7 | test (void) | ^~~~ 0x10e6d6e expand_expr_addr_expr_1 ../../gcc/gcc/expr.cc:9139 0x10e76e2 expand_expr_addr_expr ../../gcc/gcc/expr.cc:9252 0x10f73a7 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ../../gcc/gcc/expr.cc:12585 0x10e7dc8 expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ../../gcc/gcc/expr.cc:9440 0xef7346 expand_expr(tree_node*, rtx_def*, machine_mode, expand_modifier) ../../gcc/gcc/expr.h:316 0x10e91fa expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, expand_modifier) ../../gcc/gcc/expr.cc:9762 0x10ef77d expand_expr_real_gassign(gassign*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ../../gcc/gcc/expr.cc:11096 0xf2db31 expand_gimple_stmt_1 ../../gcc/gcc/cfgexpand.cc:4010 0xf2ddd4 expand_gimple_stmt ../../gcc/gcc/cfgexpand.cc:4071 0xf36844 expand_gimple_basic_block ../../gcc/gcc/cfgexpand.cc:6127 0xf38ff8 execute ../../gcc/gcc/cfgexpand.cc:6866 Should I open a new ticket or add back 14 Regression to the subject?
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #21 from Xi Ruoyao --- This still blows up on LoongArch even after r14-8498: typedef float __attribute__ ((vector_size (16))) vec; typedef int __attribute__ ((vector_size (16))) ivec; register vec a asm("f25"), b asm("f26"); register ivec c asm("f27"); void test (void) { for (int i = 0; i < 4; i++) c[i] = a[i] < b[i] ? -1 : 1; } $ gcc/cc1 -msimd=lsx t.c -O2 -fno-vect-cost-model -nostdinc t.c: In function ‘test’: t.c:7:1: internal compiler error: in expand_expr_addr_expr_1, at expr.cc:9139 7 | test (void) | ^~~~ 0x102d7cb expand_expr_addr_expr_1 ../../gcc/gcc/expr.cc:9139 0x102e13e expand_expr_addr_expr ../../gcc/gcc/expr.cc:9252 0x103df07 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ../../gcc/gcc/expr.cc:12585 0x102e824 expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ../../gcc/gcc/expr.cc:9440 0xe45096 expand_expr(tree_node*, rtx_def*, machine_mode, expand_modifier) ../../gcc/gcc/expr.h:316 0x102fc56 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, expand_modifier) ../../gcc/gcc/expr.cc:9762 0x10361c9 expand_expr_real_gassign(gassign*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ../../gcc/gcc/expr.cc:11096 0xe798de expand_gimple_stmt_1 ../../gcc/gcc/cfgexpand.cc:4010 0xe79b81 expand_gimple_stmt ../../gcc/gcc/cfgexpand.cc:4071 0xe825e3 expand_gimple_basic_block ../../gcc/gcc/cfgexpand.cc:6127 0xe84b95 execute ../../gcc/gcc/cfgexpand.cc:6866 Interestingly -fno-vect-cost-model is needed to trigger the ICE.
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 --- Comment #20 from GCC Commits --- The master branch has been updated by Jakub Jelinek : https://gcc.gnu.org/g:47b81161c98cf2ff5495d4aa6386cc3c87f9d27b commit r14-8515-g47b81161c98cf2ff5495d4aa6386cc3c87f9d27b Author: Jakub Jelinek Date: Tue Jan 30 09:31:22 2024 +0100 testsuite: Fix up pr113622-{2,3}.c for i686-linux [PR113622] The 2 new tests FAIL for me on i686-linux: .../gcc/testsuite/gcc.target/i386/pr113622-2.c:5:14: error: data type of 'a' isn't suitable for a register .../gcc/testsuite/gcc.target/i386/pr113622-2.c:5:29: error: data type of 'b' isn't suitable for a register .../gcc/testsuite/gcc.target/i386/pr113622-2.c:5:44: error: data type of 'c' isn't suitable for a register The problem is that the tests use vectors of double, something added only in SSE2, while the testcases ask for just -msse which only provides vectors of floats. So, either it should be using floats instead of doubles, or we need to add -msse2 to dg-options. I've done the latter. 2024-01-30 Jakub Jelinek PR middle-end/113622 * gcc.target/i386/pr113622-2.c: Use -msse2 instead of -msse in dg-options. * gcc.target/i386/pr113622-3.c: Likewise.
[Bug tree-optimization/113622] [11/12/13 Regression] ICE with vectors in named registers
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113622 Richard Biener changed: What|Removed |Added Known to work||14.0 Summary|[11/12/13/14 Regression]|[11/12/13 Regression] ICE |ICE with vectors in named |with vectors in named |registers |registers --- Comment #19 from Richard Biener --- Should be fixed on trunk, not sure to what extent backporting is suitable.