Hi

I am implementing a GCC Pass as IPA_Pass before the pass
"whole-program". I am using LTO to run my pass once during linking
phase.

I am having trouble interpreting the results of the def-use chains for
SSA Variables. I am traversing the def use chains backwards to access
the variables that affect the current one's values.
This is my sample code

struct dpndntStmt * getDpndStmt(tree ssaName){
   gimple stmt = SSA_NAME_DEF_STMT(ssaName);
    ...
    use_optype_p ptr;
    for (ptr = gimple_use_ops (stmt); ptr; ptr = ptr->next){
        list->push_back( getDpndStmt( *(ptr->use_ptr.use) ) );
    }
    ...
}

Essentially, I am accessing the variables that are used in the current
statement, and look for uses in their definition statements (creating
a data dependence tree).

This works perfectly in some examples, but it gives unexplainable
results in other cases (squid, postgres). One of the examples are
given below

OUTPUT
"    Stmt: _23 = SkipBuildPrefix ("HttpHeader.cc");
    Defines
      _23
    Uses
        Stmt: _20 = getDebugOut ();
        Defines
          .MEM_59
        Uses
            Stmt: sectionLevel = sectionLevel.220_17;
"


IR
"  <bb 5>:
  sectionLevel = sectionLevel.220_17;
  _20 = getDebugOut ();
  # DEBUG _dbo => _20
  level.219_21 = level;
  if (level.219_21 > 1)
    goto <bb 6>;
  else
    goto <bb 10>;

  <bb 6>:
  _23 = SkipBuildPrefix ("HttpHeader.cc");
  # DEBUG __out => _20
  # DEBUG __s => _23
  if (_23 == 0B)
    goto <bb 7>;
  else
    goto <bb 8>;
"

What the def use chains say is that the statement "_23 =
SkipBuildPrefix ("HttpHeader.cc");" defines _23 (correct) but uses _20
variable (incorrect?). Going forward with the statement "_20 =
getDebugOut ();", we see more issues in the Output above.


I was hoping you could enlighten me if I am misinterpreting the data
structures. I will be thankful for your help.


Thanks and Regards
Rohit Bhatia

Reply via email to