diff --git a/frontend/CMakeLists.txt b/frontend/CMakeLists.txt
index 5101dd263e0f5d12fce2d02ff7e819e6b39ac438..8c5e6212ae3e09cf2ab56d2fb1515f7366f1d544 100644
--- a/frontend/CMakeLists.txt
+++ b/frontend/CMakeLists.txt
@@ -3,8 +3,6 @@ cmake_minimum_required(VERSION 2.8)
 
 # 设置 C++ 标准
 set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,stack-size=33554432")
-
 
 # 将前端的代码编译成静态库
 file(GLOB_RECURSE ANTLR4_RUNTIME ${CMAKE_SOURCE_DIR}/dependencies/antlr4-runtime/*.cpp)
diff --git a/frontend/include/IRStatement.h b/frontend/include/IRStatement.h
index b33e10e1b9ead669a6f0687479f806729d8808d6..b4362de8912978d44f57d93935e7eda6661db115 100644
--- a/frontend/include/IRStatement.h
+++ b/frontend/include/IRStatement.h
@@ -17,6 +17,7 @@
 namespace SCNUCC {
 
 class IRStatement {
+  friend class AsmGenerator;
 public:
   /**
    * 构造函数
@@ -196,8 +197,8 @@ private:
  * %3 = alloca i32
  */
 class AllocaIR : public IRStatement {
-public:
   friend class AsmGenerator;
+public:
   AllocaIR(IRTYPE::IRTYPE type);
 
   auto ToSSA() const -> std::string override;
@@ -208,8 +209,8 @@ public:
  * %3 = load i32* %2
  */
 class LordIR : public IRStatement {
-public:
   friend class AsmGenerator;
+public:
   LordIR(IRTYPE::IRTYPE type);
 
   auto ToSSA() const -> std::string override;
@@ -220,8 +221,8 @@ public:
  * store i32 %1, i32* %2
  */
 class StoreIR : public IRStatement {
-public:
   friend class AsmGenerator;
+public:
 
   StoreIR(IRTYPE::IRTYPE type);
 
@@ -236,6 +237,7 @@ private:
  * phi语句的IR语句。phi语句用于处理分支语句的合并
  */
 class PhiIR : public IRStatement {
+  friend class AsmGenerator;
 public:
   PhiIR(IRTYPE::IRTYPE type);
 
@@ -243,8 +245,8 @@ public:
 
   auto AddUser(std::shared_ptr<PhiIR> user) -> void;
 
-  auto GetUsers() -> std::vector<std::shared_ptr<PhiIR>>; 
-  
+  auto GetUsers() -> std::vector<std::shared_ptr<PhiIR>>;
+
   /**
    * 调整GenPhiForCond的默认的I1,根据操作数的返回值来确定Phi的IRTYPE
   */
@@ -274,7 +276,7 @@ private:
    * 4. 传入的每一个参数:使用父类成员oprnds_ 存放参数
    * 5. 函数名:使用 string
   */
-  std::string func_name_; 
+  std::string func_name_;
   std::vector<Type> params_type_;
 };
 
@@ -383,7 +385,7 @@ class LogicIR: public IRStatement {
 public:
 
   LogicIR(IRTYPE::IRTYPE type);
-  
+
   auto ToSSA() const -> std::string override;
 };
 
@@ -449,9 +451,9 @@ private:
 class GEPIR : public IRStatement {
 public:
   GEPIR(IRTYPE::IRTYPE type, std::shared_ptr<VarSymbol> symbol, std::vector<std::shared_ptr<IRStatement>> indices);
-  
+
   auto ToSSA() const -> std::string override;
-  
+
   auto IsValue() const -> int;
 private:
   friend class AsmGenerator;
diff --git a/frontend/include/MyVisitor.h b/frontend/include/MyVisitor.h
index 3fbb2274b10453b835ceb728d938023fa29cc746..0f78ee4a43a7fb1d2f6ce8044533edfb2184d722 100644
--- a/frontend/include/MyVisitor.h
+++ b/frontend/include/MyVisitor.h
@@ -221,7 +221,10 @@ public:
 
   void SyLibInit();  // 初始化运行时静态库函数
 
+  auto GetCFGS() -> std::vector<std::shared_ptr<ControlFlowGraph>>;
+
 private:
+  friend class AsmGenerator;
   std::shared_ptr<SymbolTable> sym_table_;
   std::vector<std::shared_ptr<ControlFlowGraph>> cfgs_;
   std::map<std::string, IRPtr> gbl_vars;
diff --git a/frontend/src/MyVisitor.cpp b/frontend/src/MyVisitor.cpp
index 7be82dde873d2776e64da232c0d5341828118f2f..b8ac36671f6ac5522eafabdcb6a61f3718e215a5 100644
--- a/frontend/src/MyVisitor.cpp
+++ b/frontend/src/MyVisitor.cpp
@@ -1009,8 +1009,10 @@ void MyVisitor::SyLibInit() {
             }
         )
     );
+}
 
-
+auto MyVisitor::GetCFGS() -> std::vector<std::shared_ptr<ControlFlowGraph>> {
+  return cfgs_;
 }
 
 }  // namespace SCNUCC
\ No newline at end of file