llvm-capstone/polly
Nikita Popov b1cd393f9e [AA] Tracking per-location ModRef info in FunctionModRefBehavior (NFCI)
Currently, FunctionModRefBehavior tracks whether the function reads
or writes memory (ModRefInfo) and which locations it can access
(argmem, inaccessiblemem and other). This patch changes it to track
ModRef information per-location instead.

To give two examples of why this is useful:

* D117095 highlights a weakness of ModRef modelling in the presence
  of operand bundles. For a memcpy call with deopt operand bundle,
  we want to say that it can read any memory, but only write argument
  memory. This would allow them to be treated like any other calls.
  However, we currently can't express this and have to say that it
  can read or write any memory.
* D127383 would ideally be modelled as a separate threadid location,
  where threadid Refs outside pre-split coroutines can be ignored
  (like other accesses to constant memory). The current representation
  does not allow modelling this precisely.

The patch as implemented is intended to be NFC, but there are some
obvious opportunities for improvements and simplification. To fully
capitalize on this we would also want to change the way we represent
memory attributes on functions, but that's a larger change, and I
think it makes sense to separate out the FunctionModRefBehavior
refactoring.

Differential Revision: https://reviews.llvm.org/D130896
2022-09-14 16:34:41 +02:00
..
cmake Revert "[CMake] Avoid LLVM_BINARY_DIR when other more specific variable are better-suited" 2022-08-25 11:13:46 -04:00
docs [polly] Fixed a number of typos. NFC 2022-08-07 22:56:07 +08:00
include/polly [polly] Fixed a number of typos. NFC 2022-08-07 22:56:07 +08:00
lib [AA] Tracking per-location ModRef info in FunctionModRefBehavior (NFCI) 2022-09-14 16:34:41 +02:00
test Revert "[CMake] Avoid LLVM_BINARY_DIR when other more specific variable are better-suited" 2022-08-25 11:13:46 -04:00
tools [polly] Fixed a number of typos. NFC 2022-08-07 22:56:07 +08:00
unittests [polly][unittests] Link DeLICMTests with libLLVMCore 2022-01-28 21:58:40 +01:00
utils
www [polly] Fixed a number of typos. NFC 2022-08-07 22:56:07 +08:00
.arclint
.gitattributes
.gitignore
CMakeLists.txt [Polly] Don't use llvm-config anymore (in CMake sad path) 2022-08-23 22:47:14 -04:00
CREDITS.txt
LICENSE.TXT Rename top-level LICENSE.txt files to LICENSE.TXT 2021-03-10 21:26:24 -08:00
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.