[llvm-commits] [llvm] r38502 - /llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
Owen Anderson
resistor at mac.com
Tue Jul 10 11:11:43 PDT 2007
Author: resistor
Date: Tue Jul 10 13:11:42 2007
New Revision: 38502
URL: http://llvm.org/viewvc/llvm-project?rev=38502&view=rev
Log:
Volatile loads and stores depend on each other.
Modified:
llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=38502&r1=38501&r2=38502&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Tue Jul 10 13:11:42 2007
@@ -121,12 +121,15 @@
// Get the pointer value for which dependence will be determined
Value* dependee = 0;
uint64_t dependeeSize = 0;
+ bool queryIsVolatile = false;
if (StoreInst* S = dyn_cast<StoreInst>(QI)) {
dependee = S->getPointerOperand();
dependeeSize = TD.getTypeSize(S->getOperand(0)->getType());
+ queryIsVolatile = S->isVolatile();
} else if (LoadInst* L = dyn_cast<LoadInst>(QI)) {
dependee = L->getPointerOperand();
dependeeSize = TD.getTypeSize(L->getType());
+ queryIsVolatile = L->isVolatile();
} else if (FreeInst* F = dyn_cast<FreeInst>(QI)) {
dependee = F->getPointerOperand();
@@ -148,9 +151,23 @@
Value* pointer = 0;
uint64_t pointerSize = 0;
if (StoreInst* S = dyn_cast<StoreInst>(QI)) {
+ // All volatile loads/stores depend on each other
+ if (queryIsVolatile && S->isVolatile()) {
+ depGraphLocal.insert(std::make_pair(query, std::make_pair(S, true)));
+ reverseDep.insert(std::make_pair(S, query));
+ return S;
+ }
+
pointer = S->getPointerOperand();
pointerSize = TD.getTypeSize(S->getOperand(0)->getType());
} else if (LoadInst* L = dyn_cast<LoadInst>(QI)) {
+ // All volatile loads/stores depend on each other
+ if (queryIsVolatile && L->isVolatile()) {
+ depGraphLocal.insert(std::make_pair(query, std::make_pair(L, true)));
+ reverseDep.insert(std::make_pair(L, query));
+ return L;
+ }
+
pointer = L->getPointerOperand();
pointerSize = TD.getTypeSize(L->getType());
} else if (AllocationInst* AI = dyn_cast<AllocationInst>(QI)) {
More information about the llvm-commits
mailing list