diff mbox series

[v2] raid6/ppc: Fix build for clang

Message ID 20181102004455.10157-1-joel@jms.id.au
State Accepted
Commit e213574a449f7a57d4202c1869bbc7680b6b5521
Headers show
Series [v2] raid6/ppc: Fix build for clang | expand

Commit Message

Joel Stanley Nov. 2, 2018, 12:44 a.m. UTC
We cannot build these files with clang as it does not allow altivec
instructions in assembly when -msoft-float is passed.

Jinsong Ji <jji@us.ibm.com> wrote:
> We currently disable Altivec/VSX support when enabling soft-float.  So

> any usage of vector builtins will break.

>

> Enable Altivec/VSX with soft-float may need quite some clean up work, so

> I guess this is currently a limitation.

>

> Removing -msoft-float will make it work (and we are lucky that no

> floating point instructions will be generated as well).


This is a workaround until the issue is resolved in clang.

Link: https://bugs.llvm.org/show_bug.cgi?id=31177
Link: https://github.com/ClangBuiltLinux/linux/issues/239
Signed-off-by: Joel Stanley <joel@jms.id.au>

---
v2: fix typo in comment, thanks Jinsong

 lib/raid6/Makefile | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

-- 
2.19.1

Comments

Nick Desaulniers Nov. 2, 2018, 5:34 p.m. UTC | #1
On Thu, Nov 1, 2018 at 5:45 PM Joel Stanley <joel@jms.id.au> wrote:
>

> We cannot build these files with clang as it does not allow altivec

> instructions in assembly when -msoft-float is passed.

>

> Jinsong Ji <jji@us.ibm.com> wrote:

> > We currently disable Altivec/VSX support when enabling soft-float.  So

> > any usage of vector builtins will break.

> >

> > Enable Altivec/VSX with soft-float may need quite some clean up work, so

> > I guess this is currently a limitation.

> >

> > Removing -msoft-float will make it work (and we are lucky that no

> > floating point instructions will be generated as well).

>

> This is a workaround until the issue is resolved in clang.

>

> Link: https://bugs.llvm.org/show_bug.cgi?id=31177

> Link: https://github.com/ClangBuiltLinux/linux/issues/239

> Signed-off-by: Joel Stanley <joel@jms.id.au>

> ---

> v2: fix typo in comment, thanks Jinsong

>

>  lib/raid6/Makefile | 15 +++++++++++++++

>  1 file changed, 15 insertions(+)

>

> diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile

> index 2f8b61dfd9b0..7ed43eaa02ef 100644

> --- a/lib/raid6/Makefile

> +++ b/lib/raid6/Makefile

> @@ -18,6 +18,21 @@ quiet_cmd_unroll = UNROLL  $@

>

>  ifeq ($(CONFIG_ALTIVEC),y)

>  altivec_flags := -maltivec $(call cc-option,-mabi=altivec)

> +

> +ifdef CONFIG_CC_IS_CLANG

> +# clang ppc port does not yet support -maltivec when -msoft-float is

> +# enabled. A future release of clang will resolve this

> +# https://bugs.llvm.org/show_bug.cgi?id=31177

> +CFLAGS_REMOVE_altivec1.o  += -msoft-float

> +CFLAGS_REMOVE_altivec2.o  += -msoft-float

> +CFLAGS_REMOVE_altivec4.o  += -msoft-float

> +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> +CFLAGS_REMOVE_vpermxor1.o += -msoft-float

> +CFLAGS_REMOVE_vpermxor2.o += -msoft-float

> +CFLAGS_REMOVE_vpermxor4.o += -msoft-float

> +CFLAGS_REMOVE_vpermxor8.o += -msoft-float

> +endif


Hi Joel, thanks for this patch!  My same thoughts about
CONFIG_CC_IS_CLANG vs cc-option from
https://lists.ozlabs.org/pipermail/linuxppc-dev/2018-November/180939.html
apply here as well.  I don't feel strongly about either though.  What
are your thoughts?

>  endif

>

>  # The GCC option -ffreestanding is required in order to compile code containing

> --

> 2.19.1

>



-- 
Thanks,
~Nick Desaulniers
Joel Stanley Dec. 3, 2018, 10:24 a.m. UTC | #2
On Sat, 3 Nov 2018 at 04:04, Nick Desaulniers <ndesaulniers@google.com> wrote:
>

> On Thu, Nov 1, 2018 at 5:45 PM Joel Stanley <joel@jms.id.au> wrote:

> >

> > We cannot build these files with clang as it does not allow altivec

> > instructions in assembly when -msoft-float is passed.

> >

> > Jinsong Ji <jji@us.ibm.com> wrote:

