diff options
author | Lama Saba <lama.saba@intel.com> | 2017-05-18 08:11:50 +0000 |
---|---|---|
committer | Lama Saba <lama.saba@intel.com> | 2017-05-18 08:11:50 +0000 |
commit | 2ea271b54a702adcb014eb9d072faa04d74c9a1b (patch) | |
tree | b4a2d8d466d08b0c6dfedfea042f87d4bb80cf4c /llvm/lib/Target/X86/X86Subtarget.h | |
parent | 994b6c9b8e7d0d22032aa66edd09701e8df1dfd1 (diff) | |
download | bcm5719-llvm-2ea271b54a702adcb014eb9d072faa04d74c9a1b.tar.gz bcm5719-llvm-2ea271b54a702adcb014eb9d072faa04d74c9a1b.zip |
[X86] Replace slow LEA instructions in X86
According to Intel's Optimization Reference Manual for SNB+:
" 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 "
This patch currently handles the first 2 cases only.
Differential Revision: https://reviews.llvm.org/D32277
llvm-svn: 303333
Diffstat (limited to 'llvm/lib/Target/X86/X86Subtarget.h')
-rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index de1514243ae..02be95e2e55 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -253,6 +253,11 @@ protected: /// True if the LEA instruction with certain arguments is slow bool SlowLEA; + /// True if the LEA instruction has all three source operands: base, index, + /// and offset or if the LEA instruction uses base and index registers where + /// the base is EBP, RBP,or R13 + bool Slow3OpsLEA; + /// True if INC and DEC instructions are slow when writing to flags bool SlowIncDec; @@ -490,6 +495,7 @@ public: bool callRegIndirect() const { return CallRegIndirect; } bool LEAusesAG() const { return LEAUsesAG; } bool slowLEA() const { return SlowLEA; } + bool slow3OpsLEA() const { return Slow3OpsLEA; } bool slowIncDec() const { return SlowIncDec; } bool hasCDI() const { return HasCDI; } bool hasPFI() const { return HasPFI; } |