Re: Bug 85667 - (x86_64) ms_abi rules aren't followed when returning short structs with float values

2018-09-19 Thread lokesh janghel
Hi,

I am starting to looking into this issue.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85667#c0

I am able to reproduce the issue with GCC-8.1.0 and CLANG-8.0.0 version too
like
GCC :
*$ ./cc1.exe test/test.c -O2*
*Float  __attribute__((ms_abi)) fn1()*
*{*
*  Float v;*
*  v.x = 3.145;*
*  return v;*
*}*
and generates the code
*movss .LC0(%rip), %xmm0*
*ret*

and Clang
*$ clang -S test.c -O2*

*movl $1078544302, %eax *
*retq*

We did some analysis about that issue and found that the problem occurs may
be in the code generation phase in GCC.
ABI says that struct type uses the integer register  (like clang )or memory
to return not the  SSE registers.

Before we go ahead and fix this issue and we would like to know the
community views/comments on the same.
-- 
Thanks & Regards
Lokesh Janghel


Re: Bug 84762 - GCC for PowerPC32 violates the SysV ABI spec for small struct returns

2018-11-19 Thread Lokesh Janghel
Hi Segher,

I am building the GCC with the following configuration ( using gcc trunk ).
 ../gcc/configure --target=powerpc-linux
--prefix=/opt/buckeye/powerpc-linux --disable-shared --disable-threads
--enable-languages=c --with-newlib

And my assembly code (without optimization) is:
$ cc1   -msvr4-struct-return test.c
.LFB0:
stwu 1,-32(1)
.LCFI0:
stw 31,28(1)
.LCFI1:
mr 31,1
.LCFI2:
lis 9,.LC0@ha
la 9,.LC0@l(9)
lhz 10,0(9)
lbz 9,2(9)
sth 10,11(31)
stb 9,13(31)
lhz 10,11(31)
lbz 9,13(31)
sth 10,8(31)
stb 9,10(31)
li 9,0
lbz 10,8(31)
rlwinm 10,10,0,24,31
slwi 10,10,16
rlwinm 9,9,0,16,7
or 9,9,10
lbz 10,9(31)
rlwinm 10,10,0,24,31
slwi 10,10,8
rlwinm 9,9,0,24,15
or 9,9,10
 lbz 10,10(31)
rlwinm 10,10,0,24,31
rlwinm 9,9,0,0,23
or 9,9,10
mr 3,9
addi 11,31,32
lwz 31,-4(11)
.LCFI3:
mr 1,11
.LCFI4:
blr


Assembly code (with optimization -O2) is:
$ cc1   -msvr4-struct-return -O2 test.c
.LFB0:
stwu 1,-32(1)
.LCFI0:
lis 3,0x11
ori 3,3,0x2233
addi 1,1,32
.LCFI1:
blr

As you mentioned assembly code in the GCC Bugzilla, I am not able to
reproduce the issue.
Please let me know your options used to reproduce this issue.

Sirl,
If you got the patch for this issue or will look into the issue.
-- 
Thanks & Regards
Lokesh Janghel


Re: Bug 84762 - GCC for PowerPC32 violates the SysV ABI spec for small struct returns

2018-11-23 Thread Lokesh Janghel
Hi Sirl,

As you mention in Bugzilla (comment 13),
aix_return( return in memory)
svr4_return(in registers)
what is the semantics of  *svr4gnu* w.r.t return .



On Mon, Nov 19, 2018 at 11:33 PM Franz Sirl <
franz.sirl-ker...@lauterbach.com> wrote:

> Am 2018-11-19 um 15:36 schrieb Lokesh Janghel:
> > Hi Segher,
> >
> > I am building the GCC with the following configuration ( using gcc trunk
> ).
> >   ../gcc/configure --target=powerpc-linux
> > --prefix=/opt/buckeye/powerpc-linux --disable-shared --disable-threads
> > --enable-languages=c --with-newlib
> >
> > And my assembly code (without optimization) is:
> > $ cc1   -msvr4-struct-return test.c
> > .LFB0:
> >  stwu 1,-32(1)
> > .LCFI0:
> >  stw 31,28(1)
> > .LCFI1:
> >  mr 31,1
> > .LCFI2:
> >  lis 9,.LC0@ha
> >  la 9,.LC0@l(9)
> >  lhz 10,0(9)
> >  lbz 9,2(9)
> >  sth 10,11(31)
> >  stb 9,13(31)
> >  lhz 10,11(31)
> >  lbz 9,13(31)
> >  sth 10,8(31)
> >  stb 9,10(31)
> >  li 9,0
> >  lbz 10,8(31)
> >  rlwinm 10,10,0,24,31
> >  slwi 10,10,16
> >  rlwinm 9,9,0,16,7
> >  or 9,9,10
> >  lbz 10,9(31)
> >  rlwinm 10,10,0,24,31
> >  slwi 10,10,8
> >  rlwinm 9,9,0,24,15
> >  or 9,9,10
> >   lbz 10,10(31)
> >  rlwinm 10,10,0,24,31
> >  rlwinm 9,9,0,0,23
> >  or 9,9,10
> >  mr 3,9
> >  addi 11,31,32
> >  lwz 31,-4(11)
> > .LCFI3:
> >  mr 1,11
> > .LCFI4:
> >  blr
> >
> >
> > Assembly code (with optimization -O2) is:
> > $ cc1   -msvr4-struct-return -O2 test.c
> > .LFB0:
> >  stwu 1,-32(1)
> > .LCFI0:
> >  lis 3,0x11
> >  ori 3,3,0x2233
> >  addi 1,1,32
> > .LCFI1:
> >  blr
> >
> > As you mentioned assembly code in the GCC Bugzilla, I am not able to
> > reproduce the issue.
> > Please let me know your options used to reproduce this issue.
>
> Hi,
>
> you already reproduced the issue, according to the ABI, the code should
> look like:
>
> .LFB0:
>  stwu 1,-32(1)
> .LCFI0:
>  lis 3,0x1122
>  ori 3,3,0x3300
>  addi 1,1,32
> .LCFI1:
>  blr
>
> So the value being passed around should be left-aligned in the register.
>
> > Sirl,
> > If you got the patch for this issue or will look into the issue.
>
> I have an unfinished patch, it misses commandline handling, testcases
> and some code comments. I've attached it.
>
> It's unlikely I can continue to work on it anytime soon :-(.
>
> Franz
>


