diff mbox series

[v3,RESEND,1/2] arm: lib: xor-neon: remove unnecessary GCC < 4.6 warning

Message ID 20210118105557.186614-2-adrian.ratiu@collabora.com (mailing list archive)
State New, archived
Headers show
Series xor-neon: Remove GCC warn & pragmas | expand

Commit Message

Adrian Ratiu Jan. 18, 2021, 10:55 a.m. UTC
From: Nathan Chancellor <natechancellor@gmail.com>

Drop warning because kernel now requires GCC >= v4.9 after
commit 6ec4476ac825 ("Raise gcc version requirement to 4.9")
and clarify that -ftree-vectorize now always needs enabling
for GCC by directly testing the presence of CONFIG_CC_IS_GCC.

Another reason to remove the warning is that Clang exposes
itself as GCC < 4.6 so it triggers the warning about GCC
which doesn't make much sense and risks misleading users.

As a side-note remark, -fttree-vectorize is on by default in
Clang, but it currently does not work (see linked issues).

Link: https://github.com/ClangBuiltLinux/linux/issues/496
Link: https://github.com/ClangBuiltLinux/linux/issues/503
Reported-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
---
 arch/arm/lib/xor-neon.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

Comments

Arnd Bergmann Jan. 18, 2021, 11:06 a.m. UTC | #1
On Mon, Jan 18, 2021 at 11:56 AM Adrian Ratiu
<adrian.ratiu@collabora.com> wrote:
>
> From: Nathan Chancellor <natechancellor@gmail.com>
>
> Drop warning because kernel now requires GCC >= v4.9 after
> commit 6ec4476ac825 ("Raise gcc version requirement to 4.9")
> and clarify that -ftree-vectorize now always needs enabling
> for GCC by directly testing the presence of CONFIG_CC_IS_GCC.
>
> Another reason to remove the warning is that Clang exposes
> itself as GCC < 4.6 so it triggers the warning about GCC
> which doesn't make much sense and risks misleading users.
>
> As a side-note remark, -fttree-vectorize is on by default in
> Clang, but it currently does not work (see linked issues).
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/496
> Link: https://github.com/ClangBuiltLinux/linux/issues/503
> Reported-by: Nick Desaulniers <ndesaulniers@google.com>
> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>

Shouldn't there be a check for whatever minimum version of clang
produces optimized code now? As I understand it, the warning
was originally meant to complain about both old gcc and any
version of clang, while waiting for a new version of clang to
produce vectorized code.

Has that happened now?

       Arnd
Adrian Ratiu Jan. 18, 2021, 11:28 a.m. UTC | #2
On Mon, 18 Jan 2021, Arnd Bergmann <arnd@kernel.org> wrote:
> On Mon, Jan 18, 2021 at 11:56 AM Adrian Ratiu 
> <adrian.ratiu@collabora.com> wrote: 
>> 
>> From: Nathan Chancellor <natechancellor@gmail.com> 
>> 
>> Drop warning because kernel now requires GCC >= v4.9 after 
>> commit 6ec4476ac825 ("Raise gcc version requirement to 4.9") 
>> and clarify that -ftree-vectorize now always needs enabling for 
>> GCC by directly testing the presence of CONFIG_CC_IS_GCC. 
>> 
>> Another reason to remove the warning is that Clang exposes 
>> itself as GCC < 4.6 so it triggers the warning about GCC which 
>> doesn't make much sense and risks misleading users. 
>> 
>> As a side-note remark, -fttree-vectorize is on by default in 
>> Clang, but it currently does not work (see linked issues). 
>> 
>> Link: https://github.com/ClangBuiltLinux/linux/issues/496 Link: 
>> https://github.com/ClangBuiltLinux/linux/issues/503 
>> Reported-by: Nick Desaulniers <ndesaulniers@google.com> 
>> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> 
>> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> 
>> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> 
> 
> Shouldn't there be a check for whatever minimum version of clang 
> produces optimized code now? As I understand it, the warning was 
> originally meant to complain about both old gcc and any version 
> of clang, while waiting for a new version of clang to produce 
> vectorized code. 
> 
> Has that happened now? 

No, clang does not produce vectorized code by default, not even 
with the -ftree-vectorize flag explicitely added like in the next 
patch in this series (that flag is enabled by default in clang 
anyway, so no effect).

Clang needs more investigation and testing because with additional 
code changes it can be "forced" to output vectorized code, but 
that is outside the scope of this series.

If you think it's a good idea I can add a warning only for Clang 
which makes more sense than telling clang users to upgrade their 
GCC, since now Clang is officially supported. What do you think?


>
>        Arnd
Arnd Bergmann Jan. 18, 2021, 11:33 a.m. UTC | #3
On Mon, Jan 18, 2021 at 12:28 PM Adrian Ratiu
<adrian.ratiu@collabora.com> wrote:
> On Mon, 18 Jan 2021, Arnd Bergmann <arnd@kernel.org> wrote:
> > On Mon, Jan 18, 2021 at 11:56 AM Adrian Ratiu <adrian.ratiu@collabora.com> wrote:
>
> No, clang does not produce vectorized code by default, not even
> with the -ftree-vectorize flag explicitely added like in the next
> patch in this series (that flag is enabled by default in clang
> anyway, so no effect).
>
> Clang needs more investigation and testing because with additional
> code changes it can be "forced" to output vectorized code, but
> that is outside the scope of this series.
>
> If you think it's a good idea I can add a warning only for Clang
> which makes more sense than telling clang users to upgrade their
> GCC, since now Clang is officially supported. What do you think?

Yes, either a warning or a Kconfig check seems better to me than
just trying to build code that ends up not doing what it is meant to.

       Arnd
diff mbox series

Patch

diff --git a/arch/arm/lib/xor-neon.c b/arch/arm/lib/xor-neon.c
index b99dd8e1c93f..e1e76186ec23 100644
--- a/arch/arm/lib/xor-neon.c
+++ b/arch/arm/lib/xor-neon.c
@@ -19,15 +19,8 @@  MODULE_LICENSE("GPL");
  * -ftree-vectorize) to attempt to exploit implicit parallelism and emit
  * NEON instructions.
  */
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#ifdef CONFIG_CC_IS_GCC
 #pragma GCC optimize "tree-vectorize"
-#else
-/*
- * While older versions of GCC do not generate incorrect code, they fail to
- * recognize the parallel nature of these functions, and emit plain ARM code,
- * which is known to be slower than the optimized ARM code in asm-arm/xor.h.
- */
-#warning This code requires at least version 4.6 of GCC
 #endif
 
 #pragma GCC diagnostic ignored "-Wunused-variable"