From 66facd6c1412ebf3f1a850cffdcfc86dcce0a6c3 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Fri, 13 Feb 2015 23:08:37 +0000 Subject: [PATCH] Minor tweak to MDA Two minor tweaks I noticed when reading through the code: - No need to recompute begin() on every iteration. We're not modifying the instructions in this loop. - We can ignore PHINodes and Dbg intrinsics. The current code does this anyways, but it will spend slightly more time doing so and will count towards the limit of instructions in the block. It seems really silly to give up due the presence of PHIs... Differential Revision: http://reviews.llvm.org/D7624 llvm-svn: 229175 --- llvm/lib/Analysis/MemoryDependenceAnalysis.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp index bcfea64..fa67aeb 100644 --- a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -423,7 +423,9 @@ getPointerDependencyFrom(const AliasAnalysis::Location &MemLoc, bool isLoad, } // Walk backwards through the basic block, looking for dependencies. - while (ScanIt != BB->begin()) { + // We can stop before processing PHIs or dbg intrinsics. + const BasicBlock::iterator Begin(BB->getFirstNonPHIOrDbg()); + while (ScanIt != Begin) { Instruction *Inst = --ScanIt; if (IntrinsicInst *II = dyn_cast(Inst)) -- 2.7.4