Using the --diag_warning=optimizations option produces
an optimization warning message for the addition() function:

armcc -O3 -Otime --vectorize --diag_warning=optimizations test.c

Using the --remarks option produces the same messages.

Adding the __inline qualifier to the definition
of addition() enables this code to vectorize. However, it is still not optimal. Using the --diag_warning=optimizations option
again produces optimization warning messages to indicate that the
loop vectorizes but there might be a potential pointer aliasing
problem.

The compiler must generate a runtime test for aliasing and
output both vectorized and scalar copies of the code. If you know
that the pointers are not aliased, you can use the restrict keyword to reduce the runtime test overhead and improve vectorization
performance:

The final improvement you can make is to indicate the number of
loop iterations. In the previous example, the
number of iterations is not fixed and might not be a multiple that
can fit exactly into a NEON register. This means that the compiler
must test for remaining iterations to execute using nonvectored
code. If you know that your iteration count is divisible by the
number of elements that the NEON unit can operate on in parallel,
you can indicate this to the compiler using the __promise intrinsic. The following example shows the final code that obtains the best performance from vectorization.