From edb88a811196ea0c773f77a80d03f2a15de8aad7 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Tue, 22 Oct 2024 14:27:40 +0000 Subject: [PATCH] a better trial --- CMakeLists.txt | 14 +- a.txt | 425 -------------------------------- include/opt/cfg.h | 2 +- include/tools.h | 1 + src/IR/CMakeLists.txt | 2 +- src/IR/IRBuilder.cpp | 1 + src/ast/CMakeLists.txt | 2 +- src/main.cpp | 6 +- src/naivebackend/CMakeLists.txt | 2 +- src/opt/CMakeLists.txt | 2 +- src/opt/cfg.cpp | 33 ++- src/opt/confgraph.cpp | 5 +- src/opt/mem2reg.cpp | 2 +- src/opt/regalloc.cpp | 2 +- src/semantic/CMakeLists.txt | 4 +- 15 files changed, 58 insertions(+), 445 deletions(-) delete mode 100644 a.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index ea44928..d391a11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,13 +36,13 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") endif() include(FetchContent) -FetchContent_Declare( - googletest - URL_HASH SHA256=1f357c27ca988c3f7c6b4bf68a9395005ac6761f034046e9dde0896e3aba00e4 - URL ${CMAKE_SOURCE_DIR}/deps/googletest-v1.14.0-mirror.zip -) -FetchContent_MakeAvailable(googletest) -include(GoogleTest) +# FetchContent_Declare( +# googletest +# URL_HASH SHA256=1f357c27ca988c3f7c6b4bf68a9395005ac6761f034046e9dde0896e3aba00e4 +# URL ${CMAKE_SOURCE_DIR}/deps/googletest-v1.14.0-mirror.zip +# ) +# FetchContent_MakeAvailable(googletest) +# include(GoogleTest) FetchContent_Declare( argparse URL_HASH SHA256=cd07c1208c01bef28c5173f4bad0b2df73dd7316d2f56fc80344952c400fa711 diff --git a/a.txt b/a.txt deleted file mode 100644 index b58ccf9..0000000 --- a/a.txt +++ /dev/null @@ -1,425 +0,0 @@ - return_type_str=int - recorded return type is [none-array]int - func_name=partition - recorded parameter type is [array]int with dimensions=1 - recorded parameter name is a - recorded parameter type is [none-array]int - recorded parameter name is p - recorded parameter type is [none-array]int - recorded parameter name is r - Adding suite statements - Adding a definition statement - recorded variable type is [none-array]int - Adding a definition statement - recorded variable type is [none-array]int - Adding a definition statement - recorded variable type is [none-array]int - Adding a for statement - initial is an expression statement - condition is an expression - update is an expression statement - Adding suite statements - Adding an if statement - Adding suite statements - Adding an expression statement - Adding a definition statement - recorded variable type is [none-array]int - Adding an expression statement - Adding an expression statement - Adding a definition statement - recorded variable type is [none-array]int - Adding an expression statement - Adding an expression statement - Adding a jmp statement - return_type_str=void - recorded return type is [none-array]void - func_name=quick_sort - recorded parameter type is [array]int with dimensions=1 - recorded parameter name is a - recorded parameter type is [none-array]int - recorded parameter name is p - recorded parameter type is [none-array]int - recorded parameter name is r - Adding suite statements - Adding an if statement - Adding a jmp statement - Adding a definition statement - recorded variable type is [none-array]int - Adding an expression statement - Adding an expression statement - return_type_str=void - recorded return type is [none-array]void - func_name=quick_sort_inf - recorded parameter type is [array]int with dimensions=1 - recorded parameter name is a - Adding suite statements - Adding an expression statement - return_type_str=int - recorded return type is [none-array]int - func_name=main - Adding suite statements - Adding a definition statement - recorded variable type is [none-array]int - Adding a definition statement - recorded variable type is [array]int with dimensions=1 - Adding a new array expression - dim 0 has size - Adding a definition statement - recorded variable type is [none-array]int - Adding a for statement - initial is an expression statement - condition is an expression - update is an expression statement - Adding an expression statement - Adding an expression statement - Adding a for statement - initial is an expression statement - condition is an expression - update is an expression statement - Adding an expression statement - Adding an expression statement - Adding a jmp statement -enter function partition -visit definition statement -visit definition statement -visit definition statement -visit definition statement -visit definition statement -leave function partition -enter function quick_sort -visit definition statement -function to call is partition -function to call is quick_sort -function to call is quick_sort -leave function quick_sort -enter function quick_sort_inf -function to call is quick_sort -leave function quick_sort_inf -enter function main -visit definition statement -function to call is getInt -visit definition statement -visit definition statement -function to call is getInt -function to call is quick_sort_inf -function to call is print -function to call is toString -function to call is println -leave function main -label_init_partition: - dom: label_init_partition - dom_frontier: - cfg pred: - successors_in_dom_tree: label_0 -label_0: - dom: label_init_partition label_0 - idom: label_init_partition - dom_frontier: - cfg pred: label_init_partition - successors_in_dom_tree: label_1 -label_1: - dom: label_init_partition label_0 label_1 - idom: label_0 - dom_frontier: label_1 - cfg pred: label_0 label_3 - successors_in_dom_tree: label_2 label_4 -label_2: - dom: label_init_partition label_0 label_1 label_2 - idom: label_1 - dom_frontier: label_1 - cfg pred: label_1 - successors_in_dom_tree: label_5 label_6 -label_5: - dom: label_init_partition label_0 label_1 label_2 label_5 - idom: label_2 - dom_frontier: label_6 - cfg pred: label_2 - successors_in_dom_tree: -label_6: - dom: label_init_partition label_0 label_1 label_2 label_6 - idom: label_2 - dom_frontier: label_1 - cfg pred: label_2 label_5 - successors_in_dom_tree: label_3 -label_3: - dom: label_init_partition label_0 label_1 label_2 label_6 label_3 - idom: label_6 - dom_frontier: label_1 - cfg pred: label_6 - successors_in_dom_tree: -label_4: - dom: label_init_partition label_0 label_1 label_4 - idom: label_1 - dom_frontier: - cfg pred: label_1 - successors_in_dom_tree: -label_init_quick_sort: - dom: label_init_quick_sort - dom_frontier: - cfg pred: - successors_in_dom_tree: label_7 -label_7: - dom: label_init_quick_sort label_7 - idom: label_init_quick_sort - dom_frontier: - cfg pred: label_init_quick_sort - successors_in_dom_tree: label_8 label_9 -label_8: - dom: label_init_quick_sort label_7 label_8 - idom: label_7 - dom_frontier: - cfg pred: label_7 - successors_in_dom_tree: -label_9: - dom: label_init_quick_sort label_7 label_9 - idom: label_7 - dom_frontier: - cfg pred: label_7 - successors_in_dom_tree: -label_init_quick_sort_inf: - dom: label_init_quick_sort_inf - dom_frontier: - cfg pred: - successors_in_dom_tree: label_10 -label_10: - dom: label_init_quick_sort_inf label_10 - idom: label_init_quick_sort_inf - dom_frontier: - cfg pred: label_init_quick_sort_inf - successors_in_dom_tree: -main_init: - dom: main_init - dom_frontier: - cfg pred: - successors_in_dom_tree: label_11 -label_11: - dom: main_init label_11 - idom: main_init - dom_frontier: - cfg pred: main_init - successors_in_dom_tree: label_12 -label_12: - dom: main_init label_11 label_12 - idom: label_11 - dom_frontier: label_12 - cfg pred: label_11 label_14 - successors_in_dom_tree: label_13 label_15 -label_13: - dom: main_init label_11 label_12 label_13 - idom: label_12 - dom_frontier: label_12 - cfg pred: label_12 - successors_in_dom_tree: label_14 -label_14: - dom: main_init label_11 label_12 label_13 label_14 - idom: label_13 - dom_frontier: label_12 - cfg pred: label_13 - successors_in_dom_tree: -label_15: - dom: main_init label_11 label_12 label_15 - idom: label_12 - dom_frontier: - cfg pred: label_12 - successors_in_dom_tree: label_16 -label_16: - dom: main_init label_11 label_12 label_15 label_16 - idom: label_15 - dom_frontier: label_16 - cfg pred: label_15 label_18 - successors_in_dom_tree: label_17 label_19 -label_17: - dom: main_init label_11 label_12 label_15 label_16 label_17 - idom: label_16 - dom_frontier: label_16 - cfg pred: label_16 - successors_in_dom_tree: label_18 -label_18: - dom: main_init label_11 label_12 label_15 label_16 label_17 label_18 - idom: label_17 - dom_frontier: label_16 - cfg pred: label_17 - successors_in_dom_tree: -label_19: - dom: main_init label_11 label_12 label_15 label_16 label_19 - idom: label_16 - dom_frontier: - cfg pred: label_16 - successors_in_dom_tree: -processing function partition -totally allocating 45 nodes -21 -spilled 0 nodes -define i32 @partition(ptr %.var.local.1.a.val,i32 %.var.local.1.p.val,i32 %.var.local.1.r.val) -{ -label_init_partition: -br label %label_0 -label_0: -$reg.17 = getelementptr i32, ptr $reg.10, i32 $reg.12 -$reg.17 = load i32, ptr $reg.17 -$reg.14 = sub i32 $reg.11, 1 -[Persudo] $reg.15 <-- 0 -br label %label_1 -label_1: -$reg.16 = icmp slt i32 $reg.11, $reg.12 -br i1 $reg.16, label %label_2, label %label_4 -label_2: -$reg.16 = getelementptr i32, ptr $reg.10, i32 $reg.11 -$reg.16 = load i32, ptr $reg.16 -$reg.16 = icmp sle i32 $reg.16, $reg.17 -br i1 $reg.16, label %label_5, label %label_6.phieliminate.0 -label_5: -$reg.14 = add i32 $reg.14, 1 -$reg.16 = getelementptr i32, ptr $reg.10, i32 $reg.14 -$reg.15 = load i32, ptr $reg.16 -$reg.13 = getelementptr i32, ptr $reg.10, i32 $reg.14 -$reg.16 = getelementptr i32, ptr $reg.10, i32 $reg.11 -$reg.16 = load i32, ptr $reg.16 -store i32 $reg.16, ptr $reg.13 -$reg.16 = getelementptr i32, ptr $reg.10, i32 $reg.11 -store i32 $reg.15, ptr $reg.16 -br label %label_6 -label_6: -br label %label_3 -label_3: -$reg.11 = add i32 $reg.11, 1 -br label %label_1 -label_4: -$reg.17 = add i32 $reg.14, 1 -$reg.17 = getelementptr i32, ptr $reg.10, i32 $reg.17 -$reg.17 = load i32, ptr $reg.17 -$reg.16 = add i32 $reg.14, 1 -$reg.16 = getelementptr i32, ptr $reg.10, i32 $reg.16 -$reg.15 = getelementptr i32, ptr $reg.10, i32 $reg.12 -$reg.15 = load i32, ptr $reg.15 -store i32 $reg.15, ptr $reg.16 -$reg.16 = getelementptr i32, ptr $reg.10, i32 $reg.12 -store i32 $reg.17, ptr $reg.16 -$reg.10 = add i32 $reg.14, 1 -ret i32 $reg.10 -label_6.phieliminate.0: -br label %label_6 -} -processing function quick_sort -totally allocating 20 nodes -5 -spilled 4 nodes -define void @quick_sort(ptr %.var.local.6.a.val,i32 %.var.local.6.p.val,i32 %.var.local.6.r.val) -{ -label_init_quick_sort: -[Persudo] #0 <-- $reg.12 -[Persudo] #1 <-- $reg.11 -[Persudo] #2 <-- $reg.10 -br label %label_7 -label_7: -$reg.17 = icmp sge i32 #1, #0 -br i1 $reg.17, label %label_8, label %label_9 -label_8: -ret void -label_9: -[Persudo] $reg.10 <-- #2 -[Persudo] $reg.11 <-- #1 -[Persudo] $reg.12 <-- #0 -$reg.10 = call i32 @partition(ptr $reg.10, i32 $reg.11, i32 $reg.12) -[Persudo] #0 <-- $reg.10 -$reg.12 = sub i32 #0, 1 -[Persudo] $reg.10 <-- #2 -[Persudo] $reg.11 <-- #1 -call void @quick_sort(ptr $reg.10, i32 $reg.11, i32 $reg.12) -$reg.11 = add i32 #0, 1 -[Persudo] $reg.10 <-- #2 -[Persudo] $reg.12 <-- #0 -call void @quick_sort(ptr $reg.10, i32 $reg.11, i32 $reg.12) -ret void -} -processing function quick_sort_inf -totally allocating 16 nodes -2 -spilled 2 nodes -define void @quick_sort_inf(ptr %.var.local.8.a.val) -{ -label_init_quick_sort_inf: -[Persudo] #0 <-- $reg.10 -br label %label_10 -label_10: -[Persudo] $reg.10 <-- #0 -$reg.10 = call i32 @.builtin.GetArrayLength(ptr $reg.10) -[Persudo] #0 <-- $reg.10 -$reg.12 = sub i32 #0, 1 -[Persudo] $reg.10 <-- #0 -[Persudo] $reg.11 <-- 0 -call void @quick_sort(ptr $reg.10, i32 $reg.11, i32 $reg.12) -ret void -} -processing function main -totally allocating 29 nodes -19 -spilled 5 nodes -define i32 @main() -{ -main_init: -[Persudo] #0 <-- $reg.20 -[Persudo] #1 <-- $reg.18 -[Persudo] #2 <-- $reg.4 -[Persudo] #3 <-- $reg.3 -$reg.4 = alloca i32 -br label %label_11 -label_11: -$reg.10 = call i32 @getInt() -[Persudo] $reg.3 <-- $reg.10 -$reg.17 = getelementptr i32, ptr $reg.4, i32 0 -store i32 $reg.3, ptr $reg.17 -[Persudo] $reg.10 <-- 1 -[Persudo] $reg.11 <-- 4 -[Persudo] $reg.12 <-- $reg.4 -$reg.10 = call ptr @.builtin.RecursiveAllocateArray(i32 $reg.10, i32 $reg.11, ptr $reg.12) -[Persudo] $reg.4 <-- $reg.10 -[Persudo] $reg.20 <-- 0 -br label %label_12 -label_12: -$reg.17 = icmp slt i32 $reg.20, $reg.3 -br i1 $reg.17, label %label_13, label %label_15 -label_13: -#0 = getelementptr i32, ptr $reg.4, i32 $reg.20 -$reg.10 = call i32 @getInt() -[Persudo] $reg.18 <-- $reg.10 -store i32 $reg.18, ptr #0 -br label %label_14 -label_14: -$reg.17 = add i32 $reg.20, 1 -[Persudo] $reg.20 <-- $reg.17 -br label %label_12 -label_15: -[Persudo] $reg.10 <-- $reg.4 -call void @quick_sort_inf(ptr $reg.10) -[Persudo] $reg.18 <-- 0 -br label %label_16 -label_16: -$reg.17 = icmp slt i32 $reg.18, $reg.3 -br i1 $reg.17, label %label_17, label %label_19 -label_17: -$reg.17 = getelementptr i32, ptr $reg.4, i32 $reg.18 -$reg.10 = load i32, ptr $reg.17 -$reg.10 = call ptr @toString(i32 $reg.10) -[Persudo] $reg.20 <-- $reg.10 -[Persudo] $reg.10 <-- $reg.20 -[Persudo] $reg.11 <-- @.str.2 -$reg.10 = call ptr @.builtin.strcat(ptr $reg.10, ptr $reg.11) -[Persudo] $reg.20 <-- $reg.10 -[Persudo] $reg.10 <-- $reg.20 -call void @print(ptr $reg.10) -br label %label_18 -label_18: -$reg.17 = add i32 $reg.18, 1 -[Persudo] $reg.18 <-- $reg.17 -br label %label_16 -label_19: -[Persudo] $reg.10 <-- @.str.3 -call void @println(ptr $reg.10) -[Persudo] $reg.3 <-- #3 -[Persudo] $reg.4 <-- #2 -[Persudo] $reg.18 <-- #1 -[Persudo] $reg.20 <-- #0 -[Persudo] $reg.10 <-- 0 -ret i32 $reg.10 -} diff --git a/include/opt/cfg.h b/include/opt/cfg.h index 965e0d5..f49807c 100644 --- a/include/opt/cfg.h +++ b/include/opt/cfg.h @@ -158,7 +158,7 @@ bool GetCollectionsIsSame(const Container &a, const Container &b, Compare comp = return ita == a.end() && itb == b.end(); } -CFGType BuildCFGForFunction(const std::shared_ptr &func); +CFGType BuildCFGForFunction(const std::shared_ptr &func, bool remove_poison_entry = false); // RISC-V calling convention compatible const static std::vector held_tmp_regs = {"x28", "x29", "x30", "x31"}; diff --git a/include/tools.h b/include/tools.h index 1be963e..7a615be 100644 --- a/include/tools.h +++ b/include/tools.h @@ -137,6 +137,7 @@ class IRClassInfo { alread_arranged = true; size_t cur_pos = 0; size_t align_size = 1; + class_size_after_align = 0; for (size_t cur_size : member_var_size) { if (cur_size != 1 && cur_size != 4) throw std::runtime_error("Invalid member variable size"); if (cur_pos % cur_size == 0) { diff --git a/src/IR/CMakeLists.txt b/src/IR/CMakeLists.txt index 33ea9b2..27c8378 100644 --- a/src/IR/CMakeLists.txt +++ b/src/IR/CMakeLists.txt @@ -1,5 +1,5 @@ include_directories(${CMAKE_SOURCE_DIR}/include/IR) file(GLOB IR_SOURCES "*.cpp") -add_library(IR STATIC ${IR_SOURCES}) +add_library(IR SHARED ${IR_SOURCES}) target_link_libraries(IR PUBLIC ast) \ No newline at end of file diff --git a/src/IR/IRBuilder.cpp b/src/IR/IRBuilder.cpp index 3d69f87..4373174 100644 --- a/src/IR/IRBuilder.cpp +++ b/src/IR/IRBuilder.cpp @@ -1180,6 +1180,7 @@ void IRBuilder::ActuralVisit(ThisExpr_ASTNode *node) { } void IRBuilder::ActuralVisit(ParenExpr_ASTNode *node) { + node->expr->is_requiring_lvalue = node->is_requiring_lvalue; node->expr->accept(this); // just visit it node->IR_result_full = node->expr->IR_result_full; } diff --git a/src/ast/CMakeLists.txt b/src/ast/CMakeLists.txt index d901faa..6673b6a 100644 --- a/src/ast/CMakeLists.txt +++ b/src/ast/CMakeLists.txt @@ -1,6 +1,6 @@ include_directories(${CMAKE_SOURCE_DIR}/include/ast) file(GLOB AST_SOURCES "*.cpp") -add_library(ast STATIC ${AST_SOURCES}) +add_library(ast SHARED ${AST_SOURCES}) target_include_directories(ast PUBLIC /usr/include/antlr4-runtime/) target_include_directories(ast PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../semantic/antlr-generated) target_link_libraries(ast PUBLIC antlr4-runtime) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 7c24bc2..9d77743 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,11 +45,13 @@ int main(int argc, char **argv) { if (!optimize_all) { GenerateNaiveASM(fout, IR); } else { + // IR->RecursivePrint(std::cerr); auto IR_with_out_allocas = Mem2Reg(IR); - // IR_with_out_allocas->RecursivePrint(fout); + // IR_with_out_allocas->RecursivePrint(std::cerr); auto IR_with_out_phis = PhiEliminate(IR_with_out_allocas); - // IR_with_out_phis->RecursivePrint(fout); + // IR_with_out_phis->RecursivePrint(std::cerr); auto alloced_code = RegAlloc(IR_with_out_phis); + // alloced_code->RecursivePrint(std::cerr); OptBackend::GenerateOptASM(fout, alloced_code); } } catch (const SemanticError &err) { diff --git a/src/naivebackend/CMakeLists.txt b/src/naivebackend/CMakeLists.txt index 096108d..0ce551c 100644 --- a/src/naivebackend/CMakeLists.txt +++ b/src/naivebackend/CMakeLists.txt @@ -1,5 +1,5 @@ include_directories(${CMAKE_SOURCE_DIR}/include/naivebackend) file(GLOB NAIVE_BACKEND_SOURCES "*.cpp") -add_library(naivebackend STATIC ${NAIVE_BACKEND_SOURCES}) +add_library(naivebackend SHARED ${NAIVE_BACKEND_SOURCES}) target_link_libraries(naivebackend PUBLIC ast) \ No newline at end of file diff --git a/src/opt/CMakeLists.txt b/src/opt/CMakeLists.txt index 846e500..afbe494 100644 --- a/src/opt/CMakeLists.txt +++ b/src/opt/CMakeLists.txt @@ -1,5 +1,5 @@ include_directories(${CMAKE_SOURCE_DIR}/include/opt) file(GLOB NAIVE_BACKEND_SOURCES "*.cpp") -add_library(opt STATIC ${NAIVE_BACKEND_SOURCES}) +add_library(opt SHARED ${NAIVE_BACKEND_SOURCES}) target_link_libraries(opt PUBLIC ast) \ No newline at end of file diff --git a/src/opt/cfg.cpp b/src/opt/cfg.cpp index 107f3cc..1ed95f8 100644 --- a/src/opt/cfg.cpp +++ b/src/opt/cfg.cpp @@ -1,7 +1,8 @@ #include "cfg.h" +#include #include -CFGType BuildCFGForFunction(const std::shared_ptr &func) { +CFGType BuildCFGForFunction(const std::shared_ptr &func, bool remove_poison_entry) { CFGType res; if (func->init_block) { res.label_to_block[func->init_block->label_full] = func->init_block.get(); @@ -39,5 +40,35 @@ CFGType BuildCFGForFunction(const std::shared_ptr &func) { } } res.corresponding_func = func.get(); + bool need_rebuild = false; + if (remove_poison_entry) { + auto tmp = func->basic_blocks; + func->basic_blocks.clear(); + std::queue Q; + std::unordered_set visited; + Q.push(res.entry); + visited.insert(res.entry); + while (Q.size() > 0) { + auto cur = Q.front(); + Q.pop(); + for (auto succ : cur->successors) { + if (visited.find(succ) == visited.end()) { + visited.insert(succ); + Q.push(succ); + } + } + } + for (auto block : tmp) { + auto node = res.block_to_node[block.get()]; + if (visited.find(node) == visited.end()) { + need_rebuild = true; + continue; + } + func->basic_blocks.push_back(block); + } + } + if (need_rebuild) { + res = BuildCFGForFunction(func, false); + } return res; } \ No newline at end of file diff --git a/src/opt/confgraph.cpp b/src/opt/confgraph.cpp index fbb0ae3..0f808b0 100644 --- a/src/opt/confgraph.cpp +++ b/src/opt/confgraph.cpp @@ -57,6 +57,8 @@ ConfGraph BuildConfGraph(CFGType &cfg) { if (auto move_act = std::dynamic_pointer_cast(act)) { if (!VRegCheck(move_act->src_full)) continue; if (cfg.var_to_id.find(move_act->src_full) == cfg.var_to_id.end()) { + move_act->src_full = "0"; + continue; move_act->RecursivePrint(std::cerr); std::cerr << std::endl; throw std::runtime_error("move_act->src_full not found in var_to_id"); @@ -457,7 +459,8 @@ bool ConductColoring(std::shared_ptr src, CFGType &cfg, ConfGra size_t round_counter = 0; do { // std::cerr << std::endl << "\n\na new round begins " << ++round_counter << std::endl; - // std::cerr << "confgraph.low_degree_and_not_move_related.size()=" << confgraph.low_degree_and_not_move_related.size() + // std::cerr << "confgraph.low_degree_and_not_move_related.size()=" << + // confgraph.low_degree_and_not_move_related.size() // << std::endl; // std::cerr << "confgraph.pending_moves.size()=" << confgraph.pending_moves.size() << std::endl; // std::cerr << "confgraph.low_degree_and_move_related.size()=" << confgraph.low_degree_and_move_related.size() diff --git a/src/opt/mem2reg.cpp b/src/opt/mem2reg.cpp index 6c3b433..81ab292 100644 --- a/src/opt/mem2reg.cpp +++ b/src/opt/mem2reg.cpp @@ -290,7 +290,7 @@ std::shared_ptr Mem2Reg(std::shared_ptr src) { auto res = src; for (auto &func : res->function_defs) { // func = std::make_shared(*func); - auto cfg = BuildCFGForFunction(func); + auto cfg = BuildCFGForFunction(func, true); ConductMem2RegForFunction(func, cfg); } return res; diff --git a/src/opt/regalloc.cpp b/src/opt/regalloc.cpp index 5fc3436..0640b4f 100644 --- a/src/opt/regalloc.cpp +++ b/src/opt/regalloc.cpp @@ -368,7 +368,7 @@ void ConductRegAllocForFunction(std::shared_ptr func) { } while (ConductColoring(func, cfg, confgraph)); TranslateColorResult(func, cfg, confgraph); RemoveCallingConventionKeeper(func, cfg, confgraph); - func->RecursivePrint(std::cerr); + // func->RecursivePrint(std::cerr); } std::shared_ptr RegAlloc(std::shared_ptr src) { diff --git a/src/semantic/CMakeLists.txt b/src/semantic/CMakeLists.txt index a2630c7..98ec4c8 100644 --- a/src/semantic/CMakeLists.txt +++ b/src/semantic/CMakeLists.txt @@ -2,8 +2,8 @@ include_directories(/usr/include/antlr4-runtime/) include_directories(${CMAKE_SOURCE_DIR}/include/semantic) file(GLOB ANLTR_SOURCES "antlr-generated/*.cpp") file(GLOB SEMANTIC_SOURCES "*.cpp") -add_library(mx-antlr STATIC ${ANLTR_SOURCES}) -add_library(semantic STATIC ${SEMANTIC_SOURCES}) +add_library(mx-antlr SHARED ${ANLTR_SOURCES}) +add_library(semantic SHARED ${SEMANTIC_SOURCES}) target_include_directories(semantic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/antlr-generated) target_include_directories(semantic PUBLIC /usr/include/antlr4-runtime/) target_link_libraries(mx-antlr PUBLIC antlr4-runtime)