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