Commit 2f5d0fa7 authored by 张栋澈's avatar 张栋澈 :clown:

[Lab4.1] Publish

parent 45c9bd9c
...@@ -48,6 +48,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) ...@@ -48,6 +48,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
include_directories(${PROJECT_SOURCE_DIR}) include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_BINARY_DIR}) include_directories(${PROJECT_BINARY_DIR})
include_directories(include/lightir) include_directories(include/lightir)
include_directories(include/optimization)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(tests) add_subdirectory(tests)
...@@ -49,7 +49,7 @@ class BasicBlock : public Value, public llvm::ilist_node<BasicBlock> { ...@@ -49,7 +49,7 @@ class BasicBlock : public Value, public llvm::ilist_node<BasicBlock> {
void add_instr_begin(Instruction *instr); void add_instr_begin(Instruction *instr);
void delete_instr(Instruction *instr); void delete_instr(Instruction *instr);
void erase_instr(Instruction *instr);
bool empty() { return instr_list_.empty(); } bool empty() { return instr_list_.empty(); }
int get_num_of_instr() { return instr_list_.size(); } int get_num_of_instr() { return instr_list_.size(); }
...@@ -60,6 +60,7 @@ class BasicBlock : public Value, public llvm::ilist_node<BasicBlock> { ...@@ -60,6 +60,7 @@ class BasicBlock : public Value, public llvm::ilist_node<BasicBlock> {
virtual std::string print() override; virtual std::string print() override;
private: private:
BasicBlock(const BasicBlock &) = delete;
explicit BasicBlock(Module *m, const std::string &name, Function *parent); explicit BasicBlock(Module *m, const std::string &name, Function *parent);
std::list<BasicBlock *> pre_bbs_; std::list<BasicBlock *> pre_bbs_;
std::list<BasicBlock *> succ_bbs_; std::list<BasicBlock *> succ_bbs_;
......
...@@ -20,6 +20,7 @@ class FunctionType; ...@@ -20,6 +20,7 @@ class FunctionType;
class Function : public Value, public llvm::ilist_node<Function> { class Function : public Value, public llvm::ilist_node<Function> {
public: public:
Function(const Function &) = delete;
Function(FunctionType *ty, const std::string &name, Module *parent); Function(FunctionType *ty, const std::string &name, Module *parent);
virtual ~Function(); virtual ~Function();
static Function *create(FunctionType *ty, const std::string &name, Module *parent); static Function *create(FunctionType *ty, const std::string &name, Module *parent);
......
...@@ -17,6 +17,7 @@ class GlobalVariable : public User, public llvm::ilist_node<GlobalVariable> { ...@@ -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); GlobalVariable(std::string name, Module *m, Type *ty, bool is_const, Constant *init = nullptr);
public: public:
GlobalVariable(const GlobalVariable &) = delete;
static GlobalVariable *create(std::string name, Module *m, Type *ty, bool is_const, Constant *init); static GlobalVariable *create(std::string name, Module *m, Type *ty, bool is_const, Constant *init);
virtual ~GlobalVariable() = default; virtual ~GlobalVariable() = default;
Constant *get_init() { return init_val_; } Constant *get_init() { return init_val_; }
......
...@@ -45,6 +45,7 @@ class Instruction : public User, public llvm::ilist_node<Instruction> { ...@@ -45,6 +45,7 @@ class Instruction : public User, public llvm::ilist_node<Instruction> {
// ty here is result type // ty here is result type
Instruction(Type *ty, OpID id, unsigned num_ops, BasicBlock *parent); Instruction(Type *ty, OpID id, unsigned num_ops, BasicBlock *parent);
Instruction(Type *ty, OpID id, unsigned num_ops); Instruction(Type *ty, OpID id, unsigned num_ops);
Instruction(const Instruction &) = delete;
virtual ~Instruction() = default; virtual ~Instruction() = default;
inline const BasicBlock *get_parent() const { return parent_; } inline const BasicBlock *get_parent() const { return parent_; }
inline BasicBlock *get_parent() { return parent_; } inline BasicBlock *get_parent() { return parent_; }
......
...@@ -9,6 +9,7 @@ target_link_libraries( ...@@ -9,6 +9,7 @@ target_link_libraries(
IR_lib IR_lib
common common
syntax syntax
OP_lib
) )
install( install(
......
...@@ -22,6 +22,10 @@ void BasicBlock::delete_instr(Instruction *instr) { ...@@ -22,6 +22,10 @@ void BasicBlock::delete_instr(Instruction *instr) {
instr_list_.remove(instr); instr_list_.remove(instr);
instr->remove_use_of_ops(); 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 { const Instruction *BasicBlock::get_terminator() const {
if (instr_list_.empty()) { if (instr_list_.empty()) {
......
...@@ -114,7 +114,8 @@ IntegerType *IntegerType::get(unsigned num_bits, Module *m) { ...@@ -114,7 +114,8 @@ IntegerType *IntegerType::get(unsigned num_bits, Module *m) {
} else if (num_bits == 32) { } else if (num_bits == 32) {
return m->get_int32_type(); return m->get_int32_type();
} else { } 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) { ...@@ -17,6 +17,7 @@ void Value::replace_all_use_with(Value *new_val) {
assert(val && "new_val is not a user"); assert(val && "new_val is not a user");
val->set_operand(use.arg_no_, new_val); val->set_operand(use.arg_no_, new_val);
} }
use_list_.clear();
} }
void Value::remove_use(Value *val) { 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