Тема 02(2016)Построение множеств Input и Output (1161797), страница 2
Текст из файла (страница 2)
ОпределениеЦель анализа – для определения переменной x в точке p программывыяснить, будет ли указанное значение x использоваться вдолькакого-нибудь пути, начинающегося в точке p.Если да – переменная x жива (активна) в точке p,если нет – переменная x мертва (неактивна) в точке p.372.4 Живые переменные2.4.3 Уравнения потока данныхInLV[B] – множество переменных, живых на входе в блок BOutLV [B] – множество переменных, живых на выходе из блока B .defB – множество переменных, определяемых в блоке В до ихиспользования в этом блоке(любая переменная из defB мертва на входе в блок В)useB – множество переменных, используемых в блоке В до ихопределения в этом блоке(любая переменная из useB жива на входе в блок В)Замечание.
В анализе живых переменных рассматриваются неопределения переменных, а сами переменные.382.4 Живые переменные2.4.3 Уравнения потока данныхB1i –, m, 1j na u1B2i +, i, 1j -, j, 1B3a u2B4i u3 Пример(1)EntryB1B2в блоке B2 переменные i и j используются до ихпереопределения, следовательно,useB2 {i, j} (1100000)(2) в блоке B2 определяются новые значенияпеременных i и j, так чтоdef B2 {i, j} (1100000)B3B4Exit392.4 Живые переменные2.4.3 Уравнения потока данныхУравнения, связывающие def и use с неизвестными In и Out,определяются следующим образом:In[ B] useB (Out[ B] def B )Out[ B] In[S ]SSucc( B )К ним добавляется граничное условиеЗамечание. Если значение In, определяемое первым уравнениемIn [Exit] = подставить во второе уравнение, множества In будут исключены изсистемы уравнений и получится система уравнений, содержащая вкачестве неизвестных только множества Out:Out[ B] In[ S ] useS (Out[ S ] def S ) SSucc ( B )402.4 Живые переменные2.4.4 Итеративный алгоритм анализа живых переменных Алгоритм «Живые переменные»Вход: ГПУ, в котором для каждого блока В вычислены множества defи useВыход: множества переменных, живых на входе (In[В]) и выходе(Out[В]) каждого базового блока В графа потока.Метод: выполнить следующую программу:411) In[Exit] = ;2) change = true;3) /*установка начального значения4)for (каждый базовый блок B,In[B] = ;5) /*основной цикл*/6)while (change) do {7)change = false;8)for (каждый базовый блок9)/* вычисление новыхIn[B],Out[B] */10)Out[ B] In[ S ]множества In*/отличный от Exit)B, отличный от Exit) {значений множествSSucc ( B )InNew[ B] useB (Out[ B] def B )11)12)13)14)15)16)17)if (InNew[B] In[B] ){In[B] = InNew[B] ;change = true;}}}422.4 Живые переменные2.4.5 МножестваOutput для базовых блоковМножество Output[B] для базового блока B – это множество OutLV[B],которое строится при исследовании живых переменных43.