mirror-llvm-project/polly
Michael Kruse db614d99ee
[Polly] Do not invalidate SCEV before codegen (#194677)
ScopInfo expects the state of the IR to reflect the state before
codegen. Invalidating ScalarEvolution/SCEVs has the effect that values
need to be reanalyzed, but this is not possible during codegen where the
CFG and SSA is not yet in a consistent state. That is, we rely on
ScalarEvolution to cache SCEVs from before the codegen phase. If
ScalarEvolution did not already do this, Polly would need to more
aggressively store SCEVs itself (in this case: `canSyntheziseInStmt`)
instead of asking ScalarEvolution.

The SCEV invalidation was introduced in
a61eda7698 which unfortunately does not
explain the issue it intends to fix. The added test case passes even
without the invalidation. In any case, SCEVs should represent the state
before codegen.

Fixes #192208
2026-05-21 23:47:58 +02:00
..
ci [Polly] Forward VFS from PassBuilder for IO sandboxing (#188657) 2026-03-28 23:55:05 +01:00
cmake
docs [Polly] Remove ScopPass infrastructure (#125783) 2025-11-16 14:12:52 +00:00
include/polly [PassManager] Make passes inherit from RequiredPassInfoMixin/OptionalPassInfoMixin (#192120) 2026-05-06 10:00:07 -07:00
lib [Polly] Do not invalidate SCEV before codegen (#194677) 2026-05-21 23:47:58 +02:00
test [Polly] Do not invalidate SCEV before codegen (#194677) 2026-05-21 23:47:58 +02:00
unittests [Polly] Disable PCH reuse for unit tests (#193209) 2026-04-21 12:43:13 +00:00
utils
www
.arclint
.gitattributes
.gitignore
CMakeLists.txt [Polly] Remove Accidental Test Comment in CMakeLists.txt 2025-07-22 21:27:56 +00:00
CREDITS.txt
LICENSE.TXT
Maintainers.md
README

Polly - Polyhedral optimizations for LLVM
-----------------------------------------
http://polly.llvm.org/

Polly uses a mathematical representation, the polyhedral model, to represent and
transform loops and other control flow structures. Using an abstract
representation it is possible to reason about transformations in a more general
way and to use highly optimized linear programming libraries to figure out the
optimal loop structure. These transformations can be used to do constant
propagation through arrays, remove dead loop iterations, optimize loops for
cache locality, optimize arrays, apply advanced automatic parallelization, drive
vectorization, or they can be used to do software pipelining.