forked from OSchip/llvm-project
[ZoneAlgo] Add motivation for exception. NFC.
Suggested-by: Hongbin Zheng <etherzhhb@gmail.com> llvm-svn: 310455
This commit is contained in:
parent
a9033aaba2
commit
8756b3fbec
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue