[Bug rtl-optimization/56069] New: [4.6/4.7/4.8 Regression] RA pessimization

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jan 21 17:37:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56069

             Bug #: 56069
           Summary: [4.6/4.7/4.8 Regression] RA pessimization
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Keywords: missed-optimization, ra
          Severity: normal
          Priority: P3
         Component: rtl-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: jakub@gcc.gnu.org
                CC: rsandifo@gcc.gnu.org, vmakarov@gcc.gnu.org
            Target: x86_64-linux


Since http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139993
unsigned long foo (unsigned long mem)
{
  return (mem >> 3) | (1UL << 44);
}

unsigned long bar (unsigned long mem)
{
  return (mem >> 3) + (1UL << 44);
}

on x86_64-linux at -O2 (and -Os) the generated code for foo is one insn longer.
We used to emit:
        shrq    $3, %rdi
        movabsq $17592186044416, %rax
        orq     %rdi, %rax
        ret
but now emit:
        movq    %rdi, %rax
        movabsq $17592186044416, %rdx
        shrq    $3, %rax
        orq     %rdx, %rax
        ret



More information about the Gcc-bugs mailing list