Hi :
   In paper "Memory SSA-A Unified Approach for Sparsely Representing
Memory Operations",
section 2.2, it says :

"Whenever possible, compiler will create symbolic names to represent distinct
regions inside aggregates(called structure field tags or SFT). For instance,
in Figure 2(b), GCC will create three SFT symbols for this structure, namely
SFT.0 for A.x, SFT.1 for A.b and SFT.2 for A.a"

I tried GCC4.4.1(mips target) with following piece of code,
-------------------------------start
struct tag_1
{
  int *i;
  int *j;
  int *x;
  int y;
}a;
struct tag_2
{
  struct tag_1 t1[100];
  int x[200];
  int *y;
}s;
int func(int **p)
{
    int *c = *p;
    if (a.y > 0)
      s.y = *p1;
    else
      *c = *s.y;

  return 0;
}
-------------------------------end
The "055t.alias" dumped are like,
-------------------------------start
func (int * * p)
{
  int * c;
  int * gp.2;
  int g.1;
  int D.1352;
  int * D.1351;
  int * D.1349;
  int * * p1.0;
  int D.1345;

<bb 2>:
  # VUSE <gp_12(D), a_13(D), arr_14(D), s_15(D), SMT.13_16(D)>
  c_2 = *p_1(D);
  # VUSE <a_13(D)>
  D.1345_3 = a.y;
  if (D.1345_3 > 0)
    goto <bb 3>;
  else
    goto <bb 4>;

<bb 3>:
  # VUSE <p1_17(D)>
  p1.0_4 = p1;
  # VUSE <gp_12(D), a_13(D), arr_14(D), s_15(D), SMT.13_16(D)>
  D.1349_5 = *p1.0_4;
  # s_18 = VDEF <s_15(D)>
  s.y = D.1349_5;
  goto <bb 5>;

<bb 4>:
  # VUSE <s_15(D)>
  D.1351_6 = s.y;
  # VUSE <g_19(D), a_13(D), s_15(D), SMT.14_20(D)>
  D.1352_7 = *D.1351_6;
  # g_21 = VDEF <g_19(D)>
  # a_22 = VDEF <a_13(D)>
  # s_23 = VDEF <s_15(D)>
  # SMT.14_24 = VDEF <SMT.14_20(D)>
  *c_2 = D.1352_7;
-------------------------------end.

it seems structure a and s are treated as array variables, no SFT is created.

Did I miss anything or the implementation is different? Thanks.
-- 
Best Regards.

Reply via email to