From 8756b3fbecfb54741298cb61dc68c849f5871692 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Wed, 9 Aug 2017 09:29:15 +0000 Subject: [PATCH] [ZoneAlgo] Add motivation for exception. NFC. Suggested-by: Hongbin Zheng llvm-svn: 310455 --- polly/lib/Transform/ZoneAlgo.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/polly/lib/Transform/ZoneAlgo.cpp b/polly/lib/Transform/ZoneAlgo.cpp index 6215199..8ae5d9b 100644 --- a/polly/lib/Transform/ZoneAlgo.cpp +++ b/polly/lib/Transform/ZoneAlgo.cpp @@ -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) { -- 2.7.4