summaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/MIRYamlMapping.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/CodeGen/MIRYamlMapping.h')
-rw-r--r--include/llvm/CodeGen/MIRYamlMapping.h37
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);
}
};