Функция fillpreds — различия между версиями

Материал из Compilers Wiki
Перейти к: навигация, поиск
(Новая страница: «Функция <strong>fillpreds(Fn)</strong> - функция, реализованная в Си интерфейсе QBE. Р…»)
 
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
Функция <strong>fillpreds(Fn)</strong> - функция, реализованная в [[Си интерфейс | Си интерфейсе]] [[QBE]]. Располагается в файле <code>cfg.c</code> и "подключается" в <code>[[ all.h | all.h]]</code>.
+
Функция <strong>fillpreds(Fn)</strong> - функция, реализованная в [[Си-интерфейс | Си интерфейсе]] [[QBE]]. Располагается в файле <code>cfg.c</code> и "подключается" в <code>[[ Си-интерфейс | all.h]]</code>.
  
 
== Назначение ==
 
== Назначение ==
Строка 6: Строка 6:
 
== Исходный код ==
 
== Исходный код ==
 
Функция <strong>fillpreds</strong> из <code>cfg.c</code>
 
Функция <strong>fillpreds</strong> из <code>cfg.c</code>
/* fill predecessors information in blocks */
+
/* fill predecessors information in blocks */
void fillpreds(Fn *f) {
+
void fillpreds(Fn *f) {
 
  Blk *b;
 
  Blk *b;
 
  for (b=f->start; b; b=b->link) {
 
  for (b=f->start; b; b=b->link) {

Текущая версия на 15:09, 6 апреля 2018

Функция fillpreds(Fn) - функция, реализованная в Си интерфейсе QBE. Располагается в файле cfg.c и "подключается" в all.h.

Назначение[править]

fillpreds осуществляет заполнение полей pred, npred, visit во всех блоках функции.

Исходный код[править]

Функция fillpreds из cfg.c

/* fill predecessors information in blocks */
void fillpreds(Fn *f) {
	Blk *b;
	for (b=f->start; b; b=b->link) {
		b->npred = 0;
		b->pred = 0;
	}
	for (b=f->start; b; b=b->link) {
		if (b->s1)
			b->s1->npred++;
		if (b->s2 && b->s2 != b->s1)
			b->s2->npred++;
	}
	for (b=f->start; b; b=b->link) {
		if (b->s1)
			addpred(b, b->s1);
		if (b->s2 && b->s2 != b->s1)
			addpred(b, b->s2);
	}
}