[llvm] r208177 - [BUG][REFACTOR]
Zinovy Nis
zinovy.nis at gmail.com
Wed May 7 02:51:22 PDT 2014
Author: zinovy.nis
Date: Wed May 7 04:51:22 2014
New Revision: 208177
URL: http://llvm.org/viewvc/llvm-project?rev=208177&view=rev
Log:
[BUG][REFACTOR]
1) Fix for printing debug locations for absolute paths.
2) Location printing is moved into public method DebugLoc::print() to avoid re-inventing the wheel.
Differential Revision: http://reviews.llvm.org/D3513
Modified:
llvm/trunk/include/llvm/IR/DebugLoc.h
llvm/trunk/lib/CodeGen/MachineInstr.cpp
llvm/trunk/lib/IR/DebugLoc.cpp
llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
Modified: llvm/trunk/include/llvm/IR/DebugLoc.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugLoc.h?rev=208177&r1=208176&r2=208177&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DebugLoc.h (original)
+++ llvm/trunk/include/llvm/IR/DebugLoc.h Wed May 7 04:51:22 2014
@@ -21,6 +21,7 @@ namespace llvm {
template <typename T> struct DenseMapInfo;
class MDNode;
class LLVMContext;
+ class raw_ostream;
/// DebugLoc - Debug location id. This is carried by Instruction, SDNode,
/// and MachineInstr to compactly encode file/line/scope information for an
@@ -106,6 +107,8 @@ namespace llvm {
bool operator!=(const DebugLoc &DL) const { return !(*this == DL); }
void dump(const LLVMContext &Ctx) const;
+ /// \brief prints source location /path/to/file.exe:line:col @[inlined at]
+ void print(const LLVMContext &Ctx, raw_ostream &OS) const;
};
template <>
Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=208177&r1=208176&r2=208177&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Wed May 7 04:51:22 2014
@@ -1453,25 +1453,7 @@ void MachineInstr::dump() const {
static void printDebugLoc(DebugLoc DL, const MachineFunction *MF,
raw_ostream &CommentOS) {
const LLVMContext &Ctx = MF->getFunction()->getContext();
- if (!DL.isUnknown()) { // Print source line info.
- DIScope Scope(DL.getScope(Ctx));
- assert((!Scope || Scope.isScope()) &&
- "Scope of a DebugLoc should be null or a DIScope.");
- // Omit the directory, because it's likely to be long and uninteresting.
- if (Scope)
- CommentOS << Scope.getFilename();
- else
- CommentOS << "<unknown>";
- CommentOS << ':' << DL.getLine();
- if (DL.getCol() != 0)
- CommentOS << ':' << DL.getCol();
- DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(DL.getInlinedAt(Ctx));
- if (!InlinedAtDL.isUnknown()) {
- CommentOS << " @[ ";
- printDebugLoc(InlinedAtDL, MF, CommentOS);
- CommentOS << " ]";
- }
- }
+ DL.print(Ctx, CommentOS);
}
void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM,
@@ -1684,7 +1666,7 @@ void MachineInstr::print(raw_ostream &OS
OS << " line no:" << DV.getLineNumber();
if (MDNode *InlinedAt = DV.getInlinedAt()) {
DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(InlinedAt);
- if (!InlinedAtDL.isUnknown()) {
+ if (!InlinedAtDL.isUnknown() && MF) {
OS << " inlined @[ ";
printDebugLoc(InlinedAtDL, MF, OS);
OS << " ]";
Modified: llvm/trunk/lib/IR/DebugLoc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugLoc.cpp?rev=208177&r1=208176&r2=208177&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugLoc.cpp (original)
+++ llvm/trunk/lib/IR/DebugLoc.cpp Wed May 7 04:51:22 2014
@@ -167,6 +167,28 @@ void DebugLoc::dump(const LLVMContext &C
#endif
}
+void DebugLoc::print(const LLVMContext &Ctx, raw_ostream &OS) const {
+ if (!isUnknown()) {
+ // Print source line info.
+ DIScope Scope(getScope(Ctx));
+ assert((!Scope || Scope.isScope()) &&
+ "Scope of a DebugLoc should be null or a DIScope.");
+ if (Scope)
+ OS << Scope.getFilename();
+ else
+ OS << "<unknown>";
+ OS << ':' << getLine();
+ if (getCol() != 0)
+ OS << ':' << getCol();
+ DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(getInlinedAt(Ctx));
+ if (!InlinedAtDL.isUnknown()) {
+ OS << " @[ ";
+ InlinedAtDL.print(Ctx, OS);
+ OS << " ]";
+ }
+ }
+}
+
//===----------------------------------------------------------------------===//
// DenseMap specialization
//===----------------------------------------------------------------------===//
Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=208177&r1=208176&r2=208177&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Wed May 7 04:51:22 2014
@@ -83,7 +83,6 @@
#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/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
@@ -480,22 +479,19 @@ static void setDebugLocFromInst(IRBuilde
#ifndef NDEBUG
/// \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);
+static std::string getDebugLocString(const Instruction *I) {
+ std::string Result;
+ if (I) {
+ raw_string_ostream OS(Result);
+ const DebugLoc &InstrDebugLoc = I->getDebugLoc();
+ if (!InstrDebugLoc.isUnknown())
+ InstrDebugLoc.print(I->getContext(), OS);
+ else
+ // Just print the module name.
+ OS << I->getParent()->getParent()->getParent()->getModuleIdentifier();
+ OS.flush();
}
- 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);
+ return Result;
}
#endif
@@ -1109,10 +1105,15 @@ struct LoopVectorize : public FunctionPa
bool processLoop(Loop *L) {
assert(L->empty() && "Only process inner loops.");
+
+#ifndef NDEBUG
+ const std::string DebugLocStr =
+ getDebugLocString(L->getHeader()->getFirstNonPHIOrDbgOrLifetime());
+#endif /* NDEBUG */
+
DEBUG(dbgs() << "\nLV: Checking a loop in \""
<< L->getHeader()->getParent()->getName() << "\" from "
- << getDebugLocString(L->getHeader()->getFirstNonPHIOrDbg())
- << "\n");
+ << DebugLocStr << "\n");
LoopVectorizeHints Hints(L, DisableUnrolling);
@@ -1203,10 +1204,8 @@ struct LoopVectorize : public FunctionPa
const unsigned UF =
CM.selectUnrollFactor(OptForSize, Hints.getUnroll(), VF.Width, VF.Cost);
- DEBUG(dbgs() << "LV: Found a vectorizable loop ("
- << VF.Width << ") in "
- << getDebugLocString(L->getHeader()->getFirstNonPHIOrDbg())
- << '\n');
+ DEBUG(dbgs() << "LV: Found a vectorizable loop (" << VF.Width << ") in "
+ << DebugLocStr << '\n');
DEBUG(dbgs() << "LV: Unroll Factor is " << UF << '\n');
if (VF.Width == 1) {
More information about the llvm-commits
mailing list