FW: PROPOSAL: Extend inline asm syntax with size spec

2018-10-08 Thread David Laight
Resend to gcc@gcc.gnu.org to avoid spam filter > From: Michael Matz > > Sent: 07 October 2018 16:53 > ... > > I think the examples I saw from Boris were all indirect inlines: > > > > static inline void foo() { asm("large-looking-but-small-asm"); } > > static void bar1() { ... foo() ... } > >

Re: movmem pattern and missed alignment

2018-10-08 Thread Eric Botcazou
> It's not quite obvious what SSE has to do with this - any hint please? SSE introduced alignment constraints into the non-strict-alignment target x86 so people didn't really want to play by the rules of strict-alignment targets. > (according to my quick check this changed between gcc-4.5 and gc

Re: movmem pattern and missed alignment

2018-10-08 Thread Alexander Monakov
On Tue, 9 Oct 2018, Richard Biener wrote: > >This had worked as Paul expects until GCC 4.4 IIRC and this was perfectly OK > >for every language on strict-alignment platforms. This was changed only > >because of SSE on x86. > > And because we ended up ignoring all pointer casts. It's not quite o

Re: movmem pattern and missed alignment

2018-10-08 Thread Richard Biener
On October 8, 2018 11:43:00 PM GMT+02:00, Eric Botcazou wrote: >> That's correct, I was explaining from the middle-end perspective. >There >> we are consciously more lenient as we have to support the real world >and >> other languages than C. This is one of the cases. > >This had worked as Paul

Re: Actions required

2018-10-08 Thread Dev Guy
On Sat, Sep 29, 2018 at 11:35 PM Notification wrote: > > -- Kind Regards, TH

Re: movmem pattern and missed alignment

2018-10-08 Thread Paul Koning
> On Oct 8, 2018, at 5:43 PM, Eric Botcazou wrote: > >> That's correct, I was explaining from the middle-end perspective. There >> we are consciously more lenient as we have to support the real world and >> other languages than C. This is one of the cases. > > This had worked as Paul expect

Re: movmem pattern and missed alignment

2018-10-08 Thread Eric Botcazou
> That's correct, I was explaining from the middle-end perspective. There > we are consciously more lenient as we have to support the real world and > other languages than C. This is one of the cases. This had worked as Paul expects until GCC 4.4 IIRC and this was perfectly OK for every languag

Re: Cannot compile using cc1.

2018-10-08 Thread Jim Wilson
On 10/06/2018 06:07 AM, Tejas Joshi wrote: I have gcc source code, stage1-build and test directories as siblings and I've been trying to compile test.c in test/ using: ../stage1-build/gcc/cc1 test.c That isn't expected to work. You need to use the compiler driver, which is called xgcc in the

Re: Pretty print of C++11 scoped enums - request help towards a proper fix

2018-10-08 Thread will wray
Patch submitted: https://gcc.gnu.org/ml/gcc-patches/2018-10/msg00452.html [C++ PATCH] Fix pretty-print of enumerator ids (PR c++/87364) My first GCC patch attempt, so more eyes would be good. Cheers, Will On Tue, Sep 25, 2018 at 4:25 PM will wray wrote: > BTW The bug is still UNCONFIRMED > ht

Re: movmem pattern and missed alignment

2018-10-08 Thread Michael Matz
Hi, On Mon, 8 Oct 2018, Paul Koning wrote: > > So all you'd actually have to say is > > > > void f1(void) > > { > >*i; *j; > >__builtin_memcpy (i, j, 32); > > } > > No, that doesn't help. Not even if I make it: > > void f1(void) > { > k = *i + *j; > __builtin_memcpy (i, j, 4);

Re: movmem pattern and missed alignment

2018-10-08 Thread Paul Koning
> On Oct 8, 2018, at 1:29 PM, Andrew Haley wrote: > > On 10/08/2018 06:20 PM, Michael Matz wrote: >> Only if you somewhere visibly add accesses to *i and *j. Without them you >> only have the "accesses" via memcpy, and as Richi says, those don't imply >> any alignment requirements. The i a

Re: movmem pattern and missed alignment

2018-10-08 Thread Michael Matz
Hi, On Mon, 8 Oct 2018, Alexander Monakov wrote: > > Only if you somewhere visibly add accesses to *i and *j. Without them > > you only have the "accesses" via memcpy, and as Richi says, those > > don't imply any alignment requirements. The i and j pointers might > > validly be char* pointer

Re: movmem pattern and missed alignment

2018-10-08 Thread Andrew Haley
On 10/08/2018 06:20 PM, Michael Matz wrote: > Only if you somewhere visibly add accesses to *i and *j. Without them you > only have the "accesses" via memcpy, and as Richi says, those don't imply > any alignment requirements. The i and j pointers might validly be char* > pointers in disguise a

Re: movmem pattern and missed alignment

2018-10-08 Thread Alexander Monakov
On Mon, 8 Oct 2018, Michael Matz wrote: > > Ok, but why is that not a bug? The whole point of passing alignment to > > the movmem pattern is to let it generate code that takes advantage of > > the alignment. So we get a missed optimization. > > Only if you somewhere visibly add accesses to *i

Re: movmem pattern and missed alignment

2018-10-08 Thread Michael Matz
Hi, On Mon, 8 Oct 2018, Paul Koning wrote: > >> extern int *i, *j; > >> extern int iv[40], jv[40]; > >> > >> void f1(void) > >> { > >>__builtin_memcpy (i, j, 32); > >> } > >> > >> void f2(void) > >> { > >>__builtin_memcpy (iv, jv, 32); > >> } > > > > Yes, memcpy doesn't require anythin

Re: movmem pattern and missed alignment

2018-10-08 Thread Paul Koning
> On Oct 8, 2018, at 11:09 AM, Richard Biener > wrote: > > On Mon, Oct 8, 2018 at 3:57 PM Paul Koning wrote: >> >> I have a movmem pattern in my target that pays attention to the alignment >> argument. >> >> GCC isn't passing in the expected alignment part of the time. I have this >> te

Re: movmem pattern and missed alignment

2018-10-08 Thread Richard Biener
On Mon, Oct 8, 2018 at 3:57 PM Paul Koning wrote: > > I have a movmem pattern in my target that pays attention to the alignment > argument. > > GCC isn't passing in the expected alignment part of the time. I have this > test case: > > extern int *i, *j; > extern int iv[40], jv[40]; > > void f1(

movmem pattern and missed alignment

2018-10-08 Thread Paul Koning
I have a movmem pattern in my target that pays attention to the alignment argument. GCC isn't passing in the expected alignment part of the time. I have this test case: extern int *i, *j; extern int iv[40], jv[40]; void f1(void) { __builtin_memcpy (i, j, 32); } void f2(void) { __buil