[ZoneAlgo] Add motivation for exception. NFC.
authorMichael Kruse <llvm@meinersbur.de>
Wed, 9 Aug 2017 09:29:15 +0000 (09:29 +0000)
committerMichael Kruse <llvm@meinersbur.de>
Wed, 9 Aug 2017 09:29:15 +0000 (09:29 +0000)
Suggested-by: Hongbin Zheng <etherzhhb@gmail.com>
llvm-svn: 310455

polly/lib/Transform/ZoneAlgo.cpp

index 6215199..8ae5d9b 100644 (file)
@@ -281,6 +281,26 @@ ZoneAlgorithm::ZoneAlgorithm(const char *PassName, Scop *S, LoopInfo *LI)
 
 /// Check if all stores in @p Stmt store the very same value.
 ///
+/// This covers a special situation occurring in Polybench's
+/// covariance/correlation (which is typical for algorithms that cover symmetric
+/// matrices):
+///
+/// for (int i = 0; i < n; i += 1)
+///    for (int j = 0; j <= i; j += 1) {
+///            double x = ...;
+///            C[i][j] = x;
+///            C[j][i] = x;
+///    }
+///
+/// For i == j, the same value is written twice to the same element.Double
+/// writes to the same element are not allowed in DeLICM because its algorithm
+/// does not see which of the writes is effective.But if its the same value
+/// anyway, it doesn't matter.
+///
+/// LLVM passes, however, cannot simplify this because the write is necessary
+/// for i != j (unless it would add a condition for one of the writes to occur
+/// only if i != j).
+///
 /// TODO: In the future we may want to extent this to make the checks
 ///       specific to different memory locations.
 static bool onlySameValueWrites(ScopStmt *Stmt) {