https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103467
Bug ID: 103467 Summary: [12 Regression] ICE in range_def_chain::register_dependency Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: asolokha at gmx dot com Target Milestone: --- gcc-12.0.0-alpha20211128 snapshot (g:2899d49e3701a4df18a336a680a7095cc99a2229) ICEs when compiling the following testcase w/ -O2 -fsplit-loops -funswitch-loops: int rf, ub, lq; __int128 w9, d5; __attribute__ ((simd)) void a5 (void) { int vr; vr = (w9 % lq) <= 0; vr -= ub || w9; if (vr) { rf |= d5; if (rf != 0) __builtin_unreachable (); } else d5 = w9; if (w9 && rf) lq = 0; } % MALLOC_PERTURB_=3 MALLOC_CHECK_=3 gcc-12.0.0 -O2 -fsplit-loops -funswitch-loops -c com3gnr2.c during GIMPLE pass: vrp com3gnr2.c: In function 'a5.simdclone.0': com3gnr2.c:5:1: internal compiler error: Segmentation fault 5 | a5 (void) | ^~ 0xeaad8f crash_signal /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/toplev.c:322 0x97d207 bitmap_ior_into(bitmap_head*, bitmap_head const*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/bitmap.c:2080 0x1c110e0 range_def_chain::register_dependency(tree_node*, tree_node*, basic_block_def*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-gori.cc:283 0x1c10b0c range_def_chain::get_def_chain(tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-gori.cc:377 0x1c10e74 range_def_chain::in_chain_p(tree_node*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-gori.cc:198 0x1c11b15 gori_compute::compute_operand_range(irange&, gimple*, irange const&, tree_node*, fur_source&) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-gori.cc:721 0x1c13351 gori_compute::outgoing_edge_range_p(irange&, edge_def*, tree_node*, range_query&) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-gori.cc:1254 0x1c06bf6 ranger_cache::range_on_edge(irange&, edge_def*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-cache.cc:1093 0x1c077a5 ranger_cache::range_on_edge(irange&, edge_def*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-fold.h:98 0x1c077a5 ranger_cache::propagate_cache(tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-cache.cc:1180 0x1c080dd ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-cache.cc:1392 0x1c08582 ranger_cache::block_range(irange&, basic_block_def*, tree_node*, bool) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-cache.cc:1136 0x1c024e4 gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range.cc:151 0x1c02870 gimple_ranger::range_on_exit(irange&, basic_block_def*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range.cc:187 0x1c03afe gimple_ranger::range_on_edge(irange&, edge_def*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range.cc:229 0x1c0ba4c fold_using_range::range_of_phi(irange&, gphi*, fur_source&) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-fold.cc:796 0x1c0f448 fold_using_range::fold_stmt(irange&, gimple*, fur_source&, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range-fold.cc:554 0x1c03082 gimple_ranger::fold_range_internal(irange&, gimple*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range.cc:250 0x1c03082 gimple_ranger::range_of_stmt(irange&, gimple*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range.cc:311 0x1c024cc gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*) /var/tmp/portage/sys-devel/gcc-12.0.0_p20211128/work/gcc-12-20211128/gcc/gimple-range.cc:148 ==1360540== ERROR SUMMARY: 8 errors from 2 contexts (suppressed: 0 from 0) ==1360540== ==1360540== 4 errors in context 1 of 2: ==1360540== Invalid read of size 8 ==1360540== at 0x1C110F8: set_import (gimple-range-gori.cc:213) ==1360540== by 0x1C110F8: range_def_chain::register_dependency(tree_node*, tree_node*, basic_block_def*) (gimple-range-gori.cc:285) ==1360540== by 0x1C10B0C: range_def_chain::get_def_chain(tree_node*) (gimple-range-gori.cc:377) ==1360540== by 0x1C10E74: range_def_chain::in_chain_p(tree_node*, tree_node*) (gimple-range-gori.cc:198) ==1360540== by 0x1C11B15: gori_compute::compute_operand_range(irange&, gimple*, irange const&, tree_node*, fur_source&) (gimple-range-gori.cc:721) ==1360540== by 0x1C13351: gori_compute::outgoing_edge_range_p(irange&, edge_def*, tree_node*, range_query&) (gimple-range-gori.cc:1254) ==1360540== by 0x1C06BF6: ranger_cache::range_on_edge(irange&, edge_def*, tree_node*) [clone .part.0] (gimple-range-cache.cc:1093) ==1360540== by 0x1C077A5: range_on_edge (gimple-range-fold.h:98) ==1360540== by 0x1C077A5: ranger_cache::propagate_cache(tree_node*) (gimple-range-cache.cc:1180) ==1360540== by 0x1C080DD: ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) (gimple-range-cache.cc:1392) ==1360540== by 0x1C08582: ranger_cache::block_range(irange&, basic_block_def*, tree_node*, bool) (gimple-range-cache.cc:1136) ==1360540== by 0x1C024E4: gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*) (gimple-range.cc:151) ==1360540== by 0x1C02870: gimple_ranger::range_on_exit(irange&, basic_block_def*, tree_node*) (gimple-range.cc:187) ==1360540== by 0x1C03AFE: gimple_ranger::range_on_edge(irange&, edge_def*, tree_node*) (gimple-range.cc:229) ==1360540== Address 0x61881c0 is 288 bytes inside a block of size 5,704 free'd ==1360540== at 0x484338F: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==1360540== by 0x1EAA5FC: xrealloc (xmalloc.c:181) ==1360540== by 0x1C13B1B: reserve<range_def_chain::rdc> (vec.h:290) ==1360540== by 0x1C13B1B: reserve (vec.h:1858) ==1360540== by 0x1C13B1B: safe_grow (vec.h:2006) ==1360540== by 0x1C13B1B: vec<range_def_chain::rdc, va_heap, vl_ptr>::safe_grow_cleared(unsigned int, bool) (vec.h:2025) ==1360540== by 0x1C1089C: has_def_chain (gimple-range-gori.cc:318) ==1360540== by 0x1C1089C: range_def_chain::get_def_chain(tree_node*) (gimple-range-gori.cc:336) ==1360540== by 0x1C110CF: range_def_chain::register_dependency(tree_node*, tree_node*, basic_block_def*) (gimple-range-gori.cc:280) ==1360540== by 0x1C10B0C: range_def_chain::get_def_chain(tree_node*) (gimple-range-gori.cc:377) ==1360540== by 0x1C10E74: range_def_chain::in_chain_p(tree_node*, tree_node*) (gimple-range-gori.cc:198) ==1360540== by 0x1C11B15: gori_compute::compute_operand_range(irange&, gimple*, irange const&, tree_node*, fur_source&) (gimple-range-gori.cc:721) ==1360540== by 0x1C13351: gori_compute::outgoing_edge_range_p(irange&, edge_def*, tree_node*, range_query&) (gimple-range-gori.cc:1254) ==1360540== by 0x1C06BF6: ranger_cache::range_on_edge(irange&, edge_def*, tree_node*) [clone .part.0] (gimple-range-cache.cc:1093) ==1360540== by 0x1C077A5: range_on_edge (gimple-range-fold.h:98) ==1360540== by 0x1C077A5: ranger_cache::propagate_cache(tree_node*) (gimple-range-cache.cc:1180) ==1360540== by 0x1C080DD: ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) (gimple-range-cache.cc:1392) ==1360540== Block was alloc'd at ==1360540== at 0x483E0A9: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==1360540== by 0x1EAA60F: xrealloc (xmalloc.c:179) ==1360540== by 0x1C13B1B: reserve<range_def_chain::rdc> (vec.h:290) ==1360540== by 0x1C13B1B: reserve (vec.h:1858) ==1360540== by 0x1C13B1B: safe_grow (vec.h:2006) ==1360540== by 0x1C13B1B: vec<range_def_chain::rdc, va_heap, vl_ptr>::safe_grow_cleared(unsigned int, bool) (vec.h:2025) ==1360540== by 0x1C12BA3: range_def_chain (gimple-range-gori.cc:176) ==1360540== by 0x1C12BA3: gori_map::gori_map() (gimple-range-gori.cc:451) ==1360540== by 0x1C12C41: gori_compute::gori_compute(int) (gimple-range-gori.cc:646) ==1360540== by 0x1C08637: ranger_cache::ranger_cache(int) (gimple-range-cache.cc:871) ==1360540== by 0x1C022E8: gimple_ranger::gimple_ranger() (gimple-range.cc:41) ==1360540== by 0x1C0359C: enable_ranger(function*) (gimple-range.cc:577) ==1360540== by 0x11660FF: execute_ranger_vrp(function*, bool) (tree-vrp.c:4337) ==1360540== by 0xDBBE8A: execute_one_pass(opt_pass*) (passes.c:2637) ==1360540== by 0xDBC74F: execute_pass_list_1(opt_pass*) (passes.c:2737) ==1360540== by 0xDBC761: execute_pass_list_1(opt_pass*) (passes.c:2738) ==1360540== ==1360540== ==1360540== 4 errors in context 2 of 2: ==1360540== Invalid read of size 8 ==1360540== at 0x1C110D8: range_def_chain::register_dependency(tree_node*, tree_node*, basic_block_def*) (gimple-range-gori.cc:283) ==1360540== by 0x1C10B0C: range_def_chain::get_def_chain(tree_node*) (gimple-range-gori.cc:377) ==1360540== by 0x1C10E74: range_def_chain::in_chain_p(tree_node*, tree_node*) (gimple-range-gori.cc:198) ==1360540== by 0x1C11B15: gori_compute::compute_operand_range(irange&, gimple*, irange const&, tree_node*, fur_source&) (gimple-range-gori.cc:721) ==1360540== by 0x1C13351: gori_compute::outgoing_edge_range_p(irange&, edge_def*, tree_node*, range_query&) (gimple-range-gori.cc:1254) ==1360540== by 0x1C06BF6: ranger_cache::range_on_edge(irange&, edge_def*, tree_node*) [clone .part.0] (gimple-range-cache.cc:1093) ==1360540== by 0x1C077A5: range_on_edge (gimple-range-fold.h:98) ==1360540== by 0x1C077A5: ranger_cache::propagate_cache(tree_node*) (gimple-range-cache.cc:1180) ==1360540== by 0x1C080DD: ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) (gimple-range-cache.cc:1392) ==1360540== by 0x1C08582: ranger_cache::block_range(irange&, basic_block_def*, tree_node*, bool) (gimple-range-cache.cc:1136) ==1360540== by 0x1C024E4: gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*) (gimple-range.cc:151) ==1360540== by 0x1C02870: gimple_ranger::range_on_exit(irange&, basic_block_def*, tree_node*) (gimple-range.cc:187) ==1360540== by 0x1C03AFE: gimple_ranger::range_on_edge(irange&, edge_def*, tree_node*) (gimple-range.cc:229) ==1360540== Address 0x61881b8 is 280 bytes inside a block of size 5,704 free'd ==1360540== at 0x484338F: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==1360540== by 0x1EAA5FC: xrealloc (xmalloc.c:181) ==1360540== by 0x1C13B1B: reserve<range_def_chain::rdc> (vec.h:290) ==1360540== by 0x1C13B1B: reserve (vec.h:1858) ==1360540== by 0x1C13B1B: safe_grow (vec.h:2006) ==1360540== by 0x1C13B1B: vec<range_def_chain::rdc, va_heap, vl_ptr>::safe_grow_cleared(unsigned int, bool) (vec.h:2025) ==1360540== by 0x1C1089C: has_def_chain (gimple-range-gori.cc:318) ==1360540== by 0x1C1089C: range_def_chain::get_def_chain(tree_node*) (gimple-range-gori.cc:336) ==1360540== by 0x1C110CF: range_def_chain::register_dependency(tree_node*, tree_node*, basic_block_def*) (gimple-range-gori.cc:280) ==1360540== by 0x1C10B0C: range_def_chain::get_def_chain(tree_node*) (gimple-range-gori.cc:377) ==1360540== by 0x1C10E74: range_def_chain::in_chain_p(tree_node*, tree_node*) (gimple-range-gori.cc:198) ==1360540== by 0x1C11B15: gori_compute::compute_operand_range(irange&, gimple*, irange const&, tree_node*, fur_source&) (gimple-range-gori.cc:721) ==1360540== by 0x1C13351: gori_compute::outgoing_edge_range_p(irange&, edge_def*, tree_node*, range_query&) (gimple-range-gori.cc:1254) ==1360540== by 0x1C06BF6: ranger_cache::range_on_edge(irange&, edge_def*, tree_node*) [clone .part.0] (gimple-range-cache.cc:1093) ==1360540== by 0x1C077A5: range_on_edge (gimple-range-fold.h:98) ==1360540== by 0x1C077A5: ranger_cache::propagate_cache(tree_node*) (gimple-range-cache.cc:1180) ==1360540== by 0x1C080DD: ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) (gimple-range-cache.cc:1392) ==1360540== Block was alloc'd at ==1360540== at 0x483E0A9: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==1360540== by 0x1EAA60F: xrealloc (xmalloc.c:179) ==1360540== by 0x1C13B1B: reserve<range_def_chain::rdc> (vec.h:290) ==1360540== by 0x1C13B1B: reserve (vec.h:1858) ==1360540== by 0x1C13B1B: safe_grow (vec.h:2006) ==1360540== by 0x1C13B1B: vec<range_def_chain::rdc, va_heap, vl_ptr>::safe_grow_cleared(unsigned int, bool) (vec.h:2025) ==1360540== by 0x1C12BA3: range_def_chain (gimple-range-gori.cc:176) ==1360540== by 0x1C12BA3: gori_map::gori_map() (gimple-range-gori.cc:451) ==1360540== by 0x1C12C41: gori_compute::gori_compute(int) (gimple-range-gori.cc:646) ==1360540== by 0x1C08637: ranger_cache::ranger_cache(int) (gimple-range-cache.cc:871) ==1360540== by 0x1C022E8: gimple_ranger::gimple_ranger() (gimple-range.cc:41) ==1360540== by 0x1C0359C: enable_ranger(function*) (gimple-range.cc:577) ==1360540== by 0x11660FF: execute_ranger_vrp(function*, bool) (tree-vrp.c:4337) ==1360540== by 0xDBBE8A: execute_one_pass(opt_pass*) (passes.c:2637) ==1360540== by 0xDBC74F: execute_pass_list_1(opt_pass*) (passes.c:2737) ==1360540== by 0xDBC761: execute_pass_list_1(opt_pass*) (passes.c:2738) ==1360540==