https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124137
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Keywords|needs-bisection, |
|needs-reduction |
Status|ASSIGNED |RESOLVED
--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #17)
> (In reply to Richard Biener from comment #16)
>
> > There's still a correctness (IMO) patch pending. Possibly, as FLAGS_REG
> > should not be live across edges and the relevant hardregs should only
>
> IIRC, compare-elim.cc can make flags reg live across edges.
Indeed. The gcc.target/i386/pr121572-1a.c testcase shows one example.
Other cases of iteration would likely involve "invalid" source using
a register __asm__("rdx") or similar, using a caller save register.
DF likely tracks that in live-in, so we'd refuse to insert the TLS
call. But we are not doing proper local liveness compute for those
given note_stores -> ix86_check_flags_reg only ever makes FLAGS_REG
live.
I'll leave the patch to fixup the iteration point computation up for
review - it's still prone to never make progress and possibly slow
due to many CC setters in a function.
But closing this bug as all known testcases are fixed.