[polly] r211780 - Use own class for storing the RejectLogs
Andreas Simbuerger
simbuerg at fim.uni-passau.de
Thu Jun 26 06:36:52 PDT 2014
Author: simbuerg
Date: Thu Jun 26 08:36:52 2014
New Revision: 211780
URL: http://llvm.org/viewvc/llvm-project?rev=211780&view=rev
Log:
Use own class for storing the RejectLogs
Use a container class to store the reject logs. Delegating most calls to
the internal std::map and add a few convenient shortcuts (e.g.,
hasErrors()).
Modified:
polly/trunk/include/polly/ScopDetection.h
polly/trunk/include/polly/ScopDetectionDiagnostic.h
polly/trunk/lib/Analysis/ScopDetection.cpp
Modified: polly/trunk/include/polly/ScopDetection.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopDetection.h?rev=211780&r1=211779&r2=211780&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopDetection.h (original)
+++ polly/trunk/include/polly/ScopDetection.h Thu Jun 26 08:36:52 2014
@@ -144,7 +144,7 @@ class ScopDetection : public FunctionPas
RegionSet ValidRegions;
// Remember a list of errors for every region.
- mutable std::map<const Region *, RejectLog> RejectLogs;
+ mutable RejectLogsContainer RejectLogs;
// Remember the invalid functions producted by backends;
typedef std::set<const Function *> FunctionSet;
Modified: polly/trunk/include/polly/ScopDetectionDiagnostic.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopDetectionDiagnostic.h?rev=211780&r1=211779&r2=211780&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopDetectionDiagnostic.h (original)
+++ polly/trunk/include/polly/ScopDetectionDiagnostic.h Thu Jun 26 08:36:52 2014
@@ -173,12 +173,52 @@ public:
iterator begin() const { return ErrorReports.begin(); }
iterator end() const { return ErrorReports.end(); }
- size_t size() { return ErrorReports.size(); }
+ size_t size() const { return ErrorReports.size(); }
const Region *region() const { return R; }
void report(RejectReasonPtr Reject) { ErrorReports.push_back(Reject); }
};
+/// @brief Store reject logs
+class RejectLogsContainer {
+ std::map<const Region *, RejectLog> Logs;
+
+public:
+ typedef std::map<const Region *, RejectLog>::iterator iterator;
+ typedef std::map<const Region *, RejectLog>::const_iterator const_iterator;
+
+ iterator begin() { return Logs.begin(); }
+ iterator end() { return Logs.end(); }
+
+ const_iterator begin() const { return Logs.begin(); }
+ const_iterator end() const { return Logs.end(); }
+
+ void insert(std::pair<const Region *, RejectLog> New) {
+ auto Result = Logs.insert(New);
+ assert(Result.second && "Tried to replace an element in the log!");
+ }
+
+ std::map<const Region *, RejectLog>::mapped_type at(const Region *R) {
+ return Logs.at(R);
+ }
+
+ void clear() { Logs.clear(); }
+
+ size_t count(const Region *R) const { return Logs.count(R); }
+
+ size_t size(const Region *R) const {
+ if (!Logs.count(R))
+ return 0;
+ return Logs.at(R).size();
+ }
+
+ bool hasErrors(const Region *R) const {
+ return (Logs.count(R) && Logs.at(R).size() > 0);
+ }
+
+ bool hasErrors(Region *R) const { return hasErrors((const Region *)R); }
+};
+
//===----------------------------------------------------------------------===//
/// @brief Base class for CFG related reject reasons.
///
Modified: polly/trunk/lib/Analysis/ScopDetection.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetection.cpp?rev=211780&r1=211779&r2=211780&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopDetection.cpp (original)
+++ polly/trunk/lib/Analysis/ScopDetection.cpp Thu Jun 26 08:36:52 2014
@@ -707,12 +707,8 @@ bool ScopDetection::isValidRegion(Region
bool RegionIsValid = isValidRegion(Context);
bool HasErrors = !RegionIsValid || Context.Log.size() > 0;
- if (PollyTrackFailures && HasErrors) {
- // std::map::insert does not replace.
- std::pair<reject_iterator, bool> InsertedValue =
- RejectLogs.insert(std::make_pair(&R, Context.Log));
- assert(InsertedValue.second && "Two logs generated for the same Region.");
- }
+ if (PollyTrackFailures && HasErrors)
+ RejectLogs.insert(std::make_pair(&R, Context.Log));
return RegionIsValid;
}
More information about the llvm-commits
mailing list