jak-project/decompiler/IR2/reg_usage.h
water111 1071ff6003
[Decompiler] WIP Conversion to SSA and variable naming (#195)
* begin ssa algorithm

* ssa based splitting appears to work

* add merge pass

* finish basic implementation

* better output

* bug fix
2021-01-16 10:54:09 -05:00

32 lines
642 B
C++

#pragma once
#include <vector>
#include <unordered_set>
#include "decompiler/Disasm/Register.h"
namespace decompiler {
class Function;
using RegSet = std::unordered_set<Register, Register::hash>;
struct RegUsageInfo {
struct PerBlock {
RegSet use, defs, input, output;
};
struct PerOp {
RegSet live, dead, consumes, written_and_unused;
};
int block_count() const { return int(block.size()); }
std::vector<PerBlock> block;
std::vector<PerOp> op;
RegUsageInfo() = default;
RegUsageInfo(int n_blocks, int n_ops);
};
RegUsageInfo analyze_ir2_register_usage(const Function& function);
} // namespace decompiler