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);
|
||||
|
||||
// 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
|
||||
|
|
Loading…
Reference in New Issue