mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 05:00:26 +00:00
Properly handle volatile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19912 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4f16bd7a74
commit
ee379a16ee
@ -299,12 +299,7 @@ void LoadVN::getEqualNumberNodes(Value *V,
|
||||
bool LoadInvalidatedInBBBefore = false;
|
||||
for (BasicBlock::iterator I = LI; I != LoadBB->begin(); ) {
|
||||
--I;
|
||||
// If this instruction is a candidate load before LI, we know there are no
|
||||
// invalidating instructions between it and LI, so they have the same value
|
||||
// number.
|
||||
if (isa<LoadInst>(I) && cast<LoadInst>(I)->getOperand(0) == LoadPtr) {
|
||||
RetVals.push_back(I);
|
||||
} else if (I == LoadPtr) {
|
||||
if (I == LoadPtr) {
|
||||
// If we run into an allocation of the value being loaded, then the
|
||||
// contents are not initialized.
|
||||
if (isa<AllocationInst>(I))
|
||||
@ -314,14 +309,21 @@ void LoadVN::getEqualNumberNodes(Value *V,
|
||||
// loaded value cannot occur before this block.
|
||||
LoadInvalidatedInBBBefore = true;
|
||||
break;
|
||||
} else if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
|
||||
// If this instruction is a candidate load before LI, we know there are no
|
||||
// invalidating instructions between it and LI, so they have the same
|
||||
// value number.
|
||||
if (LI->getOperand(0) == LoadPtr && !LI->isVolatile())
|
||||
RetVals.push_back(I);
|
||||
}
|
||||
|
||||
|
||||
if (AA.getModRefInfo(I, LoadPtr, LoadSize) & AliasAnalysis::Mod) {
|
||||
// If the invalidating instruction is a store, and its in our candidate
|
||||
// set, then we can do store-load forwarding: the load has the same value
|
||||
// # as the stored value.
|
||||
if (isa<StoreInst>(I) && I->getOperand(1) == LoadPtr)
|
||||
RetVals.push_back(I->getOperand(0));
|
||||
if (StoreInst *SI = dyn_cast<StoreInst>(I))
|
||||
if (SI->getOperand(1) == LoadPtr)
|
||||
RetVals.push_back(I->getOperand(0));
|
||||
|
||||
LoadInvalidatedInBBBefore = true;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user