> > > We currently disable Altivec/VSX support when enabling soft-float.  So

> > > any usage of vector builtins will break.

> > >

> > > Enable Altivec/VSX with soft-float may need quite some clean up work, so

> > > I guess this is currently a limitation.

> > >

> > > Removing -msoft-float will make it work (and we are lucky that no

> > > floating point instructions will be generated as well).

> >

> > This is a workaround until the issue is resolved in clang.

> >

> > Link: https://bugs.llvm.org/show_bug.cgi?id=31177

> > Link: https://github.com/ClangBuiltLinux/linux/issues/239

> > Signed-off-by: Joel Stanley <joel@jms.id.au>

> > ---

> > v2: fix typo in comment, thanks Jinsong

> >

> >  lib/raid6/Makefile | 15 +++++++++++++++

> >  1 file changed, 15 insertions(+)

> >

> > diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile

> > index 2f8b61dfd9b0..7ed43eaa02ef 100644

> > --- a/lib/raid6/Makefile

> > +++ b/lib/raid6/Makefile

> > @@ -18,6 +18,21 @@ quiet_cmd_unroll = UNROLL  $@

> >

> >  ifeq ($(CONFIG_ALTIVEC),y)

> >  altivec_flags := -maltivec $(call cc-option,-mabi=altivec)

> > +

> > +ifdef CONFIG_CC_IS_CLANG

> > +# clang ppc port does not yet support -maltivec when -msoft-float is

> > +# enabled. A future release of clang will resolve this

> > +# https://bugs.llvm.org/show_bug.cgi?id=31177

> > +CFLAGS_REMOVE_altivec1.o  += -msoft-float

> > +CFLAGS_REMOVE_altivec2.o  += -msoft-float

> > +CFLAGS_REMOVE_altivec4.o  += -msoft-float

> > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > +CFLAGS_REMOVE_vpermxor1.o += -msoft-float

> > +CFLAGS_REMOVE_vpermxor2.o += -msoft-float

> > +CFLAGS_REMOVE_vpermxor4.o += -msoft-float

> > +CFLAGS_REMOVE_vpermxor8.o += -msoft-float

> > +endif

>

> Hi Joel, thanks for this patch!  My same thoughts about

> CONFIG_CC_IS_CLANG vs cc-option from

> https://lists.ozlabs.org/pipermail/linuxppc-dev/2018-November/180939.html

> apply here as well.  I don't feel strongly about either though.  What

> are your thoughts?


I'm not sure that we can test for this one with cc-option. The result
of having -maltivec with -msoft-float is a error about the internals
of clang, which isn't something that kbuild is set up to test for.

When clang is fixed to allow this combination we will still build this
code in the same way, so in that sense it fails "open".

Cheers,

Joel
Nick Desaulniers Dec. 3, 2018, 6:45 p.m. UTC | #3
On Mon, Dec 3, 2018 at 2:24 AM Joel Stanley <joel@jms.id.au> wrote:
>

> On Sat, 3 Nov 2018 at 04:04, Nick Desaulniers <ndesaulniers@google.com> wrote:

> >

> > On Thu, Nov 1, 2018 at 5:45 PM Joel Stanley <joel@jms.id.au> wrote:

> > >

> > > We cannot build these files with clang as it does not allow altivec

> > > instructions in assembly when -msoft-float is passed.

> > >

> > > Jinsong Ji <jji@us.ibm.com> wrote:

> > > > We currently disable Altivec/VSX support when enabling soft-float.  So

> > > > any usage of vector builtins will break.

> > > >

> > > > Enable Altivec/VSX with soft-float may need quite some clean up work, so

> > > > I guess this is currently a limitation.

> > > >

> > > > Removing -msoft-float will make it work (and we are lucky that no

> > > > floating point instructions will be generated as well).

> > >

> > > This is a workaround until the issue is resolved in clang.

> > >

> > > Link: https://bugs.llvm.org/show_bug.cgi?id=31177

> > > Link: https://github.com/ClangBuiltLinux/linux/issues/239

> > > Signed-off-by: Joel Stanley <joel@jms.id.au>

> > > ---

> > > v2: fix typo in comment, thanks Jinsong

> > >

> > >  lib/raid6/Makefile | 15 +++++++++++++++

> > >  1 file changed, 15 insertions(+)

> > >

> > > diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile

> > > index 2f8b61dfd9b0..7ed43eaa02ef 100644

> > > --- a/lib/raid6/Makefile

> > > +++ b/lib/raid6/Makefile

> > > @@ -18,6 +18,21 @@ quiet_cmd_unroll = UNROLL  $@

> > >

