Hi, Richi. I tried to debug this ICE: (gdb) call print_gimple_stmt(stdout,stmt,0,0) vect_patt_2876.406_2862 = vect_patt_2877.405_2864 % { 6, ... }; (gdb) p type->type_common.mode $2 = E_VNx4HImode Currently, I have no ideal how to walk around this ICE in RISC-V port. Do you have any suggestions? Thanks. juzhe.zhong@rivai.ai From: Li, Pan2 Date: 2023-06-29 12:18 To: Jakub Jelinek; Richard Biener CC: gcc-patches@gcc.gnu.org; jeffreyalaw@gmail.com; kito.cheng@gmail.com; juzhe.zhong@rivai.ai; rdapp.gcc@gmail.com Subject: RE: [PATCH] Prevent TYPE_PRECISION on VECTOR_TYPEs Sorry for disturbing, cc kito, juzhe and robin for awareness. Pan -----Original Message----- From: Li, Pan2 Sent: Thursday, June 29, 2023 12:05 PM To: Jakub Jelinek ; Richard Biener Cc: gcc-patches@gcc.gnu.org; jeffreyalaw@gmail.com Subject: RE: [PATCH] Prevent TYPE_PRECISION on VECTOR_TYPEs It seems this patch may result in many test ICE failures on RISC-V backend. Could you help to double confirm about it follow the possible reproduce steps like blow? Thank you! cd gcc && mkdir __BUILD__ && cd __BUILD__ ../configure \ --target=riscv64-unknown-elf \ --prefix= \ --disable-shared \ --enable-threads \ --enable-tls \ --enable-languages=c,c++ \ --with-system-zlib \ --with-newlib \ --disable-libmudflap \ --disable-libssp \ --disable-libquadmath \ --disable-libgomp \ --enable-nls \ --disable-tm-clone-registry \ --enable-multilib \ --src=`pwd`/../ \ --with-abi=lp64d \ --with-arch=rv64imafdcv \ --with-tune=rocket \ --with-isa-spec=20191213 \ --enable-werror \ --enable-bootstrap \ CFLAGS_FOR_BUILD="-O0 -g" \ CXXFLAGS_FOR_BUILD="-O0 -g" \ CFLAGS_FOR_TARGET="-O0 -g" \ CXXFLAGS_FOR_TARGET="-O0 -g" \ BOOT_CFLAGS="-O0 -g" \ CFLAGS="-O0 -g" \ CXXFLAGS="-O0 -g" \ GM2FLAGS_FOR_TARGET="-O0 -g" \ GOCFLAGS_FOR_TARGET="-O0 -g" \ GDCFLAGS_FOR_TARGET="-O0 -g" make -j $(nproc) all-gcc && make install-gcc Then run one test file build like below, and you may see the ICE similar to below. ../__RISC-V_INSTALL_/bin/riscv64-unknown-elf-gcc -O2 --param riscv-autovec-preference=fixed-vlmax gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-3.c during GIMPLE pass: widening_mul In file included from gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-3.c:4: gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-3.c: In function 'f3_init': gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-3.c:249:1: internal compiler error: tree check: expected none of vector_type, have vector_type in divmod_candidate_p, at tree-ssa-math-opts.cc:4998 249 | f3_init (int8_t *__restrict x, int8_t *__restrict x2, int64_t *__restrict y, | ^~~~~~~ 0x1b1584e tree_not_check_failed(tree_node const*, char const*, int, char const*, ...) /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/tree.cc:8936 0xd74e9e tree_not_check(tree_node*, char const*, int, char const*, tree_code) /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/tree.h:3581 0x196150c divmod_candidate_p /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/tree-ssa-math-opts.cc:4998 0x196164f convert_to_divmod /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/tree-ssa-math-opts.cc:5041 0x196383d after_dom_children /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/tree-ssa-math-opts.cc:5580 0x299bcb4 dom_walker::walk(basic_block_def*) /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/domwalk.cc:354 0x1963d09 execute /home/pli/repos/gcc/444/riscv-gnu-toolchain/gcc/__RISC-V_BUILD__/../gcc/tree-ssa-math-opts.cc:5666 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See for instructions. Pan -----Original Message----- From: Gcc-patches On Behalf Of Jakub Jelinek via Gcc-patches Sent: Tuesday, June 27, 2023 5:47 PM To: Richard Biener Cc: gcc-patches@gcc.gnu.org; jeffreyalaw@gmail.com Subject: Re: [PATCH] Prevent TYPE_PRECISION on VECTOR_TYPEs On Tue, Jun 27, 2023 at 11:45:33AM +0200, Richard Biener wrote: > The following makes sure that using TYPE_PRECISION on VECTOR_TYPE > ICEs when tree checking is enabled. This should avoid wrong-code > in cases like PR110182 and instead ICE. > > It also introduces a TYPE_PRECISION_RAW accessor and adjusts > places I found that are eligible to use that. > > Bootstrapped and tested on x86_64-unknown-linux-gnu with all > languages enabled. > > OK for trunk? There is definitely going to be fallout but it > should be straight-forward to fix with quick fixes using > TYPE_PRECISION_RAW possible. > > Thanks, > Richard. > > * tree.h (TYPE_PRECISION): Check for non-VECTOR_TYPE. > (TYPE_PRECISION_RAW): Provide raw access to the precision > field. > * tree.cc (verify_type_variant): Compare TYPE_PRECISION_RAW. > (gimple_canonical_types_compatible_p): Likewise. > * tree-streamer-out.cc (pack_ts_type_common_value_fields): > Stream TYPE_PRECISION_RAW. > * tree-streamer-in.cc (unpack_ts_type_common_value_fields): > Likewise. > * lto-streamer-out.cc (hash_tree): Hash TYPE_PRECISION_RAW. > > gcc/lto/ > * lto-common.cc (compare_tree_sccs_1): Use TYPE_PRECISION_RAW. LGTM. Jakub