Make getIslCompatibleName globaly available
authorJohannes Doerfert <jdoerfert@codeaurora.org>
Thu, 24 Jul 2014 23:48:02 +0000 (23:48 +0000)
committerJohannes Doerfert <jdoerfert@codeaurora.org>
Thu, 24 Jul 2014 23:48:02 +0000 (23:48 +0000)
llvm-svn: 213907

polly/include/polly/ScopInfo.h
polly/include/polly/Support/GICHelper.h
polly/lib/Analysis/ScopInfo.cpp
polly/lib/Support/GICHelper.cpp

index 6ce4a0f..3f7373c 100644 (file)
@@ -106,7 +106,6 @@ private:
   const Value *BaseAddr;
   std::string BaseName;
   isl_basic_map *createBasicAccessMap(ScopStmt *Statement);
-  void setBaseName();
   ScopStmt *Statement;
 
   /// @brief Reduction type for reduction like accesses, RT_NONE otherwise
index 4c4d5e2..39c2336 100755 (executable)
@@ -18,6 +18,8 @@
 #include "isl/ctx.h"
 #include "llvm/Support/raw_ostream.h"
 
+#include <string>
+
 struct isl_map;
 struct isl_union_map;
 struct isl_set;
@@ -29,6 +31,10 @@ struct isl_aff;
 struct isl_pw_aff;
 struct isl_val;
 
+namespace llvm {
+class Value;
+}
+
 namespace polly {
 __isl_give isl_val *isl_valFromAPInt(isl_ctx *Ctx, const llvm::APInt Int,
                                      bool IsSigned);
@@ -58,6 +64,11 @@ inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
   OS << polly::stringFromIslObj(Map);
   return OS;
 }
+
+/// @brief Return @p Prefix + @p Val->getName() + @p Suffix but Isl compatible.
+std::string getIslCompatibleName(std::string Prefix, const llvm::Value *Val,
+                                 std::string Suffix);
+
 } // end namespace polly
 
 #endif
index e462c77..2028f76 100644 (file)
@@ -309,30 +309,6 @@ MemoryAccess::~MemoryAccess() {
   isl_map_free(newAccessRelation);
 }
 
-static void replace(std::string &str, const std::string &find,
-                    const std::string &replace) {
-  size_t pos = 0;
-  while ((pos = str.find(find, pos)) != std::string::npos) {
-    str.replace(pos, find.length(), replace);
-    pos += replace.length();
-  }
-}
-
-static void makeIslCompatible(std::string &str) {
-  str.erase(0, 1);
-  replace(str, ".", "_");
-  replace(str, "\"", "_");
-}
-
-void MemoryAccess::setBaseName() {
-  raw_string_ostream OS(BaseName);
-  getBaseAddr()->printAsOperand(OS, false);
-  BaseName = OS.str();
-
-  makeIslCompatible(BaseName);
-  BaseName = "MemRef_" + BaseName;
-}
-
 isl_map *MemoryAccess::getAccessRelation() const {
   return isl_map_copy(AccessRelation);
 }
@@ -424,7 +400,7 @@ MemoryAccess::MemoryAccess(const IRAccess &Access, const Instruction *AccInst,
     : Statement(Statement), Inst(AccInst), newAccessRelation(nullptr) {
 
   BaseAddr = Access.getBase();
-  setBaseName();
+  BaseName = getIslCompatibleName("MemRef_", getBaseAddr(), "");
 
   if (!Access.isAffine()) {
     // We overapproximate non-affine accesses with a possible access to the
@@ -809,12 +785,7 @@ ScopStmt::ScopStmt(Scop &parent, TempScop &tempScop, const Region &CurRegion,
     NestLoops[i] = Nest[i];
   }
 
-  raw_string_ostream OS(BaseName);
-  bb.printAsOperand(OS, false);
-  BaseName = OS.str();
-
-  makeIslCompatible(BaseName);
-  BaseName = "Stmt_" + BaseName;
+  BaseName = getIslCompatibleName("Stmt_", &bb, "");
 
   Domain = buildDomain(tempScop, CurRegion);
   buildScattering(Scatter);
index 530ce91..3ad4e50 100644 (file)
@@ -11,6 +11,7 @@
 //
 //===----------------------------------------------------------------------===//
 #include "polly/Support/GICHelper.h"
+#include "llvm/IR/Value.h"
 #include "isl/aff.h"
 #include "isl/map.h"
 #include "isl/schedule.h"
@@ -124,3 +125,30 @@ std::string polly::stringFromIslObj(__isl_keep isl_pw_aff *pwaff) {
   return stringFromIslObjInternal(pwaff, isl_pw_aff_get_ctx,
                                   isl_printer_print_pw_aff);
 }
+
+static void replace(std::string &str, const std::string &find,
+                    const std::string &replace) {
+  size_t pos = 0;
+  while ((pos = str.find(find, pos)) != std::string::npos) {
+    str.replace(pos, find.length(), replace);
+    pos += replace.length();
+  }
+}
+
+static void makeIslCompatible(std::string &str) {
+  replace(str, ".", "_");
+  replace(str, "\"", "_");
+}
+
+std::string polly::getIslCompatibleName(std::string Prefix, const Value *Val,
+                                        std::string Suffix) {
+  std::string ValStr;
+  raw_string_ostream OS(ValStr);
+  Val->printAsOperand(OS, false);
+  ValStr = OS.str();
+  // Remove the leading %
+  ValStr.erase(0, 1);
+  ValStr = Prefix + ValStr + Suffix;
+  makeIslCompatible(ValStr);
+  return ValStr;
+}