Лекция 02. Построение множеств Input и Output (1157460), страница 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 Уравнения потока данных Пример(1)в блоке B2 переменные i и j используются до ихпереопределения, следовательно,useB2 {i, B1 , i, B4 , j, B1 } (1100001)(2)EntryB1в блоке B2 определяются новые значения переменныхi и j, так чтоdef B2 {i, B2 , j, B2 } (0001100)B2B3B1i –, m, 1j na u1B2i +, i, 1j -, j, 1 aB3a u2B4i u3B4Exit392.4 Живые переменные2.4.3 Уравнения потока данныхУравнения, связывающие def и use с неизвестными In и Out,определяются следующим образом:In[ B] useB (Out[ B] def B )Out[ B] In[S ]SSucc( B )К ним добавляется граничное условиеIn [Exit] = 402.4 Живые переменные2.4.4 Итеративный алгоритм анализа живых переменных Алгоритм «Живые переменные»Вход: граф потока, в котором для каждого блока В вычисленымножества def и useВыход: множества переменных, живых на входе (In[В]) и выходе(Out[В]) каждого базового блока В графа потока.Метод: выполнить следующую программу:411) In[Exit] = ;2) change = true;3) /*установка начального значения множества In*/4)for (каждый базовый блок B, отличный от Exit)In[B] = ;5) /* основной цикл*/6)while (change) do {7)change = false;8)for (каждый базовый блок B, отличный от Exit) {9)/* вычисление новых значений множествIn[B],Out[B] */In[ B] In[ S ]10)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.