https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117100
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Depends on| |109934 --- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #7) > (In reply to Sam James from comment #6) > > Simplified a bit: > > Just some debug: > > When we create one of the unswitch_predicate for the second switch, we have: > > true_range: > [irange] int [4, 4][6, 6][8, 8] NONZERO 0xf > false_range: > [irange] int [4, +INF] NONZERO 0x7fffffff > > That false_range looks wrong because there is no . > > It was created by doing: > false_range = true_range; > if (!false_range.varying_p () > && !false_range.undefined_p ()) > false_range.invert (); > > The code looks correct. This is exactly the same debug as what was done in PR 109934 :). Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109934 [Bug 109934] [14 Regression] Wrong code at -O3 on x86_64-linux-gnu