28.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 treshold in number of granules beyond which an explicit loop for tagging a memory block is emitted. The memory block is tagged using MTE instructions.