This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/83133] Superflous x86 test instructions in generated assembly.
- From: "maxim.yegorushkin at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 24 Nov 2017 16:31:07 +0000
- Subject: [Bug target/83133] Superflous x86 test instructions in generated assembly.
- Auto-submitted: auto-generated
- References: <bug-83133-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83133
--- Comment #2 from Maxim Egorushkin <maxim.yegorushkin at gmail dot com> ---
(In reply to Uroš Bizjak from comment #1)
> (In reply to Maxim Egorushkin from comment #0)
> > g function assembly contains a superflous test instruction. It should not
> > generate that instruction, since sub instruction already sets all the
> > required flags. I first discovered this issue in gcc-4.9.2 and it is still
> > there in gcc-7.2.0.
>
> SUBL also sets overflow flat (OF). JLE in fact jumps when (ZF=1 or SF≠OF),
> so assuming OF is always cleared is waaay to dangerous.
>
> As a matter of fact, flag-setting cmp/sub/add patterns can be changed to
> operate in CCNOmode instead of CCGOCmode when strict signed overflow rules
> are in effect (in C/C++ signed overflow is undefined, so we CAN assume
> signed overflow never happens and consequently flag OF is never set), but it
> would be major PITA on x86 architecture, where plus and minus operations on
> signed integers always overflow "as expected".
>
> (BTW: I did implement the above idea, but compiler failed bootstrap
> comparison check. I'm surprised clang was brave enough to implement this
> dangerous optimization.)
Could you provide an example where that "dangerous optimization" would break
well-formed code please?