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

            Bug ID: 90088
           Summary: 3 ops LEA should be avoided on Intel CPUs
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nok.raven at gmail dot com
  Target Milestone: ---
            Target: Intel x86

Originally I filed a bug report to LLVM about

int foo(int x)
{
    return (x << 1) | 1;
}

But got an answered that 3 ops LEA is intentionally avoided due to

> For LEA instructions with three source operands and some specific
> situations, instruction latency has increased to 3 cycles, and must
> dispatch via port 1:
> — LEA that has all three source operands: base, index, and offset.
> — LEA that uses base and index registers where the base is EBP, RBP, or R13.
> — LEA that uses RIP relative addressing mode.
> — LEA that uses 16-bit addressing mode.

From 3.5.1.3 (Using LEA) of Intel's Optimization Reference Manual.

https://godbolt.org/z/OqkdAO

Reply via email to