diff options
Diffstat (limited to 'include/llvm/CodeGen/MIRYamlMapping.h')
-rw-r--r-- | include/llvm/CodeGen/MIRYamlMapping.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MIRYamlMapping.h b/include/llvm/CodeGen/MIRYamlMapping.h index f9d4c7471b93..b1fe47a17a2d 100644 --- a/include/llvm/CodeGen/MIRYamlMapping.h +++ b/include/llvm/CodeGen/MIRYamlMapping.h @@ -20,17 +20,54 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/YAMLTraits.h" +#include <vector> + +namespace llvm { +namespace yaml { + +struct MachineBasicBlock { + std::string Name; + unsigned Alignment = 0; + bool IsLandingPad = false; + bool AddressTaken = false; + // TODO: Serialize the successors and liveins. + // TODO: Serialize machine instructions. +}; + +template <> struct MappingTraits<MachineBasicBlock> { + static void mapping(IO &YamlIO, MachineBasicBlock &MBB) { + YamlIO.mapOptional("name", MBB.Name, + std::string()); // Don't print out an empty name. + YamlIO.mapOptional("alignment", MBB.Alignment); + YamlIO.mapOptional("isLandingPad", MBB.IsLandingPad); + YamlIO.mapOptional("addressTaken", MBB.AddressTaken); + } +}; + +} // end namespace yaml +} // end namespace llvm + +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::MachineBasicBlock) namespace llvm { namespace yaml { struct MachineFunction { StringRef Name; + unsigned Alignment = 0; + bool ExposesReturnsTwice = false; + bool HasInlineAsm = false; + + std::vector<MachineBasicBlock> BasicBlocks; }; template <> struct MappingTraits<MachineFunction> { static void mapping(IO &YamlIO, MachineFunction &MF) { YamlIO.mapRequired("name", MF.Name); + YamlIO.mapOptional("alignment", MF.Alignment); + YamlIO.mapOptional("exposesReturnsTwice", MF.ExposesReturnsTwice); + YamlIO.mapOptional("hasInlineAsm", MF.HasInlineAsm); + YamlIO.mapOptional("body", MF.BasicBlocks); } }; |