mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-18 12:29:21 +00:00
Fix bug: RLE-Preserve-Volatile.ll
Volatile loads and stores must not be value numbered git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8398 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
09b47f91bd
commit
bd70a31c51
@ -90,6 +90,10 @@ void LoadVN::getEqualNumberNodes(Value *V,
|
||||
getAnalysis<AliasAnalysis>().getMustAliases(V, RetVals);
|
||||
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(V)) {
|
||||
// Volatile loads cannot be replaced with the value of other loads.
|
||||
if (LI->isVolatile())
|
||||
return getAnalysis<ValueNumbering>().getEqualNumberNodes(V, RetVals);
|
||||
|
||||
// If we have a load instruction, find all of the load and store
|
||||
// instructions that use the same source operand. We implement this
|
||||
// recursively, because there could be a load of a load of a load that are
|
||||
@ -119,10 +123,10 @@ void LoadVN::getEqualNumberNodes(Value *V,
|
||||
UI != UE; ++UI)
|
||||
if (LoadInst *Cand = dyn_cast<LoadInst>(*UI)) {// Is a load of source?
|
||||
if (Cand->getParent()->getParent() == F && // In the same function?
|
||||
Cand != LI) // Not LI itself?
|
||||
Cand != LI && !Cand->isVolatile()) // Not LI itself?
|
||||
CandidateLoads.push_back(Cand); // Got one...
|
||||
} else if (StoreInst *Cand = dyn_cast<StoreInst>(*UI)) {
|
||||
if (Cand->getParent()->getParent() == F &&
|
||||
if (Cand->getParent()->getParent() == F && !Cand->isVolatile() &&
|
||||
Cand->getOperand(1) == Source) // It's a store THROUGH the ptr...
|
||||
CandidateStores.push_back(Cand);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user