diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86OptimizeLEAs.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86OptimizeLEAs.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86OptimizeLEAs.cpp b/llvm/lib/Target/X86/X86OptimizeLEAs.cpp index 42db51b3cf0..b56d02b6bfb 100644 --- a/llvm/lib/Target/X86/X86OptimizeLEAs.cpp +++ b/llvm/lib/Target/X86/X86OptimizeLEAs.cpp @@ -510,12 +510,16 @@ bool OptimizeLEAPass::removeRedundantAddrCalc(MemOpMap &LEAs) { MemOpNo += X86II::getOperandBias(Desc); + // Do not call chooseBestLEA if there was no matching LEA + auto Insns = LEAs.find(getMemOpKey(MI, MemOpNo)); + if (Insns == LEAs.end()) + continue; + // Get the best LEA instruction to replace address calculation. MachineInstr *DefMI; int64_t AddrDispShift; int Dist; - if (!chooseBestLEA(LEAs[getMemOpKey(MI, MemOpNo)], MI, DefMI, AddrDispShift, - Dist)) + if (!chooseBestLEA(Insns->second, MI, DefMI, AddrDispShift, Dist)) continue; // If LEA occurs before current instruction, we can freely replace |