[polly] r298194 - [IslExprBuilder] Print accessed memory locations with RuntimeDebugBuilder

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 18 13:54:44 PDT 2017


Author: grosser
Date: Sat Mar 18 15:54:43 2017
New Revision: 298194

URL: http://llvm.org/viewvc/llvm-project?rev=298194&view=rev
Log:
[IslExprBuilder] Print accessed memory locations with RuntimeDebugBuilder

After this change, enabling -polly-codegen-add-debug-printing in combination
with -polly-codegen-generate-expressions allows us to instrument the compiled
binaries to not only print the values stored and loaded to a given memory
access, but also to print the accessed location with array name and
per-dimension offset:

  MemRef_A[3][2]
  Store to  6299784: 5.000000
  MemRef_A[3][3]
  Load from 6299788: 0.000000
  MemRef_A[3][3]
  Store to  6299788: 6.000000

This can be very helpful for debugging.

Modified:
    polly/trunk/include/polly/CodeGen/RuntimeDebugBuilder.h
    polly/trunk/lib/CodeGen/BlockGenerators.cpp
    polly/trunk/lib/CodeGen/IslExprBuilder.cpp

Modified: polly/trunk/include/polly/CodeGen/RuntimeDebugBuilder.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/CodeGen/RuntimeDebugBuilder.h?rev=298194&r1=298193&r2=298194&view=diff
==============================================================================
--- polly/trunk/include/polly/CodeGen/RuntimeDebugBuilder.h (original)
+++ polly/trunk/include/polly/CodeGen/RuntimeDebugBuilder.h Sat Mar 18 15:54:43 2017
@@ -149,4 +149,6 @@ private:
 };
 } // namespace polly
 
+extern bool PollyDebugPrinting;
+
 #endif

Modified: polly/trunk/lib/CodeGen/BlockGenerators.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/BlockGenerators.cpp?rev=298194&r1=298193&r2=298194&view=diff
==============================================================================
--- polly/trunk/lib/CodeGen/BlockGenerators.cpp (original)
+++ polly/trunk/lib/CodeGen/BlockGenerators.cpp Sat Mar 18 15:54:43 2017
@@ -43,10 +43,12 @@ static cl::opt<bool> Aligned("enable-pol
                              cl::Hidden, cl::init(false), cl::ZeroOrMore,
                              cl::cat(PollyCategory));
 
-static cl::opt<bool> DebugPrinting(
+bool PollyDebugPrinting;
+static cl::opt<bool, true> DebugPrintingX(
     "polly-codegen-add-debug-printing",
     cl::desc("Add printf calls that show the values loaded/stored."),
-    cl::Hidden, cl::init(false), cl::ZeroOrMore, cl::cat(PollyCategory));
+    cl::location(PollyDebugPrinting), cl::Hidden, cl::init(false),
+    cl::ZeroOrMore, cl::cat(PollyCategory));
 
 BlockGenerator::BlockGenerator(
     PollyIRBuilder &B, LoopInfo &LI, ScalarEvolution &SE, DominatorTree &DT,
@@ -232,7 +234,7 @@ Value *BlockGenerator::generateArrayLoad
   Value *ScalarLoad = Builder.CreateAlignedLoad(
       NewPointer, Load->getAlignment(), Load->getName() + "_p_scalar_");
 
-  if (DebugPrinting)
+  if (PollyDebugPrinting)
     RuntimeDebugBuilder::createCPUPrinter(Builder, "Load from ", NewPointer,
                                           ": ", ScalarLoad, "\n");
 
@@ -247,7 +249,7 @@ void BlockGenerator::generateArrayStore(
   Value *ValueOperand = getNewValue(Stmt, Store->getValueOperand(), BBMap, LTS,
                                     getLoopForStmt(Stmt));
 
-  if (DebugPrinting)
+  if (PollyDebugPrinting)
     RuntimeDebugBuilder::createCPUPrinter(Builder, "Store to  ", NewPointer,
                                           ": ", ValueOperand, "\n");
 

Modified: polly/trunk/lib/CodeGen/IslExprBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/IslExprBuilder.cpp?rev=298194&r1=298193&r2=298194&view=diff
==============================================================================
--- polly/trunk/lib/CodeGen/IslExprBuilder.cpp (original)
+++ polly/trunk/lib/CodeGen/IslExprBuilder.cpp Sat Mar 18 15:54:43 2017
@@ -10,6 +10,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "polly/CodeGen/IslExprBuilder.h"
+#include "polly/CodeGen/RuntimeDebugBuilder.h"
 #include "polly/Options.h"
 #include "polly/ScopInfo.h"
 #include "polly/Support/GICHelper.h"
@@ -225,6 +226,9 @@ Value *IslExprBuilder::createAccessAddre
 
   const ScopArrayInfo *SAI = nullptr;
 
+  if (PollyDebugPrinting)
+    RuntimeDebugBuilder::createCPUPrinter(Builder, isl_id_get_name(BaseId));
+
   if (IDToSAI)
     SAI = (*IDToSAI)[BaseId];
 
@@ -252,6 +256,8 @@ Value *IslExprBuilder::createAccessAddre
 
   if (isl_ast_expr_get_op_n_arg(Expr) == 1) {
     isl_ast_expr_free(Expr);
+    if (PollyDebugPrinting)
+      RuntimeDebugBuilder::createCPUPrinter(Builder, "\n");
     return Base;
   }
 
@@ -261,6 +267,9 @@ Value *IslExprBuilder::createAccessAddre
     assert(NextIndex->getType()->isIntegerTy() &&
            "Access index should be an integer");
 
+    if (PollyDebugPrinting)
+      RuntimeDebugBuilder::createCPUPrinter(Builder, "[", NextIndex, "]");
+
     if (!IndexOp) {
       IndexOp = NextIndex;
     } else {
@@ -301,6 +310,8 @@ Value *IslExprBuilder::createAccessAddre
 
   Access = Builder.CreateGEP(Base, IndexOp, "polly.access." + BaseName);
 
+  if (PollyDebugPrinting)
+    RuntimeDebugBuilder::createCPUPrinter(Builder, "\n");
   isl_ast_expr_free(Expr);
   return Access;
 }




More information about the llvm-commits mailing list