-- 
Thanks & Regards
Lokesh Janghel
+91-9752984749


Re: Bug 84762 - GCC for PowerPC32 violates the SysV ABI spec for small struct returns

2018-11-23 Thread Lokesh Janghel
Hi Sirl,

As you mentioned in Bugzilla (comment 13),
aix_return (return in memory)
svr4_return (return in register)
what is the semantics of svr4gnu w.r.t. return.


On Mon, Nov 19, 2018 at 11:33 PM Franz Sirl <
franz.sirl-ker...@lauterbach.com> wrote:

> Am 2018-11-19 um 15:36 schrieb Lokesh Janghel:
> > Hi Segher,
> >
> > I am building the GCC with the following configuration ( using gcc trunk
> ).
> >   ../gcc/configure --target=powerpc-linux
> > --prefix=/opt/buckeye/powerpc-linux --disable-shared --disable-threads
> > --enable-languages=c --with-newlib
> >
> > And my assembly code (without optimization) is:
> > $ cc1   -msvr4-struct-return test.c
> > .LFB0:
> >  stwu 1,-32(1)
> > .LCFI0:
> >  stw 31,28(1)
> > .LCFI1:
> >  mr 31,1
> > .LCFI2:
> >  lis 9,.LC0@ha
> >  la 9,.LC0@l(9)
> >  lhz 10,0(9)
> >  lbz 9,2(9)
> >  sth 10,11(31)
> >  stb 9,13(31)
> >  lhz 10,11(31)
> >  lbz 9,13(31)
> >  sth 10,8(31)
> >  stb 9,10(31)
> >  li 9,0
> >  lbz 10,8(31)
> >  rlwinm 10,10,0,24,31
> >  slwi 10,10,16
> >  rlwinm 9,9,0,16,7
> >  or 9,9,10
> >  lbz 10,9(31)
> >  rlwinm 10,10,0,24,31
> >  slwi 10,10,8
> >  rlwinm 9,9,0,24,15
> >  or 9,9,10
> >   lbz 10,10(31)
> >  rlwinm 10,10,0,24,31
> >  rlwinm 9,9,0,0,23
> >  or 9,9,10
> >  mr 3,9
> >  addi 11,31,32
> >  lwz 31,-4(11)
> > .LCFI3:
> >  mr 1,11
> > .LCFI4:
> >  blr
> >
> >
> > Assembly code (with optimization -O2) is:
> > $ cc1   -msvr4-struct-return -O2 test.c
> > .LFB0:
> >  stwu 1,-32(1)
> > .LCFI0:
> >  lis 3,0x11
> >  ori 3,3,0x2233
> >  addi 1,1,32
> > .LCFI1:
> >  blr
> >
> > As you mentioned assembly code in the GCC Bugzilla, I am not able to
> > reproduce the issue.
> > Please let me know your options used to reproduce this issue.
>
> Hi,
>
> you already reproduced the issue, according to the ABI, the code should
> look like:
>
> .LFB0:
>  stwu 1,-32(1)
> .LCFI0:
>  lis 3,0x1122
>  ori 3,3,0x3300
>  addi 1,1,32
> .LCFI1:
>  blr
>
> So the value being passed around should be left-aligned in the register.
>
> > Sirl,
> > If you got the patch for this issue or will look into the issue.
>
> I have an unfinished patch, it misses commandline handling, testcases
> and some code comments. I've attached it.
>
> It's unlikely I can continue to work on it anytime soon :-(.
>
> Franz
>


-- 
Thanks & Regards
Lokesh Janghel
+91-9752984749


Re: Bug 84762 - GCC for PowerPC32 violates the SysV ABI spec for small struct returns

2018-11-25 Thread Lokesh Janghel
Hi Sirl,

As you mentioned in Bugzilla (comment 13),
aix_return ( return in memory)
svr4_return (return in register)
what is the semantics of svr4gnu w.r.t. return.

Thanks
Lokesh


Re: Bug 84762 - GCC for PowerPC32 violates the SysV ABI spec for small struct returns

2018-11-25 Thread Lokesh Janghel
Hi Sirl,

As you mentioned in Bugzilla (comment 13),
aix_return ( return in memory)
svr4_return (return in register)
what is the semantics of svr4gnu w.r.t. return.

On Mon, Nov 19, 2018 at 11:33 PM Franz Sirl
 wrote:
>
> Am 2018-11-19 um 15:36 schrieb Lokesh Janghel:
> > Hi Segher,
> >
> > I am building the GCC with the following configuration ( using gcc trunk ).
> >   ../gcc/configure --target=powerpc-linux
> > --prefix=/opt/buckeye/powerpc-linux --disable-shared --disable-threads
> > --enable-languages=c --with-newlib
> >
> > And my assembly code (without optimization) is:
> > $ cc1   -msvr4-struct-return test.c
> > .LFB0:
> >  stwu 1,-32(1)
> > .LCFI0:
> >  stw 31,28(1)
> > .LCFI1:
> >  mr 31,1
> > .LCFI2:
> >  lis 9,.LC0@ha
> >  la 9,.LC0@l(9)
> >  lhz 10,0(9)
> >  lbz 9,2(9)
> >  sth 10,11(31)
> >  stb 9,13(31)
> >  lhz 10,11(31)
> >  lbz 9,13(31)
> >  sth 10,8(31)
> >  stb 9,10(31)
> >  li 9,0
> >  lbz 10,8(31)
> >  rlwinm 10,10,0,24,31
> >  slwi 10,10,16
> >  rlwinm 9,9,0,16,7
> >  or 9,9,10
> >  lbz 10,9(31)
> >  rlwinm 10,10,0,24,31
> >  slwi 10,10,8
> >  rlwinm 9,9,0,24,15
> >  or 9,9,10
> >   lbz 10,10(31)
> >  rlwinm 10,10,0,24,31
> >  rlwinm 9,9,0,0,23
> >  or 9,9,10
> >  mr 3,9
> >  addi 11,31,32
> >  lwz 31,-4(11)
> > .LCFI3:
> >  mr 1,11
> > .LCFI4:
> >  blr
> >
> >
> > Assembly code (with optimization -O2) is:
> > $ cc1   -msvr4-struct-return -O2 test.c
> > .LFB0:
> >  stwu 1,-32(1)
> > .LCFI0:
> >  lis 3,0x11
> >  ori 3,3,0x2233
> >  addi 1,1,32
> > .LCFI1:
> >  blr
> >
> > As you mentioned assembly code in the GCC Bugzilla, I am not able to
> > reproduce the issue.
> > Please let me know your options used to reproduce this issue.
>
> Hi,
>
> you already reproduced the issue, according to the ABI, the code should
> look like:
>
> .LFB0:
>  stwu 1,-32(1)
> .LCFI0:
>  lis 3,0x1122
>  ori 3,3,0x3300
>      addi 1,1,32
> .LCFI1:
>  blr
>
> So the value being passed around should be left-aligned in the register.
>
> > Sirl,
> > If you got the patch for this issue or will look into the issue.
>
> I have an unfinished patch, it misses commandline handling, testcases
> and some code comments. I've attached it.
>
> It's unlikely I can continue to work on it anytime soon :-(.
>
> Franz



-- 
Thanks & Regards
Lokesh Janghel
+91-9752984749


Re: Bug 84762 - GCC for PowerPC32 violates the SysV ABI spec for small struct returns

2018-12-03 Thread Lokesh Janghel
Thank you Sirl,

>>-msvr4-struct-return=standard and -msvr4-struct-return=gnu (which would
be the default (-msvr4-struct-return=standard)
by default, you mean using registers to return?

Lokesh
On Fri, Nov 30, 2018 at 4:18 PM Franz Sirl
 wrote:
>
> Am 2018-11-26 um 06:13 schrieb Lokesh Janghel:
> > Hi Sirl,
> >
> > As you mentioned in Bugzilla (comment 13),
> > aix_return ( return in memory)
> > svr4_return (return in register)
> > what is the semantics of svr4gnu w.r.t. return.
>
> Hi Lokesh,
>
> I don't quite understand what you are asking me here? In comment 13
> I've talked about the option naming, which I was unsure about. In the
> end (before I was stuffed with other work again) I was settling for
> -msvr4-struct-return=standard and -msvr4-struct-return=gnu (which would
> be the default and is equal the current behaviour), leaving
> -maix-struct-return unchanged.
>
> What else do you want to know?
>
> Franz



-- 
Thanks & Regards
Lokesh Janghel
+91-9752984749


Bug 89889 - worse code compared to clang with alloca()

2019-05-20 Thread Lokesh Janghel
Hi,

As per our analysis on the issue, I have some queries as per below:

Is there any target hooks for alloca?
Should we do the same like __builtin_alloca_with_align (array
allocation) or we assume the problem as a target based
(prologue/epilogue optimization) issue?


-- 
Thanks
Lokesh