set up structure for opt

This commit is contained in:
2024-10-17 14:25:21 +00:00
parent cafd3ccdac
commit 84c92dac81
9 changed files with 182 additions and 8 deletions

31
include/opt/cfg.h Normal file
View File

@ -0,0 +1,31 @@
#pragma once
#include <deque>
#include <list>
#include <memory>
#include <unordered_map>
#include <vector>
#include "IR/IR_basic.h"
using CFGNodeCollection = std::list<class CFGNodeType *>;
class CFGNodeType {
public:
std::vector<CFGNodeType *> successors, predecessors;
BlockItem *corresponding_block;
CFGNodeCollection dom;
CFGNodeType *idom;
std::vector<CFGNodeType *> successors_in_dom_tree;
CFGNodeCollection dom_frontier;
};
class CFGType {
public:
std::vector<std::shared_ptr<CFGNodeType>> nodes;
CFGNodeType *entry;
std::unordered_map<BlockItem *, CFGNodeType *> block_to_node;
std::unordered_map<std::string, BlockItem *> label_to_block;
};
CFGNodeCollection GetCFGNodeCollectionsIntersection(const CFGNodeCollection &a, const CFGNodeCollection &b);
CFGNodeCollection GetCFGNodeCollectionsUnion(const CFGNodeCollection &a, const CFGNodeCollection &b);
CFGNodeCollection GetCFGNodeCollectionsDifference(const CFGNodeCollection &a, const CFGNodeCollection &b);
CFGType BuildCFGForFunction(const std::shared_ptr<FunctionDefItem> &func);

4
include/opt/mem2reg.h Normal file
View File

@ -0,0 +1,4 @@
#pragma once
#include "IR/IR_basic.h"
std::shared_ptr<ModuleItem> Mem2Reg(std::shared_ptr<ModuleItem> src);

2
include/opt/opt.h Normal file
View File

@ -0,0 +1,2 @@
#include "mem2reg.h"
#include "cfg.h"