mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-04 04:19:25 +00:00
fix PR8102, a case where we'd copyValue from a value that we already
deleted. Fix this by doing the copyValue's before we delete stuff! The testcase only repros the problem on my system with valgrind. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113820 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -837,6 +837,17 @@ void LICM::PromoteAliasSet(AliasSet &AS) {
|
||||
ReplacedLoads[ALoad] = NewVal;
|
||||
}
|
||||
|
||||
// If the preheader load is itself a pointer, we need to tell alias analysis
|
||||
// about the new pointer we created in the preheader block and about any PHI
|
||||
// nodes that just got inserted.
|
||||
if (PreheaderLoad->getType()->isPointerTy()) {
|
||||
// Copy any value stored to or loaded from a must-alias of the pointer.
|
||||
CurAST->copyValue(SomeValue, PreheaderLoad);
|
||||
|
||||
for (unsigned i = 0, e = NewPHIs.size(); i != e; ++i)
|
||||
CurAST->copyValue(SomeValue, NewPHIs[i]);
|
||||
}
|
||||
|
||||
// Now that everything is rewritten, delete the old instructions from the body
|
||||
// of the loop. They should all be dead now.
|
||||
for (unsigned i = 0, e = LoopUses.size(); i != e; ++i) {
|
||||
@@ -867,17 +878,6 @@ void LICM::PromoteAliasSet(AliasSet &AS) {
|
||||
User->eraseFromParent();
|
||||
}
|
||||
|
||||
// If the preheader load is itself a pointer, we need to tell alias analysis
|
||||
// about the new pointer we created in the preheader block and about any PHI
|
||||
// nodes that just got inserted.
|
||||
if (PreheaderLoad->getType()->isPointerTy()) {
|
||||
// Copy any value stored to or loaded from a must-alias of the pointer.
|
||||
CurAST->copyValue(SomeValue, PreheaderLoad);
|
||||
|
||||
for (unsigned i = 0, e = NewPHIs.size(); i != e; ++i)
|
||||
CurAST->copyValue(SomeValue, NewPHIs[i]);
|
||||
}
|
||||
|
||||
// fwew, we're done!
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user