[backend]更改了commit顺序

This commit is contained in:
Lixuanwang
2025-08-05 20:57:23 +08:00
parent fdba73d5e1
commit 7be5d25372
4 changed files with 3 additions and 651 deletions

View File

@ -188,13 +188,11 @@ std::string RISCv64CodeGen::module_gen() {
ss << ".text\n";
for (const auto& func_pair : module->getFunctions()) {
if (func_pair.second.get() && !func_pair.second->getBasicBlocks().empty()) {
if (func_pair.second.get()->getName() == "param16") {foo=1; return std::string(AC::riscv_assembly_text);};
ss << function_gen(func_pair.second.get());
if (DEBUG) std::cerr << "Function: " << func_pair.first << " generated.\n";
}
}
}
return ss.str();
}
@ -204,7 +202,6 @@ std::string RISCv64CodeGen::function_gen(Function* func) {
// 阶段 1: 指令选择 (sysy::IR -> LLIR with virtual registers)
RISCv64ISel isel;
std::unique_ptr<MachineFunction> mfunc = isel.runOnFunction(func);
// 第一次调试打印输出
std::stringstream ss_after_isel;
RISCv64AsmPrinter printer_isel(mfunc.get());
@ -241,18 +238,18 @@ std::string RISCv64CodeGen::function_gen(Function* func) {
// 首先尝试图着色分配器
if (DEBUG) std::cerr << "Attempting Register Allocation with Graph Coloring...\n";
if (!foo1) {
if (!gc_failed) {
RISCv64RegAlloc gc_alloc(mfunc.get());
bool success_gc = gc_alloc.run();
if (!success_gc) {
gc_failed = 1; // 后续不再尝试图着色分配器
std::cerr << "Warning: Graph coloring register allocation failed function '"
<< func->getName()
<< "'. Switching to Linear Scan allocator."
<< std::endl;
foo1 = 1;
RISCv64ISel isel_gc_fallback;
mfunc = isel_gc_fallback.runOnFunction(func);
EliminateFrameIndicesPass efi_pass_gc_fallback;

View File

@ -1,644 +0,0 @@
#pragma once // 现代 C++ 中推荐的头文件保护符,防止重复包含
#include <string_view> // 使用 std::string_view 来高效地表示字符串,无需额外内存分配
namespace AC {
// 使用 C++17 的 inline constexpr 变量,可以安全地在头文件中定义
// 这可以确保即使多个 .cpp 文件包含了这个头文件,也不会出现“多重定义”链接错误
// R"ASM(...)ASM" 是原始字符串字面量的语法,括号内的所有内容(包括换行)都会被视为字符串的一部分
inline constexpr std::string_view riscv_assembly_text = R"ASM(
.text
.align 1
.globl sort
.type sort, @function
sort:
.LFB0:
li a5,0
addiw a7,a1,-1
.L2:
bgt a7,a5,.L6
ret
.L6:
addiw a5,a5,1
mv a4,a0
mv a3,a5
.L3:
bne a3,a1,.L5
addi a0,a0,4
j .L2
.L5:
lw a2,0(a0)
lw a6,4(a4)
bge a2,a6,.L4
sw a6,0(a0)
sw a2,4(a4)
.L4:
addiw a3,a3,1
addi a4,a4,4
j .L3
.LFE0:
.size sort, .-sort
.align 1
.globl param32_rec
.type param32_rec, @function
param32_rec:
.LFB1:
addi sp,sp,-160
mv t1,a0
lw a0,272(sp)
sd s0,152(sp)
sd s1,144(sp)
sd a0,8(sp)
lw a0,280(sp)
sd s2,136(sp)
sd s3,128(sp)
sd a0,16(sp)
addi a0,sp,288
lw t3,0(a0)
sd s4,120(sp)
sd s5,112(sp)
sd s6,104(sp)
sd s7,96(sp)
sd s8,88(sp)
sd s9,80(sp)
sd s10,72(sp)
sd s11,64(sp)
lw s10,168(sp)
lw s11,160(sp)
lw s9,176(sp)
lw s8,184(sp)
lw s7,192(sp)
lw s6,200(sp)
lw s5,208(sp)
lw s4,216(sp)
lw s3,224(sp)
lw s2,232(sp)
lw s1,240(sp)
lw s0,248(sp)
lw t2,256(sp)
lw t0,264(sp)
sd t3,24(sp)
lw t3,8(a0)
lw t6,24(a0)
lw t5,32(a0)
sd t3,32(sp)
lw t3,16(a0)
lw t4,40(a0)
sd t3,40(sp)
lw t3,48(a0)
lw a0,56(a0)
sd a0,48(sp)
mv a0,a1
li a1,998244352
addiw a1,a1,1
sw a1,60(sp)
.L9:
beq t1,zero,.L10
ld a1,16(sp)
addw a0,a0,a2
lw a2,60(sp)
addiw t1,t1,-1
remw a0,a0,a2
mv a2,a3
mv a3,a4
mv a4,a5
mv a5,a6
mv a6,a7
mv a7,s11
mv s11,s10
mv s10,s9
mv s9,s8
mv s8,s7
mv s7,s6
mv s6,s5
mv s5,s4
mv s4,s3
mv s3,s2
mv s2,s1
mv s1,s0
mv s0,t2
mv t2,t0
ld t0,8(sp)
sd a1,8(sp)
ld a1,24(sp)
sd a1,16(sp)
ld a1,32(sp)
sd a1,24(sp)
ld a1,40(sp)
sd t6,40(sp)
mv t6,t5
sd a1,32(sp)
mv t5,t4
mv t4,t3
ld t3,48(sp)
sd zero,48(sp)
j .L9
.L10:
ld s0,152(sp)
ld s1,144(sp)
ld s2,136(sp)
ld s3,128(sp)
ld s4,120(sp)
ld s5,112(sp)
ld s6,104(sp)
ld s7,96(sp)
ld s8,88(sp)
ld s9,80(sp)
ld s10,72(sp)
ld s11,64(sp)
addi sp,sp,160
jr ra
.LFE1:
.size param32_rec, .-param32_rec
.align 1
.globl param32_arr
.type param32_arr, @function
param32_arr:
.LFB2:
addi sp,sp,-16
sd s0,8(sp)
lw s0,0(a0)
lw a0,4(a0)
ld t2,104(sp)
ld t0,112(sp)
addw a0,a0,s0
lw s0,0(a1)
lw a1,4(a1)
ld t6,120(sp)
addw a0,s0,a0
addw a0,a1,a0
lw a1,0(a2)
ld t5,176(sp)
ld t4,184(sp)
addw a1,a1,a0
lw a0,4(a2)
lw a2,0(a3)
ld t3,192(sp)
addw a0,a0,a1
addw a2,a2,a0
lw a0,4(a3)
lw a3,0(a4)
ld t1,200(sp)
addw a0,a0,a2
addw a3,a3,a0
lw a0,4(a4)
lw a4,0(a5)
addw a0,a0,a3
addw a4,a4,a0
lw a0,4(a5)
lw a5,0(a6)
addw a0,a0,a4
addw a5,a5,a0
lw a0,4(a6)
lw a4,4(a7)
addw a0,a0,a5
lw a5,0(a7)
addw a5,a5,a0
addw a4,a4,a5
ld a5,16(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,16(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,24(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,24(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,32(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,32(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,40(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,40(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,48(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,48(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,56(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,56(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,64(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,64(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,72(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,72(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,80(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,80(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,88(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,88(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,96(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,96(sp)
lw a4,4(a4)
addw a4,a4,a5
lw a5,0(t2)
addw a5,a5,a4
lw a4,4(t2)
addw a4,a4,a5
lw a5,0(t0)
addw a5,a5,a4
lw a4,4(t0)
addw a4,a4,a5
lw a5,0(t6)
addw a5,a5,a4
lw a4,4(t6)
addw a4,a4,a5
ld a5,128(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,128(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,136(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,136(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,144(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,144(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,152(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,152(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,160(sp)
lw a5,0(a5)
addw a5,a5,a4
ld a4,160(sp)
lw a4,4(a4)
addw a4,a4,a5
ld a5,168(sp)
lw a5,0(a5)
lw a0,4(t1)
ld s0,8(sp)
addw a5,a5,a4
ld a4,168(sp)
lw a4,4(a4)
addw a4,a4,a5
lw a5,0(t5)
addw a5,a5,a4
lw a4,4(t5)
addw a4,a4,a5
lw a5,0(t4)
addw a5,a5,a4
lw a4,4(t4)
addw a4,a4,a5
lw a5,0(t3)
addw a5,a5,a4
lw a4,4(t3)
addw a4,a4,a5
lw a5,0(t1)
addi sp,sp,16
addw a5,a5,a4
addw a0,a0,a5
jr ra
.LFE2:
.size param32_arr, .-param32_arr
.align 1
.globl param16
.type param16, @function
param16:
.LFB3:
addi sp,sp,-240
sd s3,200(sp)
mv s3,a5
lw a5,240(sp)
sw a2,72(sp)
sw a3,76(sp)
sd a5,8(sp)
lw a5,248(sp)
sw a4,80(sp)
sd ra,232(sp)
sd a5,16(sp)
lw a5,256(sp)
sd s0,224(sp)
sd s1,216(sp)
sd a5,24(sp)
lw a5,264(sp)
sd s2,208(sp)
sd s4,192(sp)
sd a5,32(sp)
lw a5,272(sp)
sd s5,184(sp)
sd s6,176(sp)
sd s7,168(sp)
sd s8,160(sp)
sd s9,152(sp)
sd s10,144(sp)
sd s11,136(sp)
sd a5,40(sp)
sw a0,64(sp)
sw a1,68(sp)
lw s11,280(sp)
lw s10,288(sp)
lw s9,296(sp)
sw s3,84(sp)
ld a5,8(sp)
mv s8,a0
mv s7,a1
sw a5,96(sp)
ld a5,16(sp)
li a1,16
addi a0,sp,64
sw a5,100(sp)
ld a5,24(sp)
mv s6,a2
mv s5,a3
sw a5,104(sp)
ld a5,32(sp)
mv s4,a4
mv s2,a6
sw a5,108(sp)
ld a5,40(sp)
mv s1,a7
sw a6,88(sp)
sw a7,92(sp)
sw a5,112(sp)
sw s11,116(sp)
sw s10,120(sp)
sw s9,124(sp)
call sort
lw a1,104(sp)
li s0,998244352
lw a5,64(sp)
sd a1,48(sp)
lw a0,68(sp)
lw t2,72(sp)
lw t0,76(sp)
lw t6,80(sp)
lw t5,84(sp)
lw a6,88(sp)
lw a2,92(sp)
lw a3,96(sp)
lw a4,100(sp)
lw t4,108(sp)
lw t3,112(sp)
lw t1,116(sp)
lw a7,120(sp)
lw a1,124(sp)
addiw s0,s0,1
sw s0,60(sp)
.L16:
beq a5,zero,.L17
lw s0,60(sp)
addw a0,a0,t2
mv t2,t0
remw a0,a0,s0
ld s0,16(sp)
mv t0,t6
mv t6,t5
mv t5,a6
mv a6,a2
mv a2,a3
mv a3,a4
ld a4,48(sp)
sd t4,48(sp)
mv t4,t3
mv t3,t1
mv t1,a7
mv a7,a1
mv a1,s8
mv s8,s7
mv s7,s6
mv s6,s5
mv s5,s4
mv s4,s3
mv s3,s2
mv s2,s1
ld s1,8(sp)
sd s0,8(sp)
ld s0,24(sp)
addiw a5,a5,-1
sd s0,16(sp)
ld s0,32(sp)
sd s0,24(sp)
ld s0,40(sp)
sd s11,40(sp)
mv s11,s10
sd s0,32(sp)
mv s10,s9
li s9,0
j .L16
.L17:
ld ra,232(sp)
ld s0,224(sp)
ld s1,216(sp)
ld s2,208(sp)
ld s3,200(sp)
ld s4,192(sp)
ld s5,184(sp)
ld s6,176(sp)
ld s7,168(sp)
ld s8,160(sp)
ld s9,152(sp)
ld s10,144(sp)
ld s11,136(sp)
addi sp,sp,240
jr ra
.LFE3:
.size param16, .-param16
.section .text.startup,"ax",@progbits
.align 1
.globl main
.type main, @function
main:
.LFB4:
addi sp,sp,-608
sd ra,600(sp)
sd s0,592(sp)
sd s1,584(sp)
sd s2,576(sp)
sd s3,568(sp)
sd s4,560(sp)
sd s5,552(sp)
sd s6,544(sp)
sd s7,536(sp)
sd s8,528(sp)
sd s9,520(sp)
sd s10,512(sp)
sd s11,504(sp)
call getint@plt
mv s1,a0
call getint@plt
mv s2,a0
call getint@plt
mv s3,a0
call getint@plt
sd a0,232(sp)
call getint@plt
sd a0,224(sp)
call getint@plt
sd a0,216(sp)
call getint@plt
sd a0,208(sp)
call getint@plt
sd a0,200(sp)
call getint@plt
mv s4,a0
call getint@plt
mv s5,a0
call getint@plt
mv s6,a0
call getint@plt
mv s7,a0
call getint@plt
mv s8,a0
call getint@plt
mv s9,a0
call getint@plt
mv s10,a0
addi s0,sp,248
call getint@plt
mv s11,a0
li a2,248
li a1,0
mv a0,s0
call memset@plt
ld a5,216(sp)
ld a3,232(sp)
ld a7,200(sp)
ld a6,208(sp)
ld a4,224(sp)
sd s11,56(sp)
sd s10,48(sp)
sd s9,40(sp)
sd s8,32(sp)
sd s7,24(sp)
sd s6,16(sp)
sd s5,8(sp)
sd s4,0(sp)
mv a2,s3
mv a1,s2
mv a0,s1
call param16
li a5,8192
addi a5,a5,656
sw a5,244(sp)
addi a5,sp,240
sw a0,240(sp)
addi a3,sp,488
mv a0,a5
.L20:
lw a4,4(a5)
addiw a4,a4,-1
sw a4,8(a5)
lw a4,0(a5)
addi a5,a5,8
addiw a4,a4,-2
sw a4,4(a5)
bne a5,a3,.L20
sd a5,184(sp)
addi a5,sp,480
sd a5,176(sp)
addi a5,sp,472
sd a5,168(sp)
addi a5,sp,464
sd a5,160(sp)
addi a5,sp,456
sd a5,152(sp)
addi a5,sp,448
sd a5,144(sp)
addi a5,sp,440
sd a5,136(sp)
addi a5,sp,432
sd a5,128(sp)
addi a5,sp,424
sd a5,120(sp)
addi a5,sp,416
sd a5,112(sp)
addi a5,sp,408
sd a5,104(sp)
addi a5,sp,400
sd a5,96(sp)
addi a5,sp,392
sd a5,88(sp)
addi a5,sp,384
sd a5,80(sp)
addi a5,sp,376
sd a5,72(sp)
addi a5,sp,368
sd a5,64(sp)
addi a5,sp,360
sd a5,56(sp)
addi a5,sp,352
sd a5,48(sp)
addi a5,sp,344
sd a5,40(sp)
addi a5,sp,336
sd a5,32(sp)
addi a5,sp,328
sd a5,24(sp)
addi a5,sp,320
sd a5,16(sp)
addi a5,sp,312
sd a5,8(sp)
addi a5,sp,304
addi a7,sp,296
addi a6,sp,288
addi a4,sp,272
addi a3,sp,264
addi a2,sp,256
mv a1,s0
sd a5,0(sp)
addi a5,sp,280
call param32_arr
call putint@plt
li a0,10
call putch@plt
ld ra,600(sp)
ld s0,592(sp)
ld s1,584(sp)
ld s2,576(sp)
ld s3,568(sp)
ld s4,560(sp)
ld s5,552(sp)
ld s6,544(sp)
ld s7,536(sp)
ld s8,528(sp)
ld s9,520(sp)
ld s10,512(sp)
ld s11,504(sp)
li a0,0
addi sp,sp,608
jr ra
)ASM";
} // namespace AssemblyCode

View File

@ -26,7 +26,7 @@ private:
unsigned getTypeSizeInBytes(Type* type);
Module* module;
int foo = 0, foo1 = 0;
bool gc_failed = false;
};
} // namespace sysy

View File

@ -11,7 +11,6 @@
#include "PrologueEpilogueInsertion.h"
#include "EliminateFrameIndices.h"
#include "DivStrengthReduction.h"
#include "OFE.h"
namespace sysy {