A ne-grainedclassi cationofdata-dependencesforlanguages,suchasC,thatlettheprogrammerdirectlymanipulatememory.
Empiricalresultsthatillustratethedistributionofdatadependencesintovariouscategories. Anewslicingtechniquethatallowsforbuildingslicesbyconsideringonlyasubsetofdatadependences,basedontheirrelevance.
Acasestudythatshowstheresultsoftheapplicationoftheslicingtechniquetoarealexample.
2Background
Data- owanalysistechniquesrequirethecontrol- owrelationoftheprogrambeinganalyzed.This
Inthissection,wede nedatadependences.Wealsobrie ydescribealiasanalysesandprogramslicing.relationcanberepresentedasacontrol- owgraph.Acontrol- owgraph(CFG)containsnodes,whichrepresentstatements,andedges,whichrepresentpotential owofcontrolamongthestatements.Inaddition,
Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunat
12
def={x} use={}def={y} use={}def={} use={x,y}
7
def={} use={y}
1 begin M2 read x3 read y
4 if x > y then5 read x6 print x else
8 print y endif9 end M
34
def={x} use={}def={} use={x}
56
8
Figure1:Sampleprogramtoillustratede nitions,uses,anddatadependences(above);control- owgraphfortheprogramannotatedwithdefandusesets(below).
CFGcanalsobebuiltatthebasic-blocklevel;insuchaCFG,eachnoderepresentsasequenceofsingle-entry,single-exit
statements.
1A
Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunat
1.2.3.4.5.6.7.8.9.10.11.
algorithmComputeReachingDefsinputCFGcontrol- owgraphforprogram
GEN(n)setofde nitionsthataregeneratedatnodenKILL(n)setofde nitionsthatarekilledatnoden
outputIN(n)setofde nitionsthatreachnoden
OUT(n)setofde nitionsthatreachtheendofnoden
declarechange agtoindicateifthevalueofanOUT(n)changedfromapreviousiteration
oldoutvalueofOUT(n)fromthepreviousiteration
beginComputeReachingDefs
foreachnoden∈CFGdoOUT(n)=GEN(n)endforchange=truewhilechangedo
change=falseforeachnoden∈CFGdo
OUT(p),wherepisapredecessorofnintheCFGIN(n)=
oldout=OUT(n)
OUT(n)=GEN(n)∪(IN(n) KILL(n))
ifoldout=OUT(n)thenchange=trueendifendforendwhile
endComputeReachingDefs
Figure2:Thealgorithmforcomputingreachingde nitions.
Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunat
1.2.3.4.5.6.7.8.9.10.11.
inti;main(){
int*p;
intj,sum1,sum2;sum1=0;sum2=0;readi,j;
while(i<10){
if(j<0){
p=&sum1;}
else{
p=&sum2;}
*p=add(j,*p);readj;}
sum1=add(j,sum1);printsum1,sum2;}
12.13.14.15.16.17.18.19.20.21.
intadd(intval,intsum){
int*q,k;readk;
if(sum>100){
i=9;}
sum=sum+i;if(i<k){
q=&val;}
else{
q=&k;}
sum=sum+*q;i=i+1;returnsum;}
Figure3:ProgramSum.
slicecanalsobecomputedintheforwarddirection:aforwardsliceincludesthosestatementsinPthatarein uenced
bythevaluesofthevariablesinVats.
2A
Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunat
Figure4:Control- owgraphsforprogramSum(Figure2)withde niteandpossiblede nitionandusesetsateachnode.
Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunat
Table1:Def-usetypesbasedonthetypesofde nitionsanduses.
De nitede nition
def-usetype3def-usetype4
Table2:Classi cationofΠ—pathsfromde nitionstouses—afterincorporatingtheoccurrencesofde nitekillingpaths.
BasetypeofΠallde nitedef-clear
π∈Π:πisde nitekilling
somede nitedef-clear
π∈Π:πisde nitekilling
allpossibledef-clear
π∈Π:πisde nitekilling
PRD-KDPRD-KExtendedtypeofΠ
DRD-K
Data dependences, which relate statements that compute data values to statements that use those values, are useful for automating a variety of program-comprehension-related activities, such as reverse engineering, impact analysis, and debugging. Unfortunat
Table3:Classi cationofdef-useassociations:24typesthatresultfromacrossproductofdef-usetypes(Table1)andthesecondalternativeforpathclassi cation(column3ofTable2).