> > >  ifeq ($(CONFIG_ALTIVEC),y)

> > >  altivec_flags := -maltivec $(call cc-option,-mabi=altivec)

> > > +

> > > +ifdef CONFIG_CC_IS_CLANG

> > > +# clang ppc port does not yet support -maltivec when -msoft-float is

> > > +# enabled. A future release of clang will resolve this

> > > +# https://bugs.llvm.org/show_bug.cgi?id=31177

> > > +CFLAGS_REMOVE_altivec1.o  += -msoft-float

> > > +CFLAGS_REMOVE_altivec2.o  += -msoft-float

> > > +CFLAGS_REMOVE_altivec4.o  += -msoft-float

> > > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > > +CFLAGS_REMOVE_vpermxor1.o += -msoft-float

> > > +CFLAGS_REMOVE_vpermxor2.o += -msoft-float

> > > +CFLAGS_REMOVE_vpermxor4.o += -msoft-float

> > > +CFLAGS_REMOVE_vpermxor8.o += -msoft-float

> > > +endif

> >

> > Hi Joel, thanks for this patch!  My same thoughts about

> > CONFIG_CC_IS_CLANG vs cc-option from

> > https://lists.ozlabs.org/pipermail/linuxppc-dev/2018-November/180939.html

> > apply here as well.  I don't feel strongly about either though.  What

> > are your thoughts?

>

> I'm not sure that we can test for this one with cc-option. The result

> of having -maltivec with -msoft-float is a error about the internals

> of clang, which isn't something that kbuild is set up to test for.


As in clang itself crashes, and cc-option/kbuild can't handle that gracefully?

>

> When clang is fixed to allow this combination we will still build this

> code in the same way, so in that sense it fails "open".

>

> Cheers,

>

> Joel




-- 
Thanks,
~Nick Desaulniers
Joel Stanley Dec. 3, 2018, 10:13 p.m. UTC | #4
On Tue, 4 Dec 2018 at 05:15, Nick Desaulniers <ndesaulniers@google.com> wrote:
> > > > +ifdef CONFIG_CC_IS_CLANG

> > > > +# clang ppc port does not yet support -maltivec when -msoft-float is

> > > > +# enabled. A future release of clang will resolve this

> > > > +# https://bugs.llvm.org/show_bug.cgi?id=31177

> > > > +CFLAGS_REMOVE_altivec1.o  += -msoft-float

> > > > +CFLAGS_REMOVE_altivec2.o  += -msoft-float

> > > > +CFLAGS_REMOVE_altivec4.o  += -msoft-float

> > > > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > > > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > > > +CFLAGS_REMOVE_vpermxor1.o += -msoft-float

> > > > +CFLAGS_REMOVE_vpermxor2.o += -msoft-float

> > > > +CFLAGS_REMOVE_vpermxor4.o += -msoft-float

> > > > +CFLAGS_REMOVE_vpermxor8.o += -msoft-float

> > > > +endif

> > >

> > > Hi Joel, thanks for this patch!  My same thoughts about

> > > CONFIG_CC_IS_CLANG vs cc-option from

> > > https://lists.ozlabs.org/pipermail/linuxppc-dev/2018-November/180939.html

> > > apply here as well.  I don't feel strongly about either though.  What

> > > are your thoughts?

> >

> > I'm not sure that we can test for this one with cc-option. The result

> > of having -maltivec with -msoft-float is a error about the internals

> > of clang, which isn't something that kbuild is set up to test for.

>

> As in clang itself crashes, and cc-option/kbuild can't handle that gracefully?


The developer gets something like this:

SplitVectorResult #0: t196: v16i8 = llvm.ppc.altivec.vcmpgtsb
TargetConstant:i64<4823>, t146, t195
fatal error: error in backend: Do not know how to split the result of
this operator!
clang-8: error: clang frontend command failed with exit code 70 (use
-v to see invocation)

>

> >

> > When clang is fixed to allow this combination we will still build this

> > code in the same way, so in that sense it fails "open".

> >
Nick Desaulniers Dec. 3, 2018, 10:55 p.m. UTC | #5
On Mon, Dec 3, 2018 at 2:14 PM Joel Stanley <joel@jms.id.au> wrote:
>

> On Tue, 4 Dec 2018 at 05:15, Nick Desaulniers <ndesaulniers@google.com> wrote:

> > > > > +ifdef CONFIG_CC_IS_CLANG

> > > > > +# clang ppc port does not yet support -maltivec when -msoft-float is

> > > > > +# enabled. A future release of clang will resolve this

> > > > > +# https://bugs.llvm.org/show_bug.cgi?id=31177

> > > > > +CFLAGS_REMOVE_altivec1.o  += -msoft-float

