Hello,

is there a way to determine just how an argument is affected by SRA after SRA has occured? I have the following functions:

source:

_Bool
returnLastField (struct arc anArc)
{
  return anArc.c;
}

_Bool
returnNextField (struct arc anArc)
{
  _Bool *ptr = &(anArc.a);
  ptr = ptr + 1; // accesses anArc.b
  return *ptr;
}


I normally determine field accesses by looking at both COMPONENT_REF and MEM_REFs...

Without SRA:

returnLastField (struct arc anArc)
{
  <bb 2> [count: 1]:
  _2 = anArc.c;
  return _2;

}


returnNextField (struct arc anArc)
{
  <bb 2> [count: 1]:
  _2 = MEM[(_Bool *)&anArc + 1B]; // accesses anArc.b
  return _2;

}


However, SRA obfuscates this.

With SRA:

returnLastField.isra (_Bool ISRA.0)
{
  struct arc anArc;
  struct arc anArc;

  <bb 3> [count: 1]:

  <bb 2> [count: 1]:
  _1 = ISRA.0_2(D);
  return _1;

}

returnNextField.isra (_Bool ISRA.1)
{
  struct arc anArc;
  struct arc anArc;

  <bb 3> [count: 1]:

  <bb 2> [count: 1]:
  _1 = ISRA.1_2(D);
  return _1;

}


How would I be able to determine the effects of ISRA on the struct argument?

Thanks!

Reply via email to