[PATCH] Scoped NoAlias Metadata
tobias at grosser.es
Mon Jul 21 06:00:57 PDT 2014
On 20/07/2014 05:47, hfinkel at anl.gov wrote:
> Updated to also preserve the metadata in the loop vectorizer.
> Index: docs/LangRef.rst
> --- docs/LangRef.rst
> +++ docs/LangRef.rst
> @@ -2822,6 +2822,59 @@
> 4 byte gap between the two fields. This gap represents padding which
> does not carry useful data and need not be preserved.
> +'``noalias``' and '``alias.scope``' Metadata
> +``noalias`` and ``alias.scope`` metadata provide the ability to specify generic
> +noalias memory-access sets. This means that some collection of memory access
> +instructions (loads, stores, memory-accessing calls, etc.) that carry
> +``noalias`` metadata can specifically be specified not to alias with some other
> +collection of memory access instructions that carry ``alias.scope`` metadata.
> +Each type of metadata specifies a list of scopes, and when evaluating an
> +aliasing query, if one of the instructions has a scope in its ``alias.scope``
> +list that is identical to a scope in the other instruction's ``noalias`` list,
> +or is a descendant (in the scope hierarchy) of a scope in the other
> +instruction's ``noalias`` list , then the two memory accesses are assumed not
> +to alias.
> +The metadata identifying each scope is itself a list containing one or two
> +entries. The first entry is the name of the scope. Note that if the name is a
> +string then it can be combined accross functions and translation units. A
> +self-reference can be used to create globally unqiue scope names.
More information about the llvm-commits