https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123744
Bug ID: 123744
Summary: ICE in gimple_ranger::prefill_stmt_dependencies during
vectorization (-O3 -march=cascadelake)
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: bouncy12578 at gmail dot com
Target Milestone: ---
Created attachment 63441
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=63441&action=edit
Preprocessed source
GCC triggers an internal compiler error when compiling the attached test case
with -O3 -march=cascadelake. Disabling tree vectorization avoids the ICE.
gcc version 16.0.0 20251225 (experimental) (GCC)
Target: x86_64-pc-linux-gnu
The preprocessed source is attached, as requested by the ICE message.
The following commands reproduce the issue.
$ gcc -v
Using built-in specs.
COLLECT_GCC=/home/lenovo/compiler-build/gcc-install/bin/gcc
COLLECT_LTO_WRAPPER=/home/lenovo/compiler-build/gcc-install/libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc/configure
--prefix=/home/lenovo/compiler-build/gcc-install --disable-bootstrap
--enable-languages=c,c++ --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 16.0.0 20251225 (experimental) (GCC)
$ cat func.c
int c, d, e;
long a;
char *b;
short f;
void g(short i[][7][7], char j[][7][7]) {
for (int h; h; h++) {
c = e ? b[1] : 0;
if (a)
d = (f ? j[0][0][1] : i[4][4][1]) / 12;
}
}
$ gcc -save-temps -v -c func.c -O3 -march=cascadelake -freport-bug
Using built-in specs.
COLLECT_GCC=/home/lenovo/compiler-build/gcc-install/bin/gcc
Target: x86_64-pc-linux-gnu
Configured with: ../gcc/configure
--prefix=/home/lenovo/compiler-build/gcc-install --disable-bootstrap
--enable-languages=c,c++ --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 16.0.0 20251225 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-save-temps' '-v' '-c' '-O3' '-march=cascadelake'
'-freport-bug'
/home/lenovo/compiler-build/gcc-install/libexec/gcc/x86_64-pc-linux-gnu/16.0.0/cc1
-E -quiet -v -imultiarch x86_64-linux-gnu func.c -march=cascadelake
-freport-bug -O3 -fpch-preprocess -o func.i
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory
"/home/lenovo/compiler-build/gcc-install/lib/gcc/x86_64-pc-linux-gnu/16.0.0/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/lenovo/compiler-build/gcc-install/lib/gcc/x86_64-pc-linux-gnu/16.0.0/include
/usr/local/include
/home/lenovo/compiler-build/gcc-install/include
/home/lenovo/compiler-build/gcc-install/lib/gcc/x86_64-pc-linux-gnu/16.0.0/include-fixed/x86_64-linux-gnu
/home/lenovo/compiler-build/gcc-install/lib/gcc/x86_64-pc-linux-gnu/16.0.0/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
COLLECT_GCC_OPTIONS='-save-temps' '-v' '-c' '-O3' '-march=cascadelake'
'-freport-bug'
/home/lenovo/compiler-build/gcc-install/libexec/gcc/x86_64-pc-linux-gnu/16.0.0/cc1
-fpreprocessed func.i -quiet -dumpbase func.c -dumpbase-ext .c
-march=cascadelake -O3 -version -freport-bug -o func.s
GNU C23 (GCC) version 16.0.0 20251225 (experimental) (x86_64-pc-linux-gnu)
compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2,
MPC version 1.1.0, isl version none
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: fcf19346c6d0163ea10df9b79f863a1d
during GIMPLE pass: vect
func.c: In function 'g':
func.c:5:6: internal compiler error: in prefill_stmt_dependencies, at
gimple-range.cc:392
5 | void g(short i[][7][7], char j[][7][7]) {
| ^
0x2630706 internal_error(char const*, ...)
../../gcc/gcc/diagnostic-global-context.cc:787
0xab23c4 fancy_abort(char const*, int, char const*)
../../gcc/gcc/diagnostics/context.cc:1805
0x8130bb gimple_ranger::prefill_stmt_dependencies(tree_node*)
../../gcc/gcc/gimple-range.cc:392
0xe8f45a gimple_ranger::range_of_stmt(vrange&, gimple*, tree_node*)
../../gcc/gcc/gimple-range.cc:339
0xe8d4a7 gimple_ranger::range_on_entry(vrange&, basic_block_def*, tree_node*)
../../gcc/gcc/gimple-range.cc:171
0xe90c92 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*)
../../gcc/gcc/gimple-range.cc:146
0xea3be8 fold_using_range::range_of_range_op(vrange&, gimple_range_op_handler&,
fur_source&)
../../gcc/gcc/gimple-range-fold.cc:750
0xea56a2 fold_using_range::fold_stmt(vrange&, gimple*, fur_source&, tree_node*)
../../gcc/gcc/gimple-range-fold.cc:681
0xe8d990 gimple_ranger::fold_range_internal(vrange&, gimple*, tree_node*)
../../gcc/gcc/gimple-range.cc:282
0xe8f257 gimple_ranger::range_of_stmt(vrange&, gimple*, tree_node*)
../../gcc/gcc/gimple-range.cc:343
0xe91077 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*)
../../gcc/gcc/gimple-range.cc:142
0xea32b4 fold_using_range::range_of_cond_expr(vrange&, gassign*, fur_source&)
../../gcc/gcc/gimple-range-fold.cc:1422
0xea58cc fold_using_range::fold_stmt(vrange&, gimple*, fur_source&, tree_node*)
../../gcc/gcc/gimple-range-fold.cc:687
0xe8d990 gimple_ranger::fold_range_internal(vrange&, gimple*, tree_node*)
../../gcc/gcc/gimple-range.cc:282
0xe8f257 gimple_ranger::range_of_stmt(vrange&, gimple*, tree_node*)
../../gcc/gcc/gimple-range.cc:343
0xe90e27 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*)
../../gcc/gcc/gimple-range.cc:112
0x2534974 vect_recog_divmod_pattern
../../gcc/gcc/tree-vect-patterns.cc:5646
0x2530046 vect_pattern_recog_1
../../gcc/gcc/tree-vect-patterns.cc:7641
0x25300ad vect_pattern_recog_1
../../gcc/gcc/tree-vect-patterns.cc:7635
0x2530201 vect_pattern_recog(vec_info*)
../../gcc/gcc/tree-vect-patterns.cc:7762
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
$ gcc -save-temps func.c -Ofast -DNDEBUG -c -march=cascadelake
-fno-tree-vectorize
$ echo $?
0