2021-01-18 11:01:33

by Adrian Ratiu

[permalink] [raw]
Subject: [PATCH v3 RESEND 1/2] arm: lib: xor-neon: remove unnecessary GCC < 4.6 warning

From: Nathan Chancellor <[email protected]>

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 <[email protected]>
Reviewed-by: Nick Desaulniers <[email protected]>
Signed-off-by: Nathan Chancellor <[email protected]>
Signed-off-by: Adrian Ratiu <[email protected]>
---
arch/arm/lib/xor-neon.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)

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"
--
2.30.0


2021-01-18 11:32:38

by Adrian Ratiu

[permalink] [raw]
Subject: Re: [PATCH v3 RESEND 1/2] arm: lib: xor-neon: remove unnecessary GCC < 4.6 warning

On Mon, 18 Jan 2021, Arnd Bergmann <[email protected]> wrote:
> On Mon, Jan 18, 2021 at 11:56 AM Adrian Ratiu
> <[email protected]> wrote:
>>
>> From: Nathan Chancellor <[email protected]>
>>
>> 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 <[email protected]>
>> Reviewed-by: Nick Desaulniers <[email protected]>
>> Signed-off-by: Nathan Chancellor <[email protected]>
>> Signed-off-by: Adrian Ratiu <[email protected]>
>
> 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

2021-01-18 11:39:56

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH v3 RESEND 1/2] arm: lib: xor-neon: remove unnecessary GCC < 4.6 warning

On Mon, Jan 18, 2021 at 12:28 PM Adrian Ratiu
<[email protected]> wrote:
> On Mon, 18 Jan 2021, Arnd Bergmann <[email protected]> wrote:
> > On Mon, Jan 18, 2021 at 11:56 AM Adrian Ratiu <[email protected]> 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

2021-01-19 03:52:17

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH v3 RESEND 1/2] arm: lib: xor-neon: remove unnecessary GCC < 4.6 warning

On Mon, Jan 18, 2021 at 11:56 AM Adrian Ratiu
<[email protected]> wrote:
>
> From: Nathan Chancellor <[email protected]>
>
> 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 <[email protected]>
> Reviewed-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Nathan Chancellor <[email protected]>
> Signed-off-by: Adrian Ratiu <[email protected]>

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