[polly] r310455 - [ZoneAlgo] Add motivation for exception. NFC.

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 9 02:29:15 PDT 2017

```Author: meinersbur
Date: Wed Aug  9 02:29:15 2017
New Revision: 310455

URL: http://llvm.org/viewvc/llvm-project?rev=310455&view=rev
Log:
[ZoneAlgo] Add motivation for exception. NFC.

Suggested-by: Hongbin Zheng <etherzhhb at gmail.com>

Modified:
polly/trunk/lib/Transform/ZoneAlgo.cpp

Modified: polly/trunk/lib/Transform/ZoneAlgo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Transform/ZoneAlgo.cpp?rev=310455&r1=310454&r2=310455&view=diff
==============================================================================
--- polly/trunk/lib/Transform/ZoneAlgo.cpp (original)
+++ polly/trunk/lib/Transform/ZoneAlgo.cpp Wed Aug  9 02:29:15 2017
@@ -281,6 +281,26 @@ ZoneAlgorithm::ZoneAlgorithm(const char

/// 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) {

```