Why the compiler assumes your pointers overlap, and what restrict actually promises.
Dependency distance, recurrences, reductions and which patterns a compiler can still vectorize.
Dependencies, aliasing, alignment, control flow and profitability. The reasons automatic vectorization breaks down, and what each one looks like in source code.
Compilers skip vectorization when legality, profitability or target constraints get in the way. Learn the most common blockers: dependencies, aliasing, control flow, calls and memory access.