On 9/28/21 22:39, Andrew MacLeod wrote: > In Theory, modifying the IL should be fine, it happens already in places, but its not extensively tested under those conditions yet. Hello Andrew. I've just tried using a global gimple_ranger and it crashes when loop unswitching duplicates some BBs. Please try the attached patch for: $ ./xgcc -B. /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/loop-unswitch-1.c -O3 -c during GIMPLE pass: unswitch /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/loop-unswitch-1.c: In function ‘xml_colorize_line’: /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/loop-unswitch-1.c:6:6: internal compiler error: in get_bb_range, at gimple-range-cache.cc:255 6 | void xml_colorize_line(unsigned int *p, int state) | ^~~~~~~~~~~~~~~~~ 0x871fcf sbr_vector::get_bb_range(irange&, basic_block_def const*) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:255 0x871fcf sbr_vector::get_bb_range(irange&, basic_block_def const*) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:253 0x1b99800 ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:1332 0x1b99bc4 ranger_cache::block_range(irange&, basic_block_def*, tree_node*, bool) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:1107 0x1b9461c gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:144 0x1b95140 gimple_ranger::range_of_expr(irange&, tree_node*, gimple*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:118 0x1b9ebef fold_using_range::range_of_range_op(irange&, gimple*, fur_source&) /home/marxin/Programming/gcc/gcc/gimple-range-fold.cc:600 0x1ba0221 fold_using_range::fold_stmt(irange&, gimple*, fur_source&, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range-fold.cc:552 0x1b94a16 gimple_ranger::fold_range_internal(irange&, gimple*, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:243 0x1b94bab gimple_ranger::range_of_stmt(irange&, gimple*, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:273 0x10a5b5f tree_unswitch_single_loop /home/marxin/Programming/gcc/gcc/tree-ssa-loop-unswitch.c:390 0x10a5d62 tree_unswitch_single_loop /home/marxin/Programming/gcc/gcc/tree-ssa-loop-unswitch.c:546 0x10a68fe tree_ssa_unswitch_loops() /home/marxin/Programming/gcc/gcc/tree-ssa-loop-unswitch.c:106 Martin