Commit 2f5d0fa7 authored by 张栋澈's avatar 张栋澈 🤡

[Lab4.1] Publish

parent 45c9bd9c
......@@ -48,6 +48,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_BINARY_DIR})
include_directories(include/lightir)
include_directories(include/optimization)
add_subdirectory(src)
add_subdirectory(tests)
......@@ -49,7 +49,7 @@ class BasicBlock : public Value, public llvm::ilist_node<BasicBlock> {
void add_instr_begin(Instruction *instr);
void delete_instr(Instruction *instr);
void erase_instr(Instruction *instr);
bool empty() { return instr_list_.empty(); }
int get_num_of_instr() { return instr_list_.size(); }
......@@ -60,6 +60,7 @@ class BasicBlock : public Value, public llvm::ilist_node<BasicBlock> {
virtual std::string print() override;
private:
BasicBlock(const BasicBlock &) = delete;
explicit BasicBlock(Module *m, const std::string &name, Function *parent);
std::list<BasicBlock *> pre_bbs_;
std::list<BasicBlock *> succ_bbs_;
......
......@@ -20,6 +20,7 @@ class FunctionType;
class Function : public Value, public llvm::ilist_node<Function> {
public:
Function(const Function &) = delete;
Function(FunctionType *ty, const std::string &name, Module *parent);
virtual ~Function();
static Function *create(FunctionType *ty, const std::string &name, Module *parent);
......
......@@ -17,6 +17,7 @@ class GlobalVariable : public User, public llvm::ilist_node<GlobalVariable> {
GlobalVariable(std::string name, Module *m, Type *ty, bool is_const, Constant *init = nullptr);
public:
GlobalVariable(const GlobalVariable &) = delete;
static GlobalVariable *create(std::string name, Module *m, Type *ty, bool is_const, Constant *init);
virtual ~GlobalVariable() = default;
Constant *get_init() { return init_val_; }
......
......@@ -45,6 +45,7 @@ class Instruction : public User, public llvm::ilist_node<Instruction> {
// ty here is result type
Instruction(Type *ty, OpID id, unsigned num_ops, BasicBlock *parent);
Instruction(Type *ty, OpID id, unsigned num_ops);
Instruction(const Instruction &) = delete;
virtual ~Instruction() = default;
inline const BasicBlock *get_parent() const { return parent_; }
inline BasicBlock *get_parent() { return parent_; }
......
......@@ -9,6 +9,7 @@ target_link_libraries(
IR_lib
common
syntax
OP_lib
)
install(
......
......@@ -22,6 +22,10 @@ void BasicBlock::delete_instr(Instruction *instr) {
instr_list_.remove(instr);
instr->remove_use_of_ops();
}
void BasicBlock::erase_instr(Instruction *instr) {
instr->remove_use_of_ops();
instr_list_.erase(instr);
}
const Instruction *BasicBlock::get_terminator() const {
if (instr_list_.empty()) {
......
......@@ -114,7 +114,8 @@ IntegerType *IntegerType::get(unsigned num_bits, Module *m) {
} else if (num_bits == 32) {
return m->get_int32_type();
} else {
assert("IntegerType::get has error num_bits");
assert(false and "IntegerType::get has error num_bits");
return nullptr;
}
}
......
......@@ -17,6 +17,7 @@ void Value::replace_all_use_with(Value *new_val) {
assert(val && "new_val is not a user");
val->set_operand(use.arg_no_, new_val);
}
use_list_.clear();
}
void Value::remove_use(Value *val) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment