[Bug target/96403] New: [nvptx] Less optimal code in v2si-cvt.c after setting TARGET_TRULY_NOOP_TRUNCATION to false

vries at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jul 31 16:56:00 GMT 2020


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

            Bug ID: 96403
           Summary: [nvptx] Less optimal code in v2si-cvt.c after setting
                    TARGET_TRULY_NOOP_TRUNCATION to false
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

[ I've rewritten the v2si-cvt.c source to something more minimal:
...
__v2si __attribute__((unused))
vector_cvt (__v2si arg)
{
  unsigned short *p = (unsigned short*)&arg;

  volatile unsigned short s = p[0];

  return arg;
}

__v2si __attribute__((unused))
vector_cvt_2 (__v2si arg)
{
  unsigned char *p = (unsigned char*)&arg;

  volatile unsigned char s = p[0];

  return arg;
}
...
]

When changing TARGET_TRULY_NOOP_TRUNCATION to false, we have a regression in
v2si-cvt.c, this for vector_cvt:
...
-               cvt.u16.u32     %r27, %r25.x;
+               mov.b64 %r26, %r25;
+               cvt.u16.u64     %r27, %r26;
...
and this for vector_cvt_2:
...
-               cvt.u32.u32     %r27, %r25.x;
-               st.u8   [%frame], %r27;
+               mov.b64 %r26, %r25;
+               cvt.u32.u64     %r27, %r26;
+               cvt.u16.u8      %r32, %r27;
+               mov.u16 %r29, %r32;
+               cvt.u32.u16     %r30, %r29;
+               st.u8   [%frame], %r30;
...


More information about the Gcc-bugs mailing list