You copied the Doc URL to your clipboard.

-fvectorize, -fno-vectorize

Enables or disables the generation of Advanced SIMD and MVE vector instructions directly from C or C++ code at optimization levels -O1 and higher.

Note

This topic includes descriptions of [BETA] features. See Support level definitions.

The use of ‑fvectorize for MVE vectorization is a [BETA] support feature.

Default

The default depends on the optimization level in use.

At optimization level -O0 (the default optimization level), armclang never performs automatic vectorization. The -fvectorize and -fno-vectorize options are ignored.

At optimization level -O1, the default is -fno-vectorize. Use -fvectorize to enable automatic vectorization. When using -fvectorize with -O1, vectorization might be inhibited in the absence of other optimizations which might be present at -O2 or higher.

At optimization level -O2 and above, the default is -fvectorize. Use -fno-vectorize to disable automatic vectorization.

Using -fno-vectorize does not necessarily prevent the compiler from emitting Advanced SIMD and MVE instructions. The compiler or linker might still introduce Advanced SIMD or MVE instructions, such as when linking libraries that contain these instructions.

Examples

This example enables automatic vectorization with optimization level -O1:

armclang --target=arm-arm-none-eabi -march=armv8-a -fvectorize -O1 -c file.c

To prevent the compiler from emitting Advanced SIMD instructions for AArch64 targets, specify +nosimd using -march or -mcpu. For example:

armclang --target=aarch64-arm-none-eabi -march=armv8-a+nosimd -O2 file.c -c -S -o file.s

To prevent the compiler from emitting Advanced SIMD instructions for AArch32 targets, set the option -mfpu to the correct value that does not include Advanced SIMD, for example fp-armv8:

armclang --target=aarch32-arm-none-eabi -march=armv8-a -mfpu=fp-armv8 -O2 file.c -c -S -o file.s