mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-26 05:25:47 +00:00
MIR Serialization: Initial serialization of machine constant pools.
This commit implements the initial serialization of machine constant pools and the constant pool index machine operands. The constant pool is serialized using a YAML sequence of YAML mappings that represent the constant values. The target-specific constant pool items aren't serialized by this commit. Reviewers: Duncan P. N. Exon Smith git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242707 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "MIRPrinter.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||
@@ -69,6 +70,8 @@ public:
|
||||
void convert(yaml::MachineFunction &MF, const MachineRegisterInfo &RegInfo,
|
||||
const TargetRegisterInfo *TRI);
|
||||
void convert(yaml::MachineFrameInfo &YamlMFI, const MachineFrameInfo &MFI);
|
||||
void convert(yaml::MachineFunction &MF,
|
||||
const MachineConstantPool &ConstantPool);
|
||||
void convert(ModuleSlotTracker &MST, yaml::MachineJumpTable &YamlJTI,
|
||||
const MachineJumpTableInfo &JTI);
|
||||
void convert(ModuleSlotTracker &MST, yaml::MachineBasicBlock &YamlMBB,
|
||||
@@ -144,6 +147,8 @@ void MIRPrinter::print(const MachineFunction &MF) {
|
||||
convert(YamlMF, MF.getRegInfo(), MF.getSubtarget().getRegisterInfo());
|
||||
convert(YamlMF.FrameInfo, *MF.getFrameInfo());
|
||||
convertStackObjects(YamlMF, *MF.getFrameInfo());
|
||||
if (const auto *ConstantPool = MF.getConstantPool())
|
||||
convert(YamlMF, *ConstantPool);
|
||||
|
||||
ModuleSlotTracker MST(MF.getFunction()->getParent());
|
||||
if (const auto *JumpTableInfo = MF.getJumpTableInfo())
|
||||
@@ -249,6 +254,25 @@ void MIRPrinter::convertStackObjects(yaml::MachineFunction &MF,
|
||||
}
|
||||
}
|
||||
|
||||
void MIRPrinter::convert(yaml::MachineFunction &MF,
|
||||
const MachineConstantPool &ConstantPool) {
|
||||
unsigned ID = 0;
|
||||
for (const MachineConstantPoolEntry &Constant : ConstantPool.getConstants()) {
|
||||
// TODO: Serialize target specific constant pool entries.
|
||||
if (Constant.isMachineConstantPoolEntry())
|
||||
llvm_unreachable("Can't print target specific constant pool entries yet");
|
||||
|
||||
yaml::MachineConstantPoolValue YamlConstant;
|
||||
std::string Str;
|
||||
raw_string_ostream StrOS(Str);
|
||||
Constant.Val.ConstVal->printAsOperand(StrOS);
|
||||
YamlConstant.ID = ID++;
|
||||
YamlConstant.Value = StrOS.str();
|
||||
YamlConstant.Alignment = Constant.getAlignment();
|
||||
MF.Constants.push_back(YamlConstant);
|
||||
}
|
||||
}
|
||||
|
||||
void MIRPrinter::convert(ModuleSlotTracker &MST,
|
||||
yaml::MachineJumpTable &YamlJTI,
|
||||
const MachineJumpTableInfo &JTI) {
|
||||
@@ -398,6 +422,10 @@ void MIPrinter::print(const MachineOperand &Op, const TargetRegisterInfo *TRI) {
|
||||
case MachineOperand::MO_FrameIndex:
|
||||
printStackObjectReference(Op.getIndex());
|
||||
break;
|
||||
case MachineOperand::MO_ConstantPoolIndex:
|
||||
OS << "%const." << Op.getIndex();
|
||||
// TODO: Print offset and target flags.
|
||||
break;
|
||||
case MachineOperand::MO_JumpTableIndex:
|
||||
OS << "%jump-table." << Op.getIndex();
|
||||
// TODO: Print target flags.
|
||||
|
Reference in New Issue
Block a user