[backend] introduced rv32 backend

This commit is contained in:
lixuanwang
2025-06-21 17:26:50 +08:00
parent 5727d3bde5
commit 232ed6d023
9 changed files with 244 additions and 1726 deletions

View File

@@ -9,7 +9,6 @@ using namespace antlr4;
#include "ASTPrinter.h"
#include "Backend.h"
#include "SysYIRGenerator.h"
#include "LLVMIRGenerator.h"
using namespace sysy;
static string argStopAfter;
@@ -78,26 +77,22 @@ int main(int argc, char **argv) {
}
// visit AST to generate IR
SysYIRGenerator generator;
generator.visitCompUnit(moduleAST);
if (argStopAfter == "ir") {
SysYIRGenerator generator;
generator.visitCompUnit(moduleAST);
auto moduleIR = generator.get();
moduleIR->print(cout);
return EXIT_SUCCESS;
} else if (argStopAfter == "llvmir") {
LLVMIRGenerator llvmirGenerator;
llvmirGenerator.generateIR(moduleAST); // 使用公共接口生成 IR
cout << llvmirGenerator.getIR();
return EXIT_SUCCESS;
}
// // generate assembly
// CodeGen codegen(moduleIR);
// string asmCode = codegen.code_gen();
// cout << asmCode << endl;
// if (argStopAfter == "asm")
// return EXIT_SUCCESS;
// generate assembly
RISCv32CodeGen codegen(moduleIR);
string asmCode = codegen.code_gen();
cout << asmCode << endl;
if (argStopAfter == "asm")
return EXIT_SUCCESS;
return EXIT_SUCCESS;
}