diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-28 14:25:42 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-28 14:25:42 +0800 |
| commit | 6889b82a5c9ecc6bd178760c66653d7af0121162 (patch) | |
| tree | d0465db788912487c36bd676656f416eaa8b1642 /backend/lib/Target/RISCV/RISCVObjectFile.cpp | |
| parent | 6e8feb15a0d256ca19e88185f78c81f689ce7d34 (diff) | |
| download | rcc-project-6889b82a5c9ecc6bd178760c66653d7af0121162.tar.gz rcc-project-6889b82a5c9ecc6bd178760c66653d7af0121162.tar.xz | |
[CodeGen] Separate assembly emission ownership
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVObjectFile.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVObjectFile.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/backend/lib/Target/RISCV/RISCVObjectFile.cpp b/backend/lib/Target/RISCV/RISCVObjectFile.cpp index 15d4980..706c1f8 100644 --- a/backend/lib/Target/RISCV/RISCVObjectFile.cpp +++ b/backend/lib/Target/RISCV/RISCVObjectFile.cpp @@ -2,16 +2,20 @@ #include "rcc/Target/RISCV/RISCVObjectFile.h" +#include "RISCVAsmPrinter.h" +#include "RISCVTargetObjectFile.h" #include "rcc/CodeGen/AsmPrinter.h" #include "rcc/CodeGen/CompilationUnit.h" #include "rcc/CodeGen/MachineFunction.h" #include "rcc/CodeGen/MachineMCContext.h" +#include "rcc/IR/DataLayout.h" #include "rcc/MC/ELFObjectWriter.h" #include "rcc/MC/MCContext.h" #include "rcc/MC/MCObjectStreamer.h" #include "rcc/Target/RISCV/RISCVAsmBackend.h" #include "rcc/Target/RISCV/RISCVMCCodeEmitter.h" #include "rcc/Target/RISCV/RISCVMCTargetLowering.h" +#include "rcc/Target/RISCV/RISCVTarget.h" #include <cstdint> #include <utility> @@ -99,6 +103,7 @@ struct ObjectEmissionContext final { mc::MCContext Context; MachineMCContext MachineContext; RISCVMCTargetLowering Lowering; + RISCVELFTargetObjectFile ObjectFile; RISCVMCCodeEmitter Emitter; RISCVAsmBackend Backend; mc::ELF64LEObjectWriter Writer; @@ -114,8 +119,11 @@ Expected<std::vector<std::uint8_t>> emitObject(const CompilationUnit &Unit, ObjectEmissionContext Context(Target); if (!Context.Initialization) return std::unexpected(Context.Initialization.error()); - AsmPrinter Printer(Target, Context.Lowering, Context.MachineContext, Context.Streamer, - printerOptions(Options)); + auto Layout = DataLayout::parse(TargetDataLayout); + if (!Layout) + return std::unexpected(Layout.error()); + RISCVAsmPrinter Printer(Target, Context.Lowering, Context.ObjectFile, std::move(*Layout), + Context.MachineContext, Context.Streamer, printerOptions(Options)); auto Emitted = Printer.emitCompilationUnit(Unit); if (!Emitted) return std::unexpected(Emitted.error()); @@ -128,20 +136,14 @@ Expected<std::vector<std::uint8_t>> emitObject(const MachineFunction &Function, ObjectEmissionContext Context(Target); if (!Context.Initialization) return std::unexpected(Context.Initialization.error()); - AsmPrinter Printer(Target, Context.Lowering, Context.MachineContext, Context.Streamer, - printerOptions(Options)); - auto Header = Context.Lowering.emitFileHeader(Context.MachineContext, Context.Streamer); - if (!Header) - return std::unexpected(Header.error()); + auto Layout = DataLayout::parse(TargetDataLayout); + if (!Layout) + return std::unexpected(Layout.error()); + RISCVAsmPrinter Printer(Target, Context.Lowering, Context.ObjectFile, std::move(*Layout), + Context.MachineContext, Context.Streamer, printerOptions(Options)); auto Emitted = Printer.emitFunction(Function); if (!Emitted) return std::unexpected(Emitted.error()); - auto Trailer = Context.Lowering.emitFileTrailer(Context.MachineContext, Context.Streamer); - if (!Trailer) - return std::unexpected(Trailer.error()); - auto Finished = Context.Streamer.finish(); - if (!Finished) - return std::unexpected(Finished.error()); return Context.Streamer.takeOutput(); } |
