[Ad-dev] [openAD] #268: OA: missing active variables

OpenAD trac at mcs.anl.gov
Fri Feb 11 07:17:10 CST 2011


#268: OA: missing active variables
--------------------------------------+-------------------------------------
 Reporter:  utke                      |       Owner:  utke
     Type:  defect                    |      Status:  new 
 Priority:  major                     |   Milestone:      
Component:  OpenAnalyis (old branch)  |    Keywords:      
--------------------------------------+-------------------------------------
 Attached are two pieces of code whose traversal order through the
 data dependencies triggers a different outcome based on
 how deep in the recursion the condition:
 ---
     // Actual or formal parameters without any outgoing edges shouldn't be
     // activated.
     if (nonParentSuccessors == 0
     && !isVariedBefore && !isSelfDependent() &&
     ( parenEType == CALL_EDGE || parenEType == RETURN_EDGE) &&
     !mDUG->isDependent(getProc(), getSym()) ) {

       unsetVaried();
 ---
 is tested  and subsequently "unsetVaried" is called.
 The trace for the good case  has the traversal for fooout along the
 return edge deeper in the
 recursion, see :
 markVaried 8 entering for FOO::FOOOUT
 -v->"p_(43)\nPOUT"->"FOO(45)\nFOOOUT"[label="C(47915221307392)\np_\n->
 FOO", style=dashed];


 and later

  unsetVaried:FOO::FOOOUT
 unsetVaried("FOO(45)\nFOOOUT")
 <-
 markVaried 8 leaving for FOO::FOOOUT

 in the attached trace_ok.txt
 so that the :"unsetVaried" happens there but is undone later in the
 traversal, see:
 markVaried 5 entering for FOO::FOOOUT
 -v->"FOO(44)\nFOOIN"->"FOO(45)\nFOOOUT"[label="F\nFOO"];

 <-
 markVaried 5 leaving for FOO::FOOOUT

 ===========================
 For the "fail" case all I changed was the assignment order before the call
 to trigger the recursion to FIRST go down the path from POUT to FOOUT
 instead of  PIN->FOOIN->FOOUT....  (see trace_fail.txt)

 markVaried 4 entering for FOO::FOOOUT
 -v->"p_(42)\nPOUT"->"FOO(45)\nFOOOUT"[label="C(47437752258560)\np_\n->
 FOO", style=dashed];

 and the upon unwinding the recursion:
  unsetVaried:FOO::FOOOUT
 unsetVaried("FOO(45)\nFOOOUT")
 <-
 markVaried 4 leaving for FOO::FOOOUT

 and after that nothing else comes about to fix it and FOOUT remains
 "not varied".

-- 
Ticket URL: <https://trac.mcs.anl.gov/projects/openAD/ticket/268>
OpenAD <http://www.mcs.anl.gov/openad>
Bug tracking for OpenAD components


More information about the Ad-dev mailing list