AArch64 Parameters (GNU Compiler Collection (GCC) Internals)

#### 30.2.1 AArch64 Parameters ¶

The following choices of name are available on AArch64 targets:

`aarch64-vect-compare-costs` ¶

  When vectorizing, consider using multiple different approaches and use the cost model to choose the cheapest one. This includes:

  - Trying both SVE and Advanced SIMD, when SVE is available.
  - Trying to use 64-bit Advanced SIMD vectors for the smallest data elements, rather than using 128-bit vectors for everything.
  - Trying to use “unpacked” SVE vectors for smaller elements. This includes storing smaller elements in larger containers and accessing elements with extending loads and truncating stores.
`aarch64-float-recp-precision` ¶

  The number of Newton iterations for calculating the reciprocal for float type. The precision of division is proportional to this parameter when division approximation is enabled. The default value is 1.

`aarch64-double-recp-precision` ¶

  The number of Newton iterations for calculating the reciprocal for double type. The precision of division is proportional to this parameter when division approximation is enabled. The default value is 2.

`aarch64-autovec-preference` ¶

  An old alias for `-mautovec-preference`. If both `-mautovec-preference` and `--param=aarch64-autovec-preference` are passed, the `--param` value is used.

`aarch64-ldp-policy` ¶

  Fine-grained policy for load pair (`stp`) instructions. With `--param=aarch64-ldp-policy=default`, use the policy of the tuning structure. This is the current default. With `--param=aarch64-ldp-policy=always`, emit `ldp` regardless of alignment. With `--param=aarch64-ldp-policy=never`, do not emit `ldp`. With `--param=aarch64-ldp-policy=aligned`, emit `ldp` only if the source pointer is aligned to at least double the alignment of the type.

`aarch64-stp-policy` ¶

  Fine-grained policy for store pair (`stp`) instructions. With `--param=aarch64-stp-policy=default`, use the policy of the tuning structure. This is the current default. With `--param=aarch64-stp-policy=always`, emit `stp` regardless of alignment. With `--param=aarch64-stp-policy=never`, do not emit `stp`. With `--param=aarch64-stp-policy=aligned`, emit `stp` only if the source pointer is aligned to at least double the alignment of the type.

`aarch64-ldp-alias-check-limit` ¶

  Limit on the number of alias checks performed by the AArch64 load/store pair fusion pass when attempting to form an `ldp`/`stp`. Higher values make the pass more aggressive at re-ordering loads over stores, at the expense of increased compile time.

`aarch64-ldp-writeback` ¶

  Parameter to control which writeback opportunities the AArch64 load/store pair fusion pass attempts to handle. A value of zero disables writeback handling. One means we try to form pairs involving one or more existing individual writeback accesses where possible. A value of two means we also try to opportunistically form writeback opportunities by folding in trailing destructive updates of the base register used by a pair.

`aarch64-loop-vect-issue-rate-niters` ¶

  The tuning for some AArch64 CPUs tries to take both latencies and issue rates into account when deciding whether a loop should be vectorized using SVE, vectorized using Advanced SIMD, or not vectorized at all. If this parameter is set to n, GCC does not use this heuristic for loops that are known to execute in fewer than n Advanced SIMD iterations.

`aarch64-vect-unroll-limit` ¶

  The vectorizer uses available tuning information to determine whether it would be beneficial to unroll the main vectorized loop and by how much. This parameter sets the upper bound of how much the vectorizer unrolls the main loop. The default value is four.

`aarch64-tag-memory-loop-threshold` ¶

  Parameter to control the threshold in number of granules beyond which an explicit loop for tagging a memory block is emitted. The memory block is tagged using MTE instructions.