diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2015-08-26 13:39:48 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2015-08-26 13:39:48 +0000 |
commit | 9f4709b26115b89dd9e5b87f46347de396b655dd (patch) | |
tree | 8119050ea0700542a006782367c1f31efe441231 /llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp | |
parent | c0c74e1b8ab8b26d9e31c687e0ff8e8926889e74 (diff) | |
download | bcm5719-llvm-9f4709b26115b89dd9e5b87f46347de396b655dd.tar.gz bcm5719-llvm-9f4709b26115b89dd9e5b87f46347de396b655dd.zip |
[AArch64] Remove a use-after-free when collecting stats.
The call to mergePairedInsns() deletes MI, so the later use by isUnscaledLdSt()
is referencing freed memory.
llvm-svn: 246033
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp b/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp index b67d2e2acf9..f7f3bfa7595 100644 --- a/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp +++ b/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp @@ -984,15 +984,15 @@ bool AArch64LoadStoreOpt::optimizeBlock(MachineBasicBlock &MBB) { MachineBasicBlock::iterator Paired = findMatchingInsn(MBBI, Flags, ScanLimit); if (Paired != E) { + ++NumPairCreated; + if (isUnscaledLdSt(MI)) + ++NumUnscaledPairCreated; + // Merge the loads into a pair. Keeping the iterator straight is a // pain, so we let the merge routine tell us what the next instruction // is after it's done mucking about. MBBI = mergePairedInsns(MBBI, Paired, Flags); - Modified = true; - ++NumPairCreated; - if (isUnscaledLdSt(MI)) - ++NumUnscaledPairCreated; break; } ++MBBI; |