2014-12-04 53 views
0

從基本塊的控制流程圖中獲得「自然循環」後。這些循環如何從最內層到最外層排序?即最內層循環不包含其他循環嗎?反編譯器循環嵌套順序和代碼gen ordering

我獲得使用支配方法的循環,見標題爲幻燈片「識別與支配者自然循環」在這裏:http://www.cs.colostate.edu/~mstrout/CS553Fall07/Slides/lecture15-control.pdf

此外應該使用什麼算法來遍歷所述控制流圖,使得寫出每個節點將產生正確的輸出代碼?

回答

2

在結構良好的程序中(即沒有gotos),循環的開始必須支配循環的內容。

每個有傳入備份的節點都必須是循環的頭部。但是,由於能夠指定明確的continue s,因此您對實際循環內容有一定的自由度。必須在循環中的最小節點集合是所有具有與頭部相反的塊以及從它們可反向到達並由頭部支配的所有塊。當然,可以在循環中的最大節點集合當然只是由頭部支配的所有節點。

嵌套由一個循環的頭部是否在另一個循環的內容中確定。在某些情況下,您可以自由決定是否將循環放置在外部循環內部。

+0

「嵌套由一個循環的頭部是否在另一個循環的內容中決定」但是如果我們有3個嵌套循環A,B和C,如果我們檢查A,我們會發現它包含B和C,但是正確的順序是A只包含B,C只包含C? – paulm 2014-12-05 08:31:49

+0

@paulm你的意思是正確的順序是什麼? – Antimony 2014-12-05 16:16:57

+0

如果算法說,如果它的頭塊在我的基本塊內,將任何循環添加爲嵌套循環,那麼B C將顯示爲A的子元素,因爲它們的頭在A內?但是C的頭也在B內,所以C應該是B的孩子,而不是A的孩子? – paulm 2014-12-05 16:58:06