diff options
author | Andrey Turetskiy <andrey.turetskiy@gmail.com> | 2016-05-19 10:18:29 +0000 |
---|---|---|
committer | Andrey Turetskiy <andrey.turetskiy@gmail.com> | 2016-05-19 10:18:29 +0000 |
commit | 45b22a4aff47748a07573f282f643d16329d391c (patch) | |
tree | 47f3557959360ec4f92bedabd6dcfcedc5677d26 /llvm/lib | |
parent | 3f64bb96181580c1df35b089deaebec5fa1637d6 (diff) | |
download | bcm5719-llvm-45b22a4aff47748a07573f282f643d16329d391c.tar.gz bcm5719-llvm-45b22a4aff47748a07573f282f643d16329d391c.zip |
[X86] Enable RRL part of the LEA optimization pass for -O2.
Enable "Remove Redundant LEAs" part of the LEA optimization pass for -O2.
This gives 6.4% performance improve on Broadwell on nnet benchmark from Coremark-pro.
There is no significant effect on other benchmarks (Geekbench, Spec2000, Spec2006).
Differential Revision: http://reviews.llvm.org/D19659
llvm-svn: 270036
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86OptimizeLEAs.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/llvm/lib/Target/X86/X86OptimizeLEAs.cpp b/llvm/lib/Target/X86/X86OptimizeLEAs.cpp index 89f50cb8b6e..22762db2390 100644 --- a/llvm/lib/Target/X86/X86OptimizeLEAs.cpp +++ b/llvm/lib/Target/X86/X86OptimizeLEAs.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// // // This file defines the pass that performs some optimizations with LEA -// instructions in order to improve code size. +// instructions in order to improve performance and code size. // Currently, it does two things: // 1) If there are two LEA instructions calculating addresses which only differ // by displacement inside a basic block, one of them is removed. @@ -614,9 +614,7 @@ bool OptimizeLEAPass::removeRedundantLEAs(MemOpMap &LEAs) { bool OptimizeLEAPass::runOnMachineFunction(MachineFunction &MF) { bool Changed = false; - // Perform this optimization only if we care about code size. - if (DisableX86LEAOpt || skipFunction(*MF.getFunction()) || - !MF.getFunction()->optForSize()) + if (DisableX86LEAOpt || skipFunction(*MF.getFunction())) return false; MRI = &MF.getRegInfo(); @@ -635,13 +633,13 @@ bool OptimizeLEAPass::runOnMachineFunction(MachineFunction &MF) { if (LEAs.empty()) continue; - // Remove redundant LEA instructions. The optimization may have a negative - // effect on performance, so do it only for -Oz. - if (MF.getFunction()->optForMinSize()) - Changed |= removeRedundantLEAs(LEAs); + // Remove redundant LEA instructions. + Changed |= removeRedundantLEAs(LEAs); - // Remove redundant address calculations. - Changed |= removeRedundantAddrCalc(LEAs); + // Remove redundant address calculations. Do it only for -Os/-Oz since only + // a code size gain is expected from this part of the pass. + if (MF.getFunction()->optForSize()) + Changed |= removeRedundantAddrCalc(LEAs); } return Changed; |