This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/20703] New: [tcb] FRE does not remove a fully redundant load.


Consider:

int
foo (int *array)
{
  if (array[1] != 0)
    return array[1];
  return 0;
}

Here is the result after the first DCE, which is immediately after FRE.



foo (array)
{
  int D.1134;
  int D.1133;
  int * D.1132;

<bb 0>:
  D.1132_3 = array_2 + 4B;
  D.1133_4 = *D.1132_3;
  if (D.1133_4 != 0) goto <L0>; else goto <L2>;

<L0>:;
  D.1132_7 = D.1132_3;
  D.1134_8 = *D.1132_7;

  # D.1134_1 = PHI <D.1134_8(1), 0(0)>;
<L2>:;
  return D.1134_1;

}

Note that the second load still stays there.

If I run copy-prop and FRE one more time immediately after running them
for the first time, then the second run of FRE can remove the redundant load.
By running the copy prop one more time, the second load becomes:

  D.1134_8 = *D.1132_3;

Then then I guess it's easy for FRE to eliminate this load because
RHS looks exactly like the first load.

-- 
           Summary: [tcb] FRE does not remove a fully redundant load.
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: enhancement
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kazu at cs dot umass dot edu
                CC: dnovillo at redhat dot com,gcc-bugs at gcc dot gnu dot
                    org


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]