diff options
-rw-r--r-- | polly/include/polly/ScopInfo.h | 1 | ||||
-rwxr-xr-x | polly/include/polly/Support/GICHelper.h | 11 | ||||
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 33 | ||||
-rw-r--r-- | polly/lib/Support/GICHelper.cpp | 28 |
4 files changed, 41 insertions, 32 deletions
diff --git a/polly/include/polly/ScopInfo.h b/polly/include/polly/ScopInfo.h index 6ce4a0fe0cd..3f7373cb62e 100644 --- a/polly/include/polly/ScopInfo.h +++ b/polly/include/polly/ScopInfo.h @@ -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 diff --git a/polly/include/polly/Support/GICHelper.h b/polly/include/polly/Support/GICHelper.h index 4c4d5e29039..39c2336ae15 100755 --- a/polly/include/polly/Support/GICHelper.h +++ b/polly/include/polly/Support/GICHelper.h @@ -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 diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index e462c779194..2028f7630a4 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -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); diff --git a/polly/lib/Support/GICHelper.cpp b/polly/lib/Support/GICHelper.cpp index 530ce91371f..3ad4e501b71 100644 --- a/polly/lib/Support/GICHelper.cpp +++ b/polly/lib/Support/GICHelper.cpp @@ -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; +} |