public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/104357] New: [Aarch64] Failure to use csinv instead of mvn+csel where possible
@ 2022-02-02 23:40 gabravier at gmail dot com
  2022-02-02 23:51 ` [Bug tree-optimization/104357] " pinskia at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: gabravier at gmail dot com @ 2022-02-02 23:40 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104357

            Bug ID: 104357
           Summary: [Aarch64] Failure to use csinv instead of mvn+csel
                    where possible
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gabravier at gmail dot com
  Target Milestone: ---

unsigned char stbi__clamp(int x)
{
   if ((unsigned)x > 255) {
      if (x < 0) return 0;
      if (x > 255) return 255;
   }
   return x;
}

With -O3, GCC outputs this (on aarch64):

stbi__clamp(int):
  mvn w1, w0
  cmp w0, 256
  and w0, w0, 255
  asr w1, w1, 31
  and w1, w1, 255
  csel w0, w0, w1, cc
  ret

LLVM instead outputs this:

stbi__clamp(int):
  asr w8, w0, #31
  cmp w0, #255
  csinv w0, w0, w8, ls
  ret

I don't know if the `and`s are there because of ABI differences, but it seems
to me like the `mvn` can definitely be replaced by using `csinv` instead of
`csel`.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-05-04  5:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-02 23:40 [Bug target/104357] New: [Aarch64] Failure to use csinv instead of mvn+csel where possible gabravier at gmail dot com
2022-02-02 23:51 ` [Bug tree-optimization/104357] " pinskia at gcc dot gnu.org
2022-02-03  0:02 ` pinskia at gcc dot gnu.org
2022-02-03  0:05 ` [Bug tree-optimization/104357] " pinskia at gcc dot gnu.org
2023-05-04  5:37 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).