±à¼ÍƼö: |
±¾ÎÄÖØµã½éÉÜÁËÀí½â3ÖÖÊý¾ÝÁ÷·ÖÎöµÄº¬Ò壬ÈçºÎÉè¼ÆÀàËÆµÄËã·¨£¬ÈçºÎÓÅ»¯£¬Àí½âÖÖÊý¾ÝÁ÷·ÖÎöµÄ¹²ÐÔÓëÇø±ð£¬Àí½âÖÖÊý¾ÝÁ÷·ÖÎöµÄ¹²ÐÔÓëÇø±ð¡£
±¾ÎÄÀ´×Ô¼òÊ飬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£
|
|
1.Êý¾ÝÁ÷·ÖÎö×ÜÀÀ
may analysis£ºÊä³ö¿ÉÄÜÕýÈ·µÄÐÅÏ¢£¨Ðè×öover-approximationÓÅ»¯£¬²ÅÄܳÉΪSafe-approximation°²È«µÄ½üËÆ£¬¿ÉÒÔÓÐÎó±¨-completeness£©£¬×¢Òâ´ó¶àÊý¾²Ì¬·ÖÎö¶¼ÊÇmay
analysis
must analysis£ºÊä³ö±ØÐëÕýÈ·µÄÐÅÏ¢£¨Ðè×öunder-approximationÓÅ»¯£¬²ÅÄܳÉΪSafe-approximation°²È«µÄ½üËÆ£¬¿ÉÒÔÓЩ±¨-soundness£©
Nodes (BBs/statements)¡¢Edges (control flows)¡¢CFG (a
program)
ÀýÈ磺
application-specific Data <- abstraction (+/-/0)
Nodes <- Transfer function
Edges <- Control-flow handling
²»Í¬µÄÊý¾ÝÁ÷·ÖÎö ÓÐ ²»Í¬µÄÊý¾Ý³éÏó±í´ï ºÍ ²»Í¬µÄ°²È«½üËÆ²ßÂÔ£¬Èç
²»Í¬µÄ ת»»¹æÔò ºÍ ¿ØÖÆÁ÷´¦Àí¡£

2-1-Êý¾ÝÁ÷·ÖÎö×ÜÀÀ.png
2.Ô¤±¸ÖªÊ¶
ÊäÈë/Êä³ö״̬£º³ÌÐòÖ´ÐÐǰ/Ö´ÐкóµÄ״̬£¨±¾ÖʾÍÊdzéÏó±í´ïµÄÊý¾ÝµÄ״̬£¬Èç±äÁ¿µÄ״̬£©¡£
Êý¾ÝÁ÷·ÖÎöµÄ½á¹û£º×îÖյõ½£¬Ã¿Ò»¸ö³ÌÐòµã¶ÔÓ¦Ò»¸öÊý¾ÝÁ÷Öµ(data-flow value)£¬±íʾ¸ÃµãËùÓпÉÄܳÌÐò״̬µÄÒ»¸ö³éÏó¡£ÀýÈ磬ÎÒÖ»¹ØÐÄx¡¢yµÄÖµ£¬ÎÒ¾ÍÓóéÏóÀ´±íʾx¡¢yËùÓпÉÄܵÄÖµµÄ¼¯ºÏ£¨ÊäÈë/Êä³öµÄÖµÓò/Ô¼Êø£©£¬¾Í´ú±íÁ˸óÌÐòµãµÄ³ÌÐò״̬¡£
Forward AnalysisǰÏò·ÖÎö£º°´³ÌÐòÖ´ÐÐ˳ÐòµÄ·ÖÎö¡£OUT[s]=fs(IN[s])£¬s-statement
Backward Analysis·´Ïò·ÖÎö£ºÄæÏò·ÖÎö¡£IN[s]=fs(OUT[s])
¿ØÖÆÁ÷Ô¼Êø£ºÔ¼ÊøÇó½â×öµÄÊÂÇé£¬ÍÆ¶Ï¼ÆËãÊäÈëµ½Êä³ö£¬»ò·´Ïò·ÖÎö¡£