> > > > > +CFLAGS_REMOVE_altivec2.o  += -msoft-float

> > > > > +CFLAGS_REMOVE_altivec4.o  += -msoft-float

> > > > > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > > > > +CFLAGS_REMOVE_altivec8.o  += -msoft-float

> > > > > +CFLAGS_REMOVE_vpermxor1.o += -msoft-float

> > > > > +CFLAGS_REMOVE_vpermxor2.o += -msoft-float

> > > > > +CFLAGS_REMOVE_vpermxor4.o += -msoft-float

> > > > > +CFLAGS_REMOVE_vpermxor8.o += -msoft-float

> > > > > +endif

> > > >

> > > > Hi Joel, thanks for this patch!  My same thoughts about

> > > > CONFIG_CC_IS_CLANG vs cc-option from

> > > > https://lists.ozlabs.org/pipermail/linuxppc-dev/2018-November/180939.html

> > > > apply here as well.  I don't feel strongly about either though.  What

> > > > are your thoughts?

> > >

> > > I'm not sure that we can test for this one with cc-option. The result

> > > of having -maltivec with -msoft-float is a error about the internals

> > > of clang, which isn't something that kbuild is set up to test for.

> >

> > As in clang itself crashes, and cc-option/kbuild can't handle that gracefully?

>

> The developer gets something like this:

>

> SplitVectorResult #0: t196: v16i8 = llvm.ppc.altivec.vcmpgtsb

> TargetConstant:i64<4823>, t146, t195

> fatal error: error in backend: Do not know how to split the result of

> this operator!

> clang-8: error: clang frontend command failed with exit code 70 (use

> -v to see invocation)

>

> >

> > >

> > > When clang is fixed to allow this combination we will still build this

> > > code in the same way, so in that sense it fails "open".

> > >


Eek, that means cc-option is not hardened against flags that crash the
compiler (misbehaving compiler).  We'll have to get some version check
in place should we ever want to use those flags for these object
files, but for now:

Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>

-- 
Thanks,
~Nick Desaulniers
Segher Boessenkool Dec. 3, 2018, 11:24 p.m. UTC | #6
On Tue, Dec 04, 2018 at 08:43:47AM +1030, Joel Stanley wrote:
> On Tue, 4 Dec 2018 at 05:15, Nick Desaulniers <ndesaulniers@google.com> wrote:

> > > > > +ifdef CONFIG_CC_IS_CLANG

> > > > > +# clang ppc port does not yet support -maltivec when -msoft-float is

> > > > > +# enabled. A future release of clang will resolve this

> > > > > +# https://bugs.llvm.org/show_bug.cgi?id=31177


> > As in clang itself crashes, and cc-option/kbuild can't handle that gracefully?

> 

> The developer gets something like this:

> 

> SplitVectorResult #0: t196: v16i8 = llvm.ppc.altivec.vcmpgtsb

> TargetConstant:i64<4823>, t146, t195

> fatal error: error in backend: Do not know how to split the result of

> this operator!

> clang-8: error: clang frontend command failed with exit code 70 (use

> -v to see invocation)


-msoft-float simply means not to use FPRs, and nothing more or less, so
that is a pretty interesting failure (will probably turn out to be a typo
or something else boring, but it is fun while it lasts).


Segher
diff mbox series

Patch

diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile
index 2f8b61dfd9b0..7ed43eaa02ef 100644
--- a/lib/raid6/Makefile
+++ b/lib/raid6/Makefile
@@ -18,6 +18,21 @@  quiet_cmd_unroll = UNROLL  $@
 
 ifeq ($(CONFIG_ALTIVEC),y)
 altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
+
+ifdef CONFIG_CC_IS_CLANG
+# clang ppc port does not yet support -maltivec when -msoft-float is
+# enabled. A future release of clang will resolve this
+# https://bugs.llvm.org/show_bug.cgi?id=31177
+CFLAGS_REMOVE_altivec1.o  += -msoft-float
+CFLAGS_REMOVE_altivec2.o  += -msoft-float
+CFLAGS_REMOVE_altivec4.o  += -msoft-float
+CFLAGS_REMOVE_altivec8.o  += -msoft-float
+CFLAGS_REMOVE_altivec8.o  += -msoft-float
+CFLAGS_REMOVE_vpermxor1.o += -msoft-float
+CFLAGS_REMOVE_vpermxor2.o += -msoft-float
+CFLAGS_REMOVE_vpermxor4.o += -msoft-float
+CFLAGS_REMOVE_vpermxor8.o += -msoft-float
+endif
 endif
 
 # The GCC option -ffreestanding is required in order to compile code containing