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

            Bug ID: 106583
           Summary: Suboptimal immediate generation on aarch64
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ktkachov at gcc dot gnu.org
  Target Milestone: ---
            Target: aarch64

A simple codegen issue:
unsigned long long
foo (void)
{
  return 0x7efefefefefefeff;
}

generates at -O2
foo:
        mov     x0, 65279
        movk    x0, 0xfefe, lsl 16
        movk    x0, 0xfefe, lsl 32
        movk    x0, 0x7efe, lsl 48
        ret

whereas LLVM can do:
foo:                                    // @foo
        mov     x0, #-72340172838076674
        movk    x0, #65279
        movk    x0, #32510, lsl #48
        ret

Should be a matter of just making aarch64_internal_mov_immediate in aarch64.cc
a bit smarter

Reply via email to