diff options
author | Eric Christopher <echristo@gmail.com> | 2014-04-07 12:32:17 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2014-04-07 12:32:17 +0000 |
commit | c75aecc473b3c93f920c7a70011e184a6d874fc2 (patch) | |
tree | 02ddd9c6055c369e19e4ab4016e280c9183db457 /lib/Transforms | |
parent | 4639d0c904f5d1547dba608d517626c758f7fb40 (diff) | |
download | llvm-c75aecc473b3c93f920c7a70011e184a6d874fc2.tar.gz llvm-c75aecc473b3c93f920c7a70011e184a6d874fc2.tar.bz2 llvm-c75aecc473b3c93f920c7a70011e184a6d874fc2.tar.xz |
Add debug location information to the vectorizer debug statements.
Patch by Zinovy Nis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205705 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Vectorize/LoopVectorize.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/lib/Transforms/Vectorize/LoopVectorize.cpp b/lib/Transforms/Vectorize/LoopVectorize.cpp index 9a98c44e4e..c3b0121e6c 100644 --- a/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -67,6 +67,7 @@ #include "llvm/Analysis/ValueTracking.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DataLayout.h" +#include "llvm/IR/DebugInfo.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/Function.h" @@ -84,6 +85,7 @@ #include "llvm/Support/BranchProbability.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetLibraryInfo.h" #include "llvm/Transforms/Scalar.h" @@ -468,7 +470,25 @@ static void setDebugLocFromInst(IRBuilder<> &B, const Value *Ptr) { else B.SetCurrentDebugLocation(DebugLoc()); } - +/// \return string containing a file name and a line # for the given +/// instruction. +static format_object3<const char *, const char *, unsigned> +getDebugLocString(const Instruction *I) { + if (!I) + return format<const char *, const char *, unsigned>("", "", "", 0U); + MDNode *N = I->getMetadata("dbg"); + if (!N) { + const StringRef ModuleName = + I->getParent()->getParent()->getParent()->getModuleIdentifier(); + return format<const char *, const char *, unsigned>("%s", ModuleName.data(), + "", 0U); + } + const DILocation Loc(N); + const unsigned LineNo = Loc.getLineNumber(); + const char *DirName = Loc.getDirectory().data(); + const char *FileName = Loc.getFilename().data(); + return format("%s/%s:%u", DirName, FileName, LineNo); +} /// LoopVectorizationLegality checks if it is legal to vectorize a loop, and /// to what vectorization factor. /// This class does not look at the profitability of vectorization, only the @@ -1065,8 +1085,10 @@ struct LoopVectorize : public FunctionPass { bool processLoop(Loop *L) { assert(L->empty() && "Only process inner loops."); - DEBUG(dbgs() << "LV: Checking a loop in \"" << - L->getHeader()->getParent()->getName() << "\"\n"); + DEBUG(dbgs() << "LV: Checking a loop in \"" + << L->getHeader()->getParent()->getName() << "\" from " + << getDebugLocString(L->getHeader()->getFirstNonPHIOrDbg()) + << "\n"); LoopVectorizeHints Hints(L, DisableUnrolling); @@ -1129,8 +1151,10 @@ struct LoopVectorize : public FunctionPass { unsigned UF = CM.selectUnrollFactor(OptForSize, Hints.Unroll, VF.Width, VF.Cost); - DEBUG(dbgs() << "LV: Found a vectorizable loop ("<< VF.Width << ") in "<< - F->getParent()->getModuleIdentifier() << '\n'); + DEBUG(dbgs() << "LV: Found a vectorizable loop (" + << VF.Width << ") in " + << getDebugLocString(L->getHeader()->getFirstNonPHIOrDbg()) + << '\n'); DEBUG(dbgs() << "LV: Unroll Factor is " << UF << '\n'); if (VF.Width == 1) { |