Re: [tree-tailcall] Check if function returns it's argument

2016-12-12 Thread Jeff Law
On 12/09/2016 01:10 AM, Richard Biener wrote: Yea. Not sure how often something like that would happen in practice, but using the equivalence to simplify rather than for propagation seems like the way to go. I keep thinking about doing some similar in DOM, but haven't gotten around to seeing w

Re: [tree-tailcall] Check if function returns it's argument

2016-12-09 Thread Richard Biener
On Wed, 7 Dec 2016, Jeff Law wrote: > On 12/06/2016 03:16 AM, Richard Biener wrote: > > On Tue, 6 Dec 2016, Richard Biener wrote: > > > > > On Mon, 5 Dec 2016, Jeff Law wrote: > > > > > > > On 12/02/2016 01:33 AM, Richard Biener wrote: > > > > > > The LHS on the assignment makes it easier to ide

Re: [tree-tailcall] Check if function returns it's argument

2016-12-07 Thread Jeff Law
On 12/06/2016 03:16 AM, Richard Biener wrote: On Tue, 6 Dec 2016, Richard Biener wrote: On Mon, 5 Dec 2016, Jeff Law wrote: On 12/02/2016 01:33 AM, Richard Biener wrote: The LHS on the assignment makes it easier to identify when a tail call is possible. It's not needed for correctness. Not

Re: [tree-tailcall] Check if function returns it's argument

2016-12-07 Thread Jeff Law
On 12/06/2016 01:25 AM, Richard Biener wrote: But if the function returns the value from the tail call, then going through an LHS is the right thing to do. Using the magic "argX will be the return value" seems clever, but actually hurts in practice. So we do want the reverse transform (for the

Re: [tree-tailcall] Check if function returns it's argument

2016-12-06 Thread Richard Biener
On Tue, 6 Dec 2016, Richard Biener wrote: > On Mon, 5 Dec 2016, Jeff Law wrote: > > > On 12/02/2016 01:33 AM, Richard Biener wrote: > > > > The LHS on the assignment makes it easier to identify when a tail call > > > > is > > > > possible. It's not needed for correctness. Not having the LHS on

Re: [tree-tailcall] Check if function returns it's argument

2016-12-06 Thread Richard Biener
On Mon, 5 Dec 2016, Jeff Law wrote: > On 12/02/2016 01:33 AM, Richard Biener wrote: > > > The LHS on the assignment makes it easier to identify when a tail call is > > > possible. It's not needed for correctness. Not having the LHS on the > > > assignment just means we won't get an optimized tai

Re: [tree-tailcall] Check if function returns it's argument

2016-12-05 Thread Jeff Law
On 12/02/2016 01:33 AM, Richard Biener wrote: The LHS on the assignment makes it easier to identify when a tail call is possible. It's not needed for correctness. Not having the LHS on the assignment just means we won't get an optimized tail call. Under what circumstances would the LHS possibl

Re: [tree-tailcall] Check if function returns it's argument

2016-12-02 Thread Richard Biener
On Thu, 1 Dec 2016, Jeff Law wrote: > On 12/01/2016 06:22 AM, Richard Biener wrote: > > > Well after removing DECL_BY_REFERENCE, verify_gimple still fails but > > > differently: > > > > > > tail-padding1.C:13:1: error: RESULT_DECL should be read only when > > > DECL_BY_REFERENCE is set > > > } >

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Prathamesh Kulkarni
On 2 December 2016 at 03:57, Jeff Law wrote: > On 12/01/2016 06:22 AM, Richard Biener wrote: >>> >>> Well after removing DECL_BY_REFERENCE, verify_gimple still fails but >>> differently: >>> >>> tail-padding1.C:13:1: error: RESULT_DECL should be read only when >>> DECL_BY_REFERENCE is set >>> } >

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Jeff Law
On 12/01/2016 06:22 AM, Richard Biener wrote: Well after removing DECL_BY_REFERENCE, verify_gimple still fails but differently: tail-padding1.C:13:1: error: RESULT_DECL should be read only when DECL_BY_REFERENCE is set } ^ while verifying SSA_NAME nrvo_4 in statement # .MEM_3 = VDEF <.MEM_1(D)

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Richard Biener
On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > On 1 December 2016 at 18:38, Richard Biener wrote: > > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > > > >> On 1 December 2016 at 18:26, Richard Biener wrote: > >> > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > >> > > >> >> On 1 December 20

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Prathamesh Kulkarni
On 1 December 2016 at 18:38, Richard Biener wrote: > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > >> On 1 December 2016 at 18:26, Richard Biener wrote: >> > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: >> > >> >> On 1 December 2016 at 17:40, Richard Biener wrote: >> >> > On Thu, 1 Dec 2016

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Richard Biener
On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > On 1 December 2016 at 18:26, Richard Biener wrote: > > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > > > >> On 1 December 2016 at 17:40, Richard Biener wrote: > >> > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > >> > > >> >> On 25 November 2

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Prathamesh Kulkarni
On 1 December 2016 at 18:26, Richard Biener wrote: > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > >> On 1 December 2016 at 17:40, Richard Biener wrote: >> > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: >> > >> >> On 25 November 2016 at 21:17, Jeff Law wrote: >> >> > On 11/25/2016 01:07 AM,

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Richard Biener
On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > On 1 December 2016 at 17:40, Richard Biener wrote: > > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > > > >> On 25 November 2016 at 21:17, Jeff Law wrote: > >> > On 11/25/2016 01:07 AM, Richard Biener wrote: > >> > > >> >>> For the tail-call, is

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Prathamesh Kulkarni
On 1 December 2016 at 17:40, Richard Biener wrote: > On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > >> On 25 November 2016 at 21:17, Jeff Law wrote: >> > On 11/25/2016 01:07 AM, Richard Biener wrote: >> > >> >>> For the tail-call, issue should we artificially create a lhs and use that >> >>> as

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Richard Biener
On Thu, 1 Dec 2016, Prathamesh Kulkarni wrote: > On 25 November 2016 at 21:17, Jeff Law wrote: > > On 11/25/2016 01:07 AM, Richard Biener wrote: > > > >>> For the tail-call, issue should we artificially create a lhs and use that > >>> as return value (perhaps by a separate pass before tailcall) ?

Re: [tree-tailcall] Check if function returns it's argument

2016-12-01 Thread Prathamesh Kulkarni
On 25 November 2016 at 21:17, Jeff Law wrote: > On 11/25/2016 01:07 AM, Richard Biener wrote: > >>> For the tail-call, issue should we artificially create a lhs and use that >>> as return value (perhaps by a separate pass before tailcall) ? >>> >>> __builtin_memcpy (a1, a2, a3); >>> return a1; >>>

Re: [tree-tailcall] Check if function returns it's argument

2016-11-25 Thread Jeff Law
On 11/25/2016 01:07 AM, Richard Biener wrote: For the tail-call, issue should we artificially create a lhs and use that as return value (perhaps by a separate pass before tailcall) ? __builtin_memcpy (a1, a2, a3); return a1; gets transformed to: _1 = __builtin_memcpy (a1, a2, a3) return _1; S

Re: [tree-tailcall] Check if function returns it's argument

2016-11-25 Thread Prathamesh Kulkarni
On 25 November 2016 at 13:55, Richard Biener wrote: > On Fri, 25 Nov 2016, Prathamesh Kulkarni wrote: > >> On 25 November 2016 at 13:37, Richard Biener wrote: >> > On Fri, 25 Nov 2016, Prathamesh Kulkarni wrote: >> > >> >> On 24 November 2016 at 18:08, Richard Biener wrote: >> >> > On Thu, 24 No

Re: [tree-tailcall] Check if function returns it's argument

2016-11-25 Thread Richard Biener
On Fri, 25 Nov 2016, Prathamesh Kulkarni wrote: > On 25 November 2016 at 13:37, Richard Biener wrote: > > On Fri, 25 Nov 2016, Prathamesh Kulkarni wrote: > > > >> On 24 November 2016 at 18:08, Richard Biener wrote: > >> > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > >> > > >> >> On 24 Novem

Re: [tree-tailcall] Check if function returns it's argument

2016-11-25 Thread Prathamesh Kulkarni
On 25 November 2016 at 13:37, Richard Biener wrote: > On Fri, 25 Nov 2016, Prathamesh Kulkarni wrote: > >> On 24 November 2016 at 18:08, Richard Biener wrote: >> > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: >> > >> >> On 24 November 2016 at 17:48, Richard Biener wrote: >> >> > On Thu, 24 No

Re: [tree-tailcall] Check if function returns it's argument

2016-11-25 Thread Richard Biener
On Fri, 25 Nov 2016, Prathamesh Kulkarni wrote: > On 24 November 2016 at 18:08, Richard Biener wrote: > > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > > > >> On 24 November 2016 at 17:48, Richard Biener wrote: > >> > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > >> > > >> >> On 24 Novem

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Prathamesh Kulkarni
On 24 November 2016 at 18:08, Richard Biener wrote: > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > >> On 24 November 2016 at 17:48, Richard Biener wrote: >> > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: >> > >> >> On 24 November 2016 at 14:07, Richard Biener wrote: >> >> > On Thu, 24 No

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Richard Biener
On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > On 24 November 2016 at 17:48, Richard Biener wrote: > > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > > > >> On 24 November 2016 at 14:07, Richard Biener wrote: > >> > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > >> > > >> >> Hi, > >> >>

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Prathamesh Kulkarni
On 24 November 2016 at 17:48, Richard Biener wrote: > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > >> On 24 November 2016 at 14:07, Richard Biener wrote: >> > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: >> > >> >> Hi, >> >> Consider following test-case: >> >> >> >> void *f(void *a1, void

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Richard Biener
On Thu, 24 Nov 2016, Jakub Jelinek wrote: > On Thu, Nov 24, 2016 at 01:18:37PM +0100, Richard Biener wrote: > > > eg: > > > void *f(void *a1, void *a2, __SIZE_TYPE__ a3) > > > { > > > void *t1 = __builtin_memcpy (a1, a2, a3); > > > return t1; > > > } > > > > > > After patch, copyprop transform

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Jakub Jelinek
On Thu, Nov 24, 2016 at 01:18:37PM +0100, Richard Biener wrote: > > eg: > > void *f(void *a1, void *a2, __SIZE_TYPE__ a3) > > { > > void *t1 = __builtin_memcpy (a1, a2, a3); > > return t1; > > } > > > > After patch, copyprop transformed it into: > > t1 = __builtin_memcpy (a1, a2, a3); > > retur

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Richard Biener
On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > On 24 November 2016 at 14:07, Richard Biener wrote: > > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > > > >> Hi, > >> Consider following test-case: > >> > >> void *f(void *a1, void *a2, __SIZE_TYPE__ a3) > >> { > >> __builtin_memcpy (a1, a2,

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Prathamesh Kulkarni
On 24 November 2016 at 14:07, Richard Biener wrote: > On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > >> Hi, >> Consider following test-case: >> >> void *f(void *a1, void *a2, __SIZE_TYPE__ a3) >> { >> __builtin_memcpy (a1, a2, a3); >> return a1; >> } >> >> return a1 can be considered equiva

Re: [tree-tailcall] Check if function returns it's argument

2016-11-24 Thread Richard Biener
On Thu, 24 Nov 2016, Prathamesh Kulkarni wrote: > Hi, > Consider following test-case: > > void *f(void *a1, void *a2, __SIZE_TYPE__ a3) > { > __builtin_memcpy (a1, a2, a3); > return a1; > } > > return a1 can be considered equivalent to return value of memcpy, > and the call could be emitted