https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116591
Bug ID: 116591 Summary: internal compiler error: in to_constant or extract_insn when compiling for risc-v xtheadvector Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: shuizhuyuanluo at gmail dot com Target Milestone: --- ./riscv64-unknown-linux-gnu-g++ -c test3.c -o test3.o -march=rv64gc_zfh_xtheadvector -O3 test3.c: In function 'void transpose4x4_ps(vfloat32m1_t&, vfloat32m1_t&, vfloat32m1_t&, vfloat32m1_t&, size_t)': test3.c:7:20: internal compiler error: in to_constant, at poly-int.h:592 7 | vfloat32m1x4_t _r = vfloat32m1x4_t();// FIXME | ^~ 0x3248645 internal_error(char const*, ...) ../.././gcc/gcc/diagnostic-global-context.cc:492 0xe28c92 fancy_abort(char const*, int, char const*) ../.././gcc/gcc/diagnostic.cc:1658 0xb7318d poly_int<2u, unsigned long>::to_constant() const ../.././gcc/gcc/poly-int.h:592 0xb7318d categorize_ctor_elements_1 ../.././gcc/gcc/expr.cc:7186 0x132c7a6 categorize_ctor_elements_1 ../.././gcc/gcc/expr.cc:7139 0x143e177 gimplify_init_constructor ../.././gcc/gcc/gimplify.cc:5590 0x143f81d gimplify_modify_expr_rhs ../.././gcc/gcc/gimplify.cc:6089 0x143faac gimplify_modify_expr ../.././gcc/gcc/gimplify.cc:6479 0x142fa1f gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ../.././gcc/gcc/gimplify.cc:18114 0x14329fa gimplify_stmt(tree_node**, gimple**) ../.././gcc/gcc/gimplify.cc:7646 0x143946a gimplify_and_add(tree_node*, gimple**) ../.././gcc/gcc/gimplify.cc:516 0x143946a gimplify_decl_expr ../.././gcc/gcc/gimplify.cc:2167 0x14301d2 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ../.././gcc/gcc/gimplify.cc:18311 0x14329fa gimplify_stmt(tree_node**, gimple**) ../.././gcc/gcc/gimplify.cc:7646 0x142ff00 gimplify_cleanup_point_expr ../.././gcc/gcc/gimplify.cc:7384 0x142ff00 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ../.././gcc/gcc/gimplify.cc:18513 0x14329fa gimplify_stmt(tree_node**, gimple**) ../.././gcc/gcc/gimplify.cc:7646 0x1430343 gimplify_statement_list ../.././gcc/gcc/gimplify.cc:2250 0x1430343 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ../.././gcc/gcc/gimplify.cc:18565 0x14329fa gimplify_stmt(tree_node**, gimple**) ../.././gcc/gcc/gimplify.cc:7646 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. OK, if we change ```vfloat32m1x4_t _r = vfloat32m1x4_t();``` to ```vfloat32m1x4_t _r;``` test3.c: In function 'void transpose4x4_ps(vfloat32m1_t&, vfloat32m1_t&, vfloat32m1_t&, vfloat32m1_t&, size_t)': test3.c:20:1: error: unrecognizable insn: 20 | } | ^ (insn 35 34 36 2 (set (subreg:RVVM1SF (reg/v:RVVM1x4SF 142 [ _r ]) 0) (unspec:RVVM1SF [ (const_vector:RVVM1SF repeat [ (const_double:SF 0.0 [0x0.0p+0]) ]) (reg:DI 0 zero) (const_int 1 [0x1]) (reg:SI 66 vl) (reg:SI 67 vtype) ] UNSPEC_TH_VWLDST)) -1 (nil)) during RTL pass: mode_sw test3.c:20:1: internal compiler error: in extract_insn, at recog.cc:2882 0x3248645 internal_error(char const*, ...) ../.././gcc/gcc/diagnostic-global-context.cc:492 0xe28c92 fancy_abort(char const*, int, char const*) ../.././gcc/gcc/diagnostic.cc:1658 0xc01cdf _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ../.././gcc/gcc/rtl-error.cc:108 0xc01d01 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) ../.././gcc/gcc/rtl-error.cc:116 0xc00205 extract_insn(rtx_insn*) ../.././gcc/gcc/recog.cc:2882 0x1bcbf44 asm_insn_p ../.././gcc/gcc/config/riscv/riscv.cc:11512 0x1bcbf44 vxrm_unknown_p ../.././gcc/gcc/config/riscv/riscv.cc:11533 0x1bcbf44 riscv_vxrm_mode_after ../.././gcc/gcc/config/riscv/riscv.cc:11556 0x1bcbf44 riscv_mode_after ../.././gcc/gcc/config/riscv/riscv.cc:11598 0x2caa35e optimize_mode_switching ../.././gcc/gcc/mode-switching.cc:987 0x2caa35e execute ../.././gcc/gcc/mode-switching.cc:1324 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. $ ./riscv64-unknown-linux-gnu-g++ -v Using built-in specs. COLLECT_GCC=./riscv64-unknown-linux-gnu-g++ COLLECT_LTO_WRAPPER=/data/action/osd/riscv/libexec/gcc/riscv64-unknown-linux-gnu/15.0.0/lto-wrapper Target: riscv64-unknown-linux-gnu Configured with: /data/action/osd/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/data/action/osd/riscv --with-sysroot=/data/action/osd/riscv/sysroot --with-pkgversion=g155da081706 --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-default-pie --disable-multilib --with-abi=lp64d --with-arch=rv64imafdc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' Thread model: posix Supported LTO compression algorithms: zlib gcc version 15.0.0 20240829 (experimental) (g155da081706) ------------- soucecode ------------- #include <riscv_vector.h> void transpose4x4_ps(vfloat32m1_t& _r0, vfloat32m1_t& _r1, vfloat32m1_t& _r2, vfloat32m1_t& _r3, size_t vl) { float tmp[16]; vfloat32m1x4_t _r;// = vfloat32m1x4_t();// FIXME _r = __riscv_vset_v_f32m1_f32m1x4(_r, 0, _r0); _r = __riscv_vset_v_f32m1_f32m1x4(_r, 1, _r1); _r = __riscv_vset_v_f32m1_f32m1x4(_r, 2, _r2); _r = __riscv_vset_v_f32m1_f32m1x4(_r, 3, _r3); __riscv_vsseg4e32_v_f32m1x4(&tmp[0], _r, vl); float* ptr = (float*)tmp; _r0 = __riscv_vle32_v_f32m1(ptr + 0 * 4, vl); _r1 = __riscv_vle32_v_f32m1(ptr + 1 * 4, vl); _r2 = __riscv_vle32_v_f32m1(ptr + 2 * 4, vl); _r3 = __riscv_vle32_v_f32m1(ptr + 3 * 4, vl); }