mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
fix PR8753, eliminating a case where we'd infinitely make a
substitution because it doesn't actually change the IR. Patch by Jakub Staszak! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121361 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -675,6 +675,14 @@ bool MemCpyOpt::processMemCpyMemCpyDependence(MemCpyInst *M, MemCpyInst *MDep,
|
||||
if (M->getSource() != MDep->getDest() || MDep->isVolatile())
|
||||
return false;
|
||||
|
||||
// If dep instruction is reading from our current input, then it is a noop
|
||||
// transfer and substituting the input won't change this instruction. Just
|
||||
// ignore the input and let someone else zap MDep. This handles cases like:
|
||||
// memcpy(a <- a)
|
||||
// memcpy(b <- a)
|
||||
if (M->getSource() == MDep->getSource())
|
||||
return false;
|
||||
|
||||
// Second, the length of the memcpy's must be the same, or the preceeding one
|
||||
// must be larger than the following one.
|
||||
ConstantInt *C1 = dyn_cast<ConstantInt>(MDep->getLength());
|
||||
|
||||
Reference in New Issue
Block a user