diff options
Diffstat (limited to 'lib/Analysis')
-rw-r--r-- | lib/Analysis/CaptureTracking.cpp | 12 | ||||
-rw-r--r-- | lib/Analysis/MemoryDependenceAnalysis.cpp | 3 |
2 files changed, 8 insertions, 7 deletions
diff --git a/lib/Analysis/CaptureTracking.cpp b/lib/Analysis/CaptureTracking.cpp index 9a7992e38d..68993ead2c 100644 --- a/lib/Analysis/CaptureTracking.cpp +++ b/lib/Analysis/CaptureTracking.cpp @@ -30,8 +30,8 @@ namespace { bool shouldExplore(Use *U) { return true; } - bool captured(Instruction *I) { - if (isa<ReturnInst>(I) && !ReturnCaptures) + bool captured(Use *U) { + if (isa<ReturnInst>(U->getUser()) && !ReturnCaptures) return false; Captured = true; @@ -117,7 +117,7 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) { for (CallSite::arg_iterator A = B; A != E; ++A) if (A->get() == V && !CS.doesNotCapture(A - B)) // The parameter is not marked 'nocapture' - captured. - if (Tracker->captured(I)) + if (Tracker->captured(U)) return; break; } @@ -130,7 +130,7 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) { case Instruction::Store: if (V == I->getOperand(0)) // Stored the pointer - conservatively assume it may be captured. - if (Tracker->captured(I)) + if (Tracker->captured(U)) return; // Storing to the pointee does not cause the pointer to be captured. break; @@ -158,12 +158,12 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) { break; // Otherwise, be conservative. There are crazy ways to capture pointers // using comparisons. - if (Tracker->captured(I)) + if (Tracker->captured(U)) return; break; default: // Something else - be conservative and say it is captured. - if (Tracker->captured(I)) + if (Tracker->captured(U)) return; break; } diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp index 704e27b5ce..53d666078e 100644 --- a/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -349,7 +349,8 @@ namespace { return true; } - bool captured(Instruction *I) { + bool captured(Use *U) { + Instruction *I = cast<Instruction>(U->getUser()); if (BeforeHere != I && DT->dominates(BeforeHere, I)) return false; Captured = true; |