OSDN Git Service

lib/xor: make xor prototypes more friendly to compiler vectorization
authorArd Biesheuvel <ardb@kernel.org>
Sat, 5 Feb 2022 15:23:45 +0000 (16:23 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 11 Feb 2022 09:39:39 +0000 (20:39 +1100)
commit297565aa22cfa80ab0f88c3569693aea0b6afb6d
tree86c452349612ec00b52d83c78900bcf45b6bbd8d
parente8bf24bd439da1ee7f37c2b03f44c6ad37c0c8c0
lib/xor: make xor prototypes more friendly to compiler vectorization

Modern compilers are perfectly capable of extracting parallelism from
the XOR routines, provided that the prototypes reflect the nature of the
input accurately, in particular, the fact that the input vectors are
expected not to overlap. This is not documented explicitly, but is
implied by the interchangeability of the various C routines, some of
which use temporary variables while others don't: this means that these
routines only behave identically for non-overlapping inputs.

So let's decorate these input vectors with the __restrict modifier,
which informs the compiler that there is no overlap. While at it, make
the input-only vectors pointer-to-const as well.

Tested-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Link: https://github.com/ClangBuiltLinux/linux/issues/563
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
17 files changed:
arch/alpha/include/asm/xor.h
arch/arm/include/asm/xor.h
arch/arm64/include/asm/xor.h
arch/arm64/lib/xor-neon.c
arch/ia64/include/asm/xor.h
arch/powerpc/include/asm/xor_altivec.h
arch/powerpc/lib/xor_vmx.c
arch/powerpc/lib/xor_vmx.h
arch/powerpc/lib/xor_vmx_glue.c
arch/s390/lib/xor.c
arch/sparc/include/asm/xor_32.h
arch/sparc/include/asm/xor_64.h
arch/x86/include/asm/xor.h
arch/x86/include/asm/xor_32.h
arch/x86/include/asm/xor_avx.h
include/asm-generic/xor.h
include/linux/raid/xor.h