• WEi's avatar
    new · 3e45aa1b
    WEi authored
    3e45aa1b
domFrontierPass.h 968 bytes
#ifndef DOMFRONTIERPASS_H
#define DOMFRONTIERPASS_H
#include"ir.h"
#include"domPass.h"
#include<set>
#include<map>
class DomFrontierPass
public:
	std::map<irBlock*, std::set<irBlock*>*>* domFrontier = new std::map<irBlock*, std::set<irBlock*>*>;
	DomFrontierPass(Meth* meth, DomPass* dom)
		for (irBlock* block : *(meth->blocks))
			domFrontier->insert(std::make_pair(block, new std::set<irBlock*>()));
		for (irBlock* block : *(meth->blocks))
			if (block->incoming->size() < 2) continue;
			irBlock* topIdom = dom->getIdom(block);
			for (irBlock* predecessor : *(block->incoming))
				irBlock* runner = predecessor;
				while (runner != topIdom)
					domFrontier->find(runner)->second->insert(block);
					runner = dom->getIdom(runner);
	std::set<irBlock*>* getDomFrontier(irBlock* block)
		if (domFrontier->find(block) == domFrontier->end()) return nullptr;
		else return (domFrontier->find(block)->second);
#endif