2-2-¿ØÖÆÁ÷Ô¼Êø.png
3.Reaching Definitions Analysis (may analysis)
ÎÊÌⶨÒ壺¸ø±äÁ¿vÒ»¸ö¶¨Òåd£¨¸³Öµ£©£¬´æÔÚÒ»Ìõ·¾¶Ê¹µÃ³ÌÐòµãpÄܹ»µ½´ïq£¬ÇÒÔÚÕâ¸ö¹ý³ÌÖв»ÄܸıävµÄ¸³Öµ¡£
Ó¦ÓþÙÀý£º¼ì²â䶨ÒåµÄ±äÁ¿£¬Èôv¿É´ïpÇÒvûÓб»¶¨Ò壬ÔòΪ䶨ÒåµÄ±äÁ¿¡£
³éÏó±íʾ£ºÉè³ÌÐòÓÐnÌõ¸³ÖµÓï¾ä£¬ÓÃnλÏòÁ¿À´±íʾÄÜreachÓë²»ÄÜreach¡£
£¨1£©¹«Ê½·ÖÎö
ʲôÊÇdefinition£¿ D: v = x op y ÀàËÆÓÚ¸³Öµ¡£
Transfer Function£ºOUT[B] = genB U (IN[B] - killB)
¡ª¡ªÔõôÀí½â£¬¾ÍÊÇ»ùÓÚת»»¹æÔò¶øµÃµ½¡£
½âÊÍ£º»ù±¾¿éBµÄÊä³ö = ¿éBÄÚµÄËùÓбäÁ¿vµÄ¶¨Ò壨¸³Öµ/Ð޸ģ©Óï¾ä U £¨¿éBµÄÊäÈë - ³ÌÐòÖÐÆäËüËùÓж¨ÒåÁ˱äÁ¿vµÄÓï¾ä£©¡£±¾ÖʾÍÊDZ¾¿éÓëǰÇýÐ޸ıäÁ¿µÄÓï¾ä
×÷ÓÃÖ®ºÍ£¨È¥µôǰÇýµÄÖØ¸´ÐÞ¸ÄÓï¾ä£©¡£
Control Flow£ºIN[B] = Up a_predecesso_of_B Out[P] ¡ª¡ªÔõôÀí½â£¬¾ÍÊÇ»ùÓÚ¿ØÖÆÁ÷¶øµÃµ½¡£
½âÊÍ£º»ù±¾¿éBµÄÊäÈë = ¿éBËùÓÐǰÇý¿éPµÄÊä³öµÄ²¢¼¯¡£×¢Ò⣬ËùÓÐǰÇý¿éÒâζ×ÅÖ»ÒªÓÐÒ»Ìõ·¾¶Äܹ»µ½´ï¿éB£¬¾ÍÊÇËüµÄǰÇý£¬°üÀ¨Ìõ¼þÌø×ªÓëÎÞÌõ¼þÌø×ª¡£

2-3-1-Reaching_Definition.png
£¨2£©Ëã·¨
Ä¿µÄ£ºÊäÈëCFG£¬¼ÆËãºÃÿ¸ö»ù±¾¿éµÄkillB£¨³ÌÐòÖÐÆäËü¿éÖж¨ÒåÁ˱äÁ¿vµÄÓï¾ä£©ºÍgenB£¨¿éBÄÚµÄËùÓбäÁ¿vµÄ¶¨ÒåÓï¾ä£©£¬Êä³öÿ¸ö»ù±¾¿éµÄIN[B]ºÍOUT[B]¡£
·½·¨£ºÊ×ÏÈËùÓлù±¾¿éµÄOUT[B]³õʼ»¯Îª¿Õ¡£±éÀúÿһ¸ö»ù±¾¿éB£¬°´ÒÔÉÏÁ½¸ö¹«Ê½¼ÆËã¿éBµÄIN[B]ºÍOUT[B]£¬Ö»ÒªÕâ´Î±éÀúʱÓÐij¸ö¿éµÄOUT[B]·¢Éú±ä»¯£¬ÔòÖØÐ±éÀúÒ»´Î£¨ÒòΪ³ÌÐòÖÐÓÐÑ»·´æÔÚ£¬Ö»ÒªÄ³¿éµÄOUT[B]±äÁË£¬¾ÍÒâζןó¼Ì¿éµÄIN[B]±äÁË£©¡£

2-3-2-¿É´ïÐÔ·ÖÎöËã·¨.png
£¨3£©ÊµÀý£º
³éÏó±íʾ£ºÉè³ÌÐòÓÐnÌõ¸³ÖµÓï¾ä£¬ÓÃnλÏòÁ¿À´±íʾÄÜreachÓë²»ÄÜreach¡£
˵Ã÷£ººìÉ«-µÚ1´Î±éÀú£»À¶É«-µÚ2´Î±éÀú£»ÂÌÉ«-µÚ3´Î±éÀú¡£
½á¹û£º3´Î±éÀúÖ®ºó£¬Ã¿¸ö»ù±¾¿éµÄOUT[B]¶¼²»Ôٱ仯¡£

2-3-3±éÀúʵÀý.png
ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔ»ØÏëһϣ¬Êý¾ÝÁ÷·ÖÎöµÄÄ¿±êÊÇ£¬×îºóµÃµ½ÁË£¬Ã¿¸ö³ÌÐòµã¹ØÁªÒ»¸öÊý¾ÝÁ÷Öµ£¨¸ÃµãËùÓпÉÄܵijÌÐò״̬µÄÒ»¸ö³éÏó±íʾ£¬Ò²¾ÍÊÇÕâ¸önλÏòÁ¿£©¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬ÎÒÃǶԸö»ù±¾¿é£¬²»¶ÏÀûÓûùÓÚת»»¹æÔòµÄÓïÒ壨Ҳ¾ÍÊÇtransfer
functions£¬¹¹³É»ù±¾¿éµÄÓï¾ä¼¯£©-OUT[B]¡¢¿ØÖÆÁ÷µÄÔ¼Êø-IN[B]£¬×îÖյõ½Ò»¸öÎȶ¨µÄ°²È«µÄ½üËÆÔ¼Êø¼¯¡£
£¨4£©Ëã·¨»áÍ£Ö¹Âð£¿
OUT[B] = genB U (IN[B] - killB)
´óÖÂÀí½â£ºgenBºÍ killBÊDz»±äµÄ£¬Ö»ÓÐIN[B]Ôڱ仯£¬ËùÒÔ˵OUT[B]Ö»»áÔö¼Ó²»»á¼õÉÙ£¬nÏòÁ¿³¤¶ÈÊÇÓÐÏ޵ģ¬ËùÒÔ×îÖտ϶¨»áÍ£Ö¹¡£¾ßÌåÉæ¼°µ½²»¶¯µãÖ¤Ã÷£¬ºóÐø¿Î³Ì»á½²½â¡£
4.Live Variables Analysis (may analysis)
ÎÊÌⶨÒ壺ij³ÌÐòµãp´¦µÄ±äÁ¿v£¬´Óp¿ªÊ¼µ½exit¿éµÄCFGÖÐÊÇ·ñÓÐijÌõ·¾¶Óõ½ÁËv£¬Èç¹ûÓõ½ÁËv£¬ÔòvÔÚpµãΪlive£¬·ñÔòΪdead¡£ÆäÖÐÓÐÒ»¸öÒþº¬Ìõ¼þ£¬ÔÚµãpºÍÒýÓõãÖ®¼ä²»ÄÜÖØ¶¨Òåv¡£

2-4-1-live_variables¶¨Òå.png
Ó¦Óó¡¾°£º¿ÉÓÃÓڼĴæÆ÷·ÖÅ䣬Èç¹û¼Ä´æÆ÷ÂúÁË£¬¾ÍÐèÒªÌæ»»µô²»»á±»Óõ½µÄ±äÁ¿¡£
³éÏó±íʾ£º³ÌÐòÖеÄn¸ö±äÁ¿Óó¤¶ÈΪn bitµÄÏòÁ¿À´±íʾ£¬¶ÔÓ¦bitΪ1£¬Ôò¸Ã±äÁ¿Îªlive£¬·´Ö®Îª0ÔòΪdead¡£
£¨1£©¹«Ê½·ÖÎö
Control Flow£ºOUT[B] = US a_successor_of_BIN[S]
Àí½â£ºÎÒÃÇÊÇǰÏò·ÖÎö£¬Ö»ÒªÓÐÒ»Ìõ×Ó·ÊÇlive£¬¸¸½Úµã¾ÍÊÇlive¡£
Transfer Function£ºIN[B] = useB U (OUT[B] - defB)
Àí½â£ºIN[B] = ±¾¿éÖÐuse³öÏÖÔÚdefine֮ǰµÄ±äÁ¿ U £¨OUT[B]³ö¿ÚµÄliveÇé¿ö
- ±¾¿éÖгöÏÖÁËdefineµÄ±äÁ¿£©¡£defineÖ¸µÄÊǶ¨Òå/¸³Öµ¡£
ÌØÀý·ÖÎö£ºÈçÒÔÏÂͼËùʾ£¬µÚ4ÖÖÇé¿ö£¬v=v-1£¬Êµ¼ÊÉÏuse³öÏÖÔÚdefine֮ǰ£¬vÊÇʹÓõġ£

2-4-2-¹«Ê½ÍƵ¼.png
£¨2£©Ëã·¨
Ä¿µÄ£ºÊäÈëCFG£¬¼ÆËãºÃÿ¸ö»ù±¾¿éÖеÄdefB£¨Öض¨Ò壩ºÍuseB£¨³öÏÖÔÚÖØ¶¨Òå֮ǰµÄʹÓã©¡£Êä³öÿ¸ö»ù±¾¿éµÄIN[B]ºÍOUT[B]¡£
·½·¨£ºÊ×Ïȳõʼ»¯Ã¿¸ö»ù±¾¿éµÄIN[B]Ϊ¿Õ¼¯¡£±éÀúÿһ¸ö»ù±¾¿éB£¬°´ÒÔÉÏÁ½¸ö¹«Ê½¼ÆËã¿éBµÄOUT[B]ºÍIN[B]£¬Ö»ÒªÕâ´Î±éÀúʱÓÐij¸ö¿éµÄIN[B]·¢Éú±ä»¯£¬ÔòÖØÐ±éÀúÒ»´Î£¨ÒòΪÓÐÑ»·£¬Ö»ÒªÄ³¿éµÄIN[B]±äÁË£¬¾ÍÒâζǰÇý¿éµÄOUT[B]±äÁË£©¡£
ÎÊÌ⣺±éÀú»ù±¾¿éµÄ˳ÐòÓÐÒªÇóÂ𣿠ûÓÐÒªÇ󣬵«ÊÇ»áÓ°Ïì±éÀúµÄ´ÎÊý¡£

2-4-3-live_variablesËã·¨.png
³õʼ»¯¹æÂÉ£ºÒ»°ãÇé¿öÏ£¬may analysis È«²¿³õʼ»¯Îª¿Õ£¬must analysisÈ«²¿³õʼ»¯Îªall¡£
£¨3£©ÊµÀý
³éÏó±íʾ£º³ÌÐòÖеÄn¸ö±äÁ¿Óó¤¶ÈΪn bitµÄÏòÁ¿À´±íʾ£¬¶ÔÓ¦bitΪ1£¬Ôò¸Ã±äÁ¿Îªlive£¬·´Ö®Îª0ÔòΪdead¡£
˵Ã÷£º´ÓÏÂÍùÉϱéÀú»ù±¾¿é£¬ºÚÉ«-³õʼ»¯£»ºìÉ«-µÚ1´Î£»À¶É«-µÚ2´Î£»ÂÌÉ«-µÚ3´Î¡£
½á¹û£º3´Î±éÀúºó£¬IN[B]²»Ôٱ仯£¬±éÀú½áÊø¡£

2-4-4-Ëã·¨ÔËÐÐʾÀý.png
5.Available Expressions Analysis (must analysis)
ÎÊÌⶨÒ壺³ÌÐòµãp´¦µÄ±í´ïʽx op y¿ÉÓÃÐèÂú×ã2¸öÌõ¼þ£¬Ò»ÊÇ´Óentryµ½pµã±ØÐë¾¹ýx op
y£¬¶þÊÇ×îºóÒ»´ÎʹÓÃx op yÖ®ºó£¬Ã»ÓÐÖØ¶¨Òå²Ù×÷Êýx¡¢y¡££¨Èç¹ûÖØ¶¨ÒåÁËx »ò y£¬Èçx = a
op2 b£¬ÔòÔÀ´µÄ±í´ïʽx op yÖеÄx»òy¾Í»á±»Ìæ´ú£©¡£
Ó¦Óó¡¾°£ºÓÃÓÚÓÅ»¯£¬¼ì²âÈ«¾Ö¹«¹²×Ó±í´ïʽ¡£
³éÏó±íʾ£º³ÌÐòÖеÄn¸ö±í´ïʽ£¬Óó¤¶ÈΪn bitµÄÏòÁ¿À´±íʾ£¬1±íʾ¿ÉÓã¬0±íʾ²»¿ÉÓá£
˵Ã÷£ºÊôÓÚforward·ÖÎö¡£
£¨1£©¹«Ê½·ÖÎö
Transfer Function£ºOUT[B] = genB U (IN[B] - killB)
Àí½â£ºgenB¡ª»ù±¾¿éBÖÐËùÓÐеıí´ïʽ£¨²¢ÇÒÔÚÕâ¸ö±í´ïʽ֮ºó£¬²»ÄܶԱí´ïʽÖгöÏֵıäÁ¿½øÐÐÖØ¶¨Ò壩-->¼ÓÈëµ½OUT£»killB¡ª´ÓINÖÐɾ³ý±äÁ¿±»ÖØÐ¶¨ÒåµÄ±í´ïʽ¡£
Control Flow£ºIN[B] = P a_predecessor_of_B OUT[P]
Àí½â£º´Óentryµ½pµãµÄËùÓз¾¶¶¼±ØÐë¾¹ý¸Ã±í´ïʽ¡£

2-5-1-¿ÉÓñí´ïʽ¶¨Òå.png
ÎÊÌ⣺¸Ã·ÖÎöΪʲôÊôÓÚmust analysisÄØ£¿ÒòΪÎÒÃÇÔÊÐíÓЩ±¨£¬²»ÄÜÓÐÎ󱨣¬±ÈÈçÒÔÉÏʾÀýÖУ¬¸ÄΪx=3£¬È¥µô
b=e16*x£¬¸Ã¹«Ê½»á°Ñ¸Ã±í´ïʽʶ±ðΪ²»¿ÉÓᣵ«ÊÂʵÊÇ¿ÉÓõģ¬ÒòΪ°Ñx=3Ìæ»»µ½±í´ïʽÖв¢²»Ó°Ïì¸Ã±í´ïʽµÄÐÎʽ¡£ÕâÀïËäȻ©±¨ÁË£¬µ«ÊDz»Ó°Ïì³ÌÐò·ÖÎö½á¹ûµÄÕýÈ·ÐÔ¡£
£¨2£©Ëã·¨
Ä¿µÄ£ºÊäÈëCFG£¬Ìáǰ¼ÆËãºÃgenBºÍkillB¡£
·½·¨£ºÊ×ÏȽ«OUT[entry]³õʼ»¯Îª¿Õ£¬ËùÓлù±¾¿éµÄOUT[B]³õʼ»¯Îª1...1¡£±éÀúÿһ¸ö»ù±¾¿éB£¬°´ÒÔÉÏÁ½¸ö¹«Ê½¼ÆËã¿éBµÄIN[B]ºÍOUT[B]£¬Ö»ÒªÕâ´Î±éÀúʱÓÐij¸ö¿éµÄOUT[B]·¢Éú±ä»¯£¬ÔòÖØÐ±éÀúÒ»´Î£¨ÒòΪÓÐÑ»·£¬Ö»ÒªÄ³¿éµÄOUT[B]±äÁË£¬¾ÍÒâζºó¼Ì¿éµÄIN[B]±äÁË£©¡£

2-5-2-¿ÉÓñí´ïʽËã·¨.png
£¨3£©ÊµÀý
³éÏó±íʾ£º³ÌÐòÖеÄn¸ö±í´ïʽ£¬Óó¤¶ÈΪn bitµÄÏòÁ¿À´±íʾ£¬1±íʾ¿ÉÓã¬0±íʾ²»¿ÉÓá£
˵Ã÷£ººÚÉ«-³õʼ»¯£»ºìÉ«-µÚ1´Î£»À¶É«-µÚ2´Î¡£
½á¹û£º2´Î±éÀúºó£¬OUT[B]²»Ôٱ仯£¬±éÀú½áÊø¡£

2-5-3-Ëã·¨ÔËÐÐʾÀý.png
6.ÈýÖÖ·ÖÎö¼¼Êõ¶Ô±È

ÎÊÌ⣺ÔõÑùÅжÏÊÇMay»¹ÊÇMust£¿
Reaching Definitions±íʾֻҪ´Ó¸³ÖµÓï¾äµ½µãp´æÔÚ1Ìõ·¾¶£¬ÔòΪreaching£¬½á¹û²»Ò»¶¨ÕýÈ·£»Live
Variables±íʾֻҪ´Óµãpµ½Exit´æÔÚ1Ìõ·¾¶Ê¹ÓÃÁ˱äÁ¿v£¬ÔòΪlive£¬½á¹û²»Ò»¶¨ÕýÈ·£»Available
Expressions±íʾ´ÓEntryµ½µãpµÄÿһÌõ·¾¶¶¼¾¹ýÁ˸ñí´ïʽ£¬ÔòΪavailable£¬½á¹û¿Ï¶¨ÕýÈ·¡£
|