diff options
author | Yunzhong Gao <Yunzhong_Gao@playstation.sony.com> | 2013-11-14 01:10:52 +0000 |
---|---|---|
committer | Yunzhong Gao <Yunzhong_Gao@playstation.sony.com> | 2013-11-14 01:10:52 +0000 |
commit | 2999b2f2ccc3a48c834dffe19bb39c67641a3afd (patch) | |
tree | a1dca4257afb43c75f8395a68d4a6c1efc739149 /lib | |
parent | 4e7c22a90b28828e4a28751b65ae24091f7df4ec (diff) | |
download | llvm-2999b2f2ccc3a48c834dffe19bb39c67641a3afd.tar.gz llvm-2999b2f2ccc3a48c834dffe19bb39c67641a3afd.tar.bz2 llvm-2999b2f2ccc3a48c834dffe19bb39c67641a3afd.tar.xz |
Fixing a heisenbug where the memory dependence analysis behaves differently
with and without -g.
Adding a test case to make sure that the threshold used in the memory
dependence analysis is respected. The test case also checks that debug
intrinsics are not counted towards this threshold.
Differential Revision: http://llvm-reviews.chandlerc.com/D2141
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194646 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Analysis/MemoryDependenceAnalysis.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp index fe1c8743a4..84ff2eed12 100644 --- a/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -371,18 +371,19 @@ getPointerDependencyFrom(const AliasAnalysis::Location &MemLoc, bool isLoad, // Walk backwards through the basic block, looking for dependencies. while (ScanIt != BB->begin()) { + Instruction *Inst = --ScanIt; + + if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) + // Debug intrinsics don't (and can't) cause dependencies. + if (isa<DbgInfoIntrinsic>(II)) continue; + // Limit the amount of scanning we do so we don't end up with quadratic // running time on extreme testcases. --Limit; if (!Limit) return MemDepResult::getUnknown(); - Instruction *Inst = --ScanIt; - if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) { - // Debug intrinsics don't (and can't) cause dependences. - if (isa<DbgInfoIntrinsic>(II)) continue; - // If we reach a lifetime begin or end marker, then the query ends here // because the value is undefined. if (II->getIntrinsicID() == Intrinsic::lifetime_start) { |