[PATCH] [LV] More verbose debug info for loop location in the source code

Eric Christopher echristo at gmail.com
Fri Apr 4 13:53:59 PDT 2014


Nifty.
On Apr 4, 2014 6:41 AM, "Zinovy Nis" <zinovy.nis at gmail.com> wrote:

> Hi nadav, chandlerc, hfinkel, rengolin,
>
> Hi.
>
> The patch makes LoopVectorizer print in debug console not only a function
> name or a module name where analyzing loop was found, but also a line in
> the source code where the loop resides:
>
>     LV: Checking a loop in "bar" from /some/path/foo.c:42
>   ...
>     LV: Found a vectorizable loop (4) in /some/path/foo.c:42
>   ...
>
> It can be useful when debugging loop vectorizer issues.
>
> http://llvm-reviews.chandlerc.com/D3288
>
> Files:
>   lib/Transforms/Vectorize/LoopVectorize.cpp
>
> Index: lib/Transforms/Vectorize/LoopVectorize.cpp
> ===================================================================
> --- lib/Transforms/Vectorize/LoopVectorize.cpp
> +++ 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 @@
>    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 @@
>
>    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 @@
>      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) {
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140404/76c140e4/attachment.html>


More information about the llvm-commits mailing list