This is the mail archive of the gcc@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]

df.c bug fix for gcc_3_4_0_release


Hello,

While using the df.c interface (for the dual mode optimization, see
http://gcc.gnu.org/ml/gcc/2004-06/msg00472.html) I've
encountered a problem in the def-use chain construction.

Here is an example of this problem:

Analyzing the following code for def-use and use-def chains using the df
module returns the following result:

The code -

int 
foo (int a, int b, int n1, int n4)
{
  int i;
 
  a = b + a;

  if (n1 < n4)
    {
      for (i = 1 ; i < n4 ; i++) 
        {
          b = a + b;
        }
    }
  else {
    for (i = 1 ; i < n4 ; i++) 
      {
        b = a * b;
      }
  }
  return b;
}

The result - 

Use-def chains:
d0 bb 0 luid 1 insn 3 reg 122 { u0 }
d1 bb 0 luid 2 insn 4 reg 123 { u1 u16 }
d2 bb 0 luid 3 insn 5 reg 124 { u3 }
d3 bb 0 luid 4 insn 6 reg 125 { u2 u5 u7 u18 }
d4 bb 0 luid 5 insn 12 reg 119 { u15 }
d5 bb 0 luid 6 insn 14 reg 126 { u4 }
d6 bb 1 luid 1 insn 18 reg 127 { u6 }
d7 bb 3 luid 1 insn 24 reg 128 { u8 }
d8 bb 4 luid 1 insn 27 reg 118 { u11 }
d9 bb 5 luid 1 insn 30 reg 123 { u10 u21 }
d10 bb 5 luid 2 insn 32 reg 118 { u11 u13 }
d11 bb 5 luid 3 insn 33 reg 129 { u14 }
d12 bb 7 luid 1 insn 38 reg 120 { u17 }
d13 bb 8 luid 1 insn 41 reg 123 { u16 u21 }
d14 bb 8 luid 2 insn 43 reg 120 { u17 u19 }
d15 bb 8 luid 3 insn 44 reg 130 { u20 }

Def-use chains:
u0 bb 0 luid 5 insn 12 reg 122 { d0 }
u1 bb 0 luid 5 insn 12 reg 123 { d1 }
u2 bb 0 luid 6 insn 14 reg 125 { d3 }
u3 bb 0 luid 6 insn 14 reg 124 { d2 }
u4 bb 0 luid 7 insn 15 reg 126 { d5 }
u5 bb 1 luid 1 insn 18 reg 125 { d3 }
u6 bb 1 luid 2 insn 19 reg 127 { d6 }
u7 bb 3 luid 1 insn 24 reg 125 { d3 }
u8 bb 3 luid 2 insn 25 reg 128 { d7 }
u9 bb 5 luid 1 insn 30 reg 119 { d4 }
u10 bb 5 luid 1 insn 30 reg 123 { d1 d9 }
u11 bb 5 luid 2 insn 32 reg 118 { d8 d10 }
u12 bb 5 luid 3 insn 33 reg 125 { d3 }
u13 bb 5 luid 3 insn 33 reg 118 { d10 }
u14 bb 5 luid 4 insn 34 reg 129 { d11 }
u15 bb 8 luid 1 insn 41 reg 119 { d4 }
u16 bb 8 luid 1 insn 41 reg 123 { d1 d13 }
u17 bb 8 luid 2 insn 43 reg 120 { d12 d14 }
u18 bb 8 luid 3 insn 44 reg 125 { d3 }
u19 bb 8 luid 3 insn 44 reg 120 { d14 }
u20 bb 8 luid 4 insn 45 reg 130 { d15 }
u21 bb 9 luid 1 insn 54 reg 123 { d1 d9 d13 }

In this example you can see that u9 and u15 has d4 in their def chains,
but d4 has only u15 in it's use chain.

This problem appeared in older version of gcc mainline, but the df code 
have 
been changed later.

>From the code it seems that the problem exists even in gcc 3.4.0 release.
Look at the above patch for my suggested changes to fix this problem.

Comments welcomed,

Leehod



Attachment: diff_21_6
Description: Binary data


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