public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-4@http.gcc.gnu.org/bugzilla/>
@ 2024-05-24 13:50 ` pinskia at gcc dot gnu.org
  0 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-24 13:50 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |user202729 at protonmail dot com

--- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 115210 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
                   ` (5 preceding siblings ...)
  2008-06-22 15:06 ` rguenth at gcc dot gnu dot org
@ 2008-06-22 15:07 ` rguenth at gcc dot gnu dot org
  6 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-06-22 15:07 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #9 from rguenth at gcc dot gnu dot org  2008-06-22 15:07 -------
Created an attachment (id=15801)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=15801&action=view)
aggregate temporary registers

Like this simple, untested patch.  Breaks tree-sra.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
                   ` (4 preceding siblings ...)
  2008-01-27 15:36 ` rguenth at gcc dot gnu dot org
@ 2008-06-22 15:06 ` rguenth at gcc dot gnu dot org
  2008-06-22 15:07 ` rguenth at gcc dot gnu dot org
  6 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-06-22 15:06 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from rguenth at gcc dot gnu dot org  2008-06-22 15:05 -------
If we would disallow struct copies in the gimple IL and instead require a
register temporary that we would re-write into SSA form like

  struct s temp_struct3;
  struct s temp_struct2;
  struct s temp_struct1;
  struct s temp_struct3.3;
  struct s temp_struct2.2;
  struct s temp_struct1.1;
  struct s r.0;

<bb 2>:
  r.0_1 = r;
  temp_struct1 ={v} r.0_1;
  temp_struct1.1_2 = temp_struct1;
  temp_struct2 ={v} temp_struct1.1_2;
  temp_struct2.2_3 = temp_struct2;
  temp_struct3 ={v} temp_struct2.2_3;
  temp_struct3.3_4 = temp_struct3;
  <retval> ={v} temp_struct3.3_4;
  return <retval>;

then value-numbering can recognize the redundant copies and we end up
with

  struct s temp_struct3.3;
  struct s r.0;

<bb 2>:
  r.0_1 = r;
  <retval> = r.0_1;
  return <retval>;

(and of course with the possibility of out-of-SSA having to deal with
overlapping life-ranges of struct-typed SSA names)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
                   ` (3 preceding siblings ...)
  2006-03-10 15:34 ` dnovillo at gcc dot gnu dot org
@ 2008-01-27 15:36 ` rguenth at gcc dot gnu dot org
  2008-06-22 15:06 ` rguenth at gcc dot gnu dot org
  2008-06-22 15:07 ` rguenth at gcc dot gnu dot org
  6 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-01-27 15:36 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from rguenth at gcc dot gnu dot org  2008-01-27 14:14 -------
One important structure copy propagation that SRA is not able to handle is

struct X { int i; int j; };

void foo(struct X);
inline void wrap(struct X w) { foo(w); }
void bar(struct X x) { wrap(x); }

where a copy from the parameter x in bar to the temporary used as parameter
to the call to foo remains (because both cannot be decomposed by SRA as
they need to live in memory):

bar (x)
{
  int x$j;
  int x$i;
  struct X w;

<bb 2>:
  x$i_8 = x.i;
  x$j_9 = x.j;
  w.j = x$j_9;
  w.i = x$i_8;
  foo (w) [tail call];
  return;

}

In this case expansion works anyway because the call to foo is marked as
tail-call before SRA comes along.

SRA heuristics also doesn't work very well here, as it is clearly not
profitable to do element-copy here; in fact it probably makes structure
copy-prop more difficult to implement.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
OtherBugsDependingO|23782                       |
              nThis|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
                   ` (2 preceding siblings ...)
  2006-02-14 15:53 ` rguenth at gcc dot gnu dot org
@ 2006-03-10 15:34 ` dnovillo at gcc dot gnu dot org
  2008-01-27 15:36 ` rguenth at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: dnovillo at gcc dot gnu dot org @ 2006-03-10 15:34 UTC (permalink / raw)
  To: gcc-bugs



-- 

dnovillo at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dnovillo at gcc dot gnu dot
                   |                            |org
         AssignedTo|dnovillo at gcc dot gnu dot |unassigned at gcc dot gnu
                   |org                         |dot org
             Status|ASSIGNED                    |NEW


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
  2006-01-07 18:04 ` steven at gcc dot gnu dot org
  2006-01-14 12:16 ` rguenth at gcc dot gnu dot org
@ 2006-02-14 15:53 ` rguenth at gcc dot gnu dot org
  2006-03-10 15:34 ` dnovillo at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2006-02-14 15:53 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from rguenth at gcc dot gnu dot org  2006-02-14 15:52 -------
Created an attachment (id=10849)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=10849&action=view)
simple "cleanup" struct copyprop

Attached simple "cleanup" style struct copyprop that is able to clean up
useless
copys inserted by inlining and gimplification (mostly happens for C++).  It
handles both

  tmp = X;
  Y = tmp;

to

  tmp = X;
  Y = X;

(commented code to remove tmp = X is there, but one needs to somehow check
if the store is to a global var - DCE will happily clean up after us though)

and

  tmp = X;
  X = tmp;

to

  tmp = X;

(happens a few times in gcc itself, same comment as above).  This looks like
a thing we should do after/inside inlining in ssa form.

Note that this patch doesn't require dominator information (which would enable
us to relax the stmt ordering by checking if the final store dominates all
kills of X - i.e. to prevent propagation in the case of

  #   tmpD.1530_3 = V_MUST_DEF <tmpD.1530_2>;
  #   VUSE <aD.1524_1>;
  tmpD.1530 = aD.1524;
  #   aD.1524_5 = V_MUST_DEF <aD.1524_1>;
  #   VUSE <bD.1525_4>;
  aD.1524 = bD.1525;
  #   cD.1526_7 = V_MUST_DEF <cD.1526_6>;
  #   VUSE <tmpD.1530_3>;
  cD.1526 = tmpD.1530;

as aD.1524 is not in SSA form and so the value used in stmt 1 is no longer
available)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
  2006-01-07 18:04 ` steven at gcc dot gnu dot org
@ 2006-01-14 12:16 ` rguenth at gcc dot gnu dot org
  2006-02-14 15:53 ` rguenth at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2006-01-14 12:16 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from rguenth at gcc dot gnu dot org  2006-01-14 12:16 -------
4.1 branch has
;; Function foo (foo)

Analyzing Edge Insertions.
foo (r)
{
  struct s temp_struct3;
  struct s temp_struct2;
  struct s temp_struct1;

<bb 0>:
  temp_struct1 = r;
  temp_struct2 = temp_struct1;
  temp_struct3 = temp_struct2;
  <retval> = temp_struct3;
  return <retval>;

}

and generates

foo:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %edi
        pushl   %esi
        subl    $56, %esp
        leal    -28(%ebp), %edi
        leal    12(%ebp), %esi
        cld
        movl    $5, %ecx
        rep
        movsl
        leal    -48(%ebp), %edi
        leal    -28(%ebp), %esi
        movb    $5, %cl
        rep
        movsl
        leal    -48(%ebp), %esi
        movl    8(%ebp), %edi
        movb    $5, %cl
        rep
        movsl
        movl    8(%ebp), %eax
        addl    $56, %esp
        popl    %esi
        popl    %edi
        leave
        ret     $4


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
       [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
@ 2006-01-07 18:04 ` steven at gcc dot gnu dot org
  2006-01-14 12:16 ` rguenth at gcc dot gnu dot org
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: steven at gcc dot gnu dot org @ 2006-01-07 18:04 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from steven at gcc dot gnu dot org  2006-01-07 18:04 -------
On AMD64 with GNU C version 4.2.0 20060107, I get this .optimized dump:

;; Function foo (foo)

foo (r)
{
  int r$b;
  int r$a;
  char r$d;

<bb 2>:
  r$b = r.b;
  r$a = r.a;
  r$d = r.d;
  <retval>.m = r.m;
  <retval>.b = r$b;
  <retval>.a = r$a;
  <retval>.d = r$d;
  return <retval>;

}


-- 

steven at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2005-05-08 18:01:19         |2006-01-07 18:04:40
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
  2004-02-25 17:37 [Bug optimization/14295] New: " dann at godzilla dot ics dot uci dot edu
  2004-05-27  5:28 ` [Bug tree-optimization/14295] " pinskia at gcc dot gnu dot org
  2004-06-29 17:41 ` pinskia at gcc dot gnu dot org
@ 2005-09-14 17:35 ` pinskia at gcc dot gnu dot org
  2 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-09-14 17:35 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2005-09-14 17:35 -------
*** Bug 18268 has been marked as a duplicate of this bug. ***

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pinskia at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
  2004-02-25 17:37 [Bug optimization/14295] New: " dann at godzilla dot ics dot uci dot edu
  2004-05-27  5:28 ` [Bug tree-optimization/14295] " pinskia at gcc dot gnu dot org
@ 2004-06-29 17:41 ` pinskia at gcc dot gnu dot org
  2005-09-14 17:35 ` pinskia at gcc dot gnu dot org
  2 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-06-29 17:41 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-06-29 17:35 -------
On the mainline now we have:

foo (r)
{
  struct s temp_struct3;
  struct s temp_struct2;
  struct s temp_struct1;

<bb 0>:
  temp_struct1 = r;
  temp_struct2 = temp_struct1;
  temp_struct3 = temp_struct2;
  <retval> = temp_struct3;
  return <retval>;

}

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|0000-00-00 00:00:00         |2004-06-29 17:35:38
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates
  2004-02-25 17:37 [Bug optimization/14295] New: " dann at godzilla dot ics dot uci dot edu
@ 2004-05-27  5:28 ` pinskia at gcc dot gnu dot org
  2004-06-29 17:41 ` pinskia at gcc dot gnu dot org
  2005-09-14 17:35 ` pinskia at gcc dot gnu dot org
  2 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-05-27  5:28 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|3.5.0                       |---


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-05-24 13:50 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-14295-4@http.gcc.gnu.org/bugzilla/>
2024-05-24 13:50 ` [Bug tree-optimization/14295] [tree-ssa] copy propagation for aggregates pinskia at gcc dot gnu.org
     [not found] <bug-14295-1008@http.gcc.gnu.org/bugzilla/>
2006-01-07 18:04 ` steven at gcc dot gnu dot org
2006-01-14 12:16 ` rguenth at gcc dot gnu dot org
2006-02-14 15:53 ` rguenth at gcc dot gnu dot org
2006-03-10 15:34 ` dnovillo at gcc dot gnu dot org
2008-01-27 15:36 ` rguenth at gcc dot gnu dot org
2008-06-22 15:06 ` rguenth at gcc dot gnu dot org
2008-06-22 15:07 ` rguenth at gcc dot gnu dot org
2004-02-25 17:37 [Bug optimization/14295] New: " dann at godzilla dot ics dot uci dot edu
2004-05-27  5:28 ` [Bug tree-optimization/14295] " pinskia at gcc dot gnu dot org
2004-06-29 17:41 ` pinskia at gcc dot gnu dot org
2005-09-14 17:35 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).