forked from OSchip/llvm-project
[X86] In OptimizeLEAs pass, check that the key is in the LEAs map before accessing
When the key is not already in the map, the access operator[] creates an empty value and grows the map. Resizing a map is very slow, so this needs to be avoided. Found with csmith + asserts. May help with https://bugs.llvm.org/show_bug.cgi?id=25843 Patch by Tom Rix. Differential Revision: https://reviews.llvm.org/D50780 llvm-svn: 340434
This commit is contained in:
parent
ff363539c6
commit
87f78cfe15
|
@ -510,12 +510,16 @@ bool OptimizeLEAPass::removeRedundantAddrCalc(MemOpMap &LEAs) {
|
||||||
|
|
||||||
MemOpNo += X86II::getOperandBias(Desc);
|
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.
|
// Get the best LEA instruction to replace address calculation.
|
||||||
MachineInstr *DefMI;
|
MachineInstr *DefMI;
|
||||||
int64_t AddrDispShift;
|
int64_t AddrDispShift;
|
||||||
int Dist;
|
int Dist;
|
||||||
if (!chooseBestLEA(LEAs[getMemOpKey(MI, MemOpNo)], MI, DefMI, AddrDispShift,
|
if (!chooseBestLEA(Insns->second, MI, DefMI, AddrDispShift, Dist))
|
||||||
Dist))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// If LEA occurs before current instruction, we can freely replace
|
// If LEA occurs before current instruction, we can freely replace
|
||||||
|
|
Loading…
Reference in New Issue