summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/include/polly/ScopInfo.h1
-rwxr-xr-xpolly/include/polly/Support/GICHelper.h11
-rw-r--r--polly/lib/Analysis/ScopInfo.cpp33
-rw-r--r--polly/lib/Support/GICHelper.cpp28
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;
+}
OpenPOWER on IntegriCloud