[llvm] b8033de - MIR: Serialize a few bool function fields

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 15 17:31:11 PDT 2022


Author: Matt Arsenault
Date: 2022-04-15T20:31:07-04:00
New Revision: b8033de063f23252ac8c914965a7d7d5ef188352

URL: https://github.com/llvm/llvm-project/commit/b8033de063f23252ac8c914965a7d7d5ef188352
DIFF: https://github.com/llvm/llvm-project/commit/b8033de063f23252ac8c914965a7d7d5ef188352.diff

LOG: MIR: Serialize a few bool function fields

Added: 
    llvm/test/CodeGen/MIR/X86/exception-function-state.mir

Modified: 
    llvm/include/llvm/CodeGen/MIRYamlMapping.h
    llvm/lib/CodeGen/MIRParser/MIRParser.cpp
    llvm/lib/CodeGen/MIRPrinter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/MIRYamlMapping.h b/llvm/include/llvm/CodeGen/MIRYamlMapping.h
index 02eb5d24271df..94198628518ac 100644
--- a/llvm/include/llvm/CodeGen/MIRYamlMapping.h
+++ b/llvm/include/llvm/CodeGen/MIRYamlMapping.h
@@ -694,6 +694,13 @@ struct MachineFunction {
   // Register information
   bool TracksRegLiveness = false;
   bool HasWinCFI = false;
+
+  bool CallsEHReturn = false;
+  bool CallsUnwindInit = false;
+  bool HasEHCatchret = false;
+  bool HasEHScopes = false;
+  bool HasEHFunclets = false;
+
   bool FailsVerification = false;
   bool TracksDebugUserValues = false;
   std::vector<VirtualRegisterDefinition> VirtualRegisters;
@@ -724,6 +731,13 @@ template <> struct MappingTraits<MachineFunction> {
     YamlIO.mapOptional("failedISel", MF.FailedISel, false);
     YamlIO.mapOptional("tracksRegLiveness", MF.TracksRegLiveness, false);
     YamlIO.mapOptional("hasWinCFI", MF.HasWinCFI, false);
+
+    YamlIO.mapOptional("callsEHReturn", MF.CallsEHReturn, false);
+    YamlIO.mapOptional("callsUnwindInit", MF.CallsUnwindInit, false);
+    YamlIO.mapOptional("hasEHCatchret", MF.HasEHCatchret, false);
+    YamlIO.mapOptional("hasEHScopes", MF.HasEHScopes, false);
+    YamlIO.mapOptional("hasEHFunclets", MF.HasEHFunclets, false);
+
     YamlIO.mapOptional("failsVerification", MF.FailsVerification, false);
     YamlIO.mapOptional("tracksDebugUserValues", MF.TracksDebugUserValues,
                        false);

diff  --git a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp
index c0af85b0a1600..3f1b194358c27 100644
--- a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp
@@ -458,6 +458,12 @@ MIRParserImpl::initializeMachineFunction(const yaml::MachineFunction &YamlMF,
   MF.setExposesReturnsTwice(YamlMF.ExposesReturnsTwice);
   MF.setHasWinCFI(YamlMF.HasWinCFI);
 
+  MF.setCallsEHReturn(YamlMF.CallsEHReturn);
+  MF.setCallsUnwindInit(YamlMF.CallsUnwindInit);
+  MF.setHasEHCatchret(YamlMF.HasEHCatchret);
+  MF.setHasEHScopes(YamlMF.HasEHScopes);
+  MF.setHasEHFunclets(YamlMF.HasEHFunclets);
+
   if (YamlMF.Legalized)
     MF.getProperties().set(MachineFunctionProperties::Property::Legalized);
   if (YamlMF.RegBankSelected)

diff  --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp
index d1eec74e2131c..2fa4c45abe91f 100644
--- a/llvm/lib/CodeGen/MIRPrinter.cpp
+++ b/llvm/lib/CodeGen/MIRPrinter.cpp
@@ -195,6 +195,12 @@ void MIRPrinter::print(const MachineFunction &MF) {
   YamlMF.ExposesReturnsTwice = MF.exposesReturnsTwice();
   YamlMF.HasWinCFI = MF.hasWinCFI();
 
+  YamlMF.CallsEHReturn = MF.callsEHReturn();
+  YamlMF.CallsUnwindInit = MF.callsUnwindInit();
+  YamlMF.HasEHCatchret = MF.hasEHCatchret();
+  YamlMF.HasEHScopes = MF.hasEHScopes();
+  YamlMF.HasEHFunclets = MF.hasEHFunclets();
+
   YamlMF.Legalized = MF.getProperties().hasProperty(
       MachineFunctionProperties::Property::Legalized);
   YamlMF.RegBankSelected = MF.getProperties().hasProperty(

diff  --git a/llvm/test/CodeGen/MIR/X86/exception-function-state.mir b/llvm/test/CodeGen/MIR/X86/exception-function-state.mir
new file mode 100644
index 0000000000000..f401da1dde161
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/X86/exception-function-state.mir
@@ -0,0 +1,71 @@
+# RUN: llc -simplify-mir=0 -march=x86-64 -run-pass=none -o - %s | FileCheck -check-prefixes=FULL,ALL %s
+# RUN: llc -simplify-mir=1 -march=x86-64 -run-pass=none -o - %s | FileCheck -check-prefixes=SIMPLE,ALL %s
+
+# This test ensures that the MIR parser parses callee saved information in the
+# stack objects correctly.
+
+# ALL: name: func0
+# ALL: callsEHReturn:   true
+# ALL: callsUnwindInit: true
+# ALL: hasEHCatchret:   true
+# ALL: hasEHScopes:     true
+# ALL: hasEHFunclets:   true
+
+---
+name: func0
+callsEHReturn: true
+callsUnwindInit: true
+hasEHCatchret: true
+hasEHScopes: true
+hasEHFunclets: true
+body: |
+  bb.0:
+...
+
+# ALL: name: func1
+# FULL: callsEHReturn: false
+# FULL: callsUnwindInit: true
+# FULL: hasEHCatchret: false
+# FULL: hasEHScopes: true
+# FULL: hasEHFunclets: false
+
+# SIMPLE-NOT: callsEHReturn
+# SIMPLE: callsUnwindInit: true
+# SIMPLE-NOT: hasEHCatchret
+# SIMPLE: hasEHScopes: true
+# SIMPLE-NOT: hasEHFunclets
+---
+name: func1
+tracksRegLiveness: true
+callsEHReturn: false
+callsUnwindInit: true
+hasEHCatchret: false
+hasEHScopes: true
+hasEHFunclets: false
+body: |
+  bb.0:
+...
+
+# ALL: name: func2
+# FULL: callsEHReturn: true
+# FULL: callsUnwindInit: false
+# FULL: hasEHCatchret: true
+# FULL: hasEHScopes: false
+# FULL: hasEHFunclets: false
+
+# SIMPLE: callsEHReturn: true
+# SIMPLE-NOT: callsUnwindInit
+# SIMPLE: hasEHCatchret: true
+# SIMPLE-NOT hasEHScopes
+# SIMPLE-NOT: hasEHFunclets
+---
+name: func2
+tracksRegLiveness: true
+callsEHReturn: true
+callsUnwindInit: false
+hasEHCatchret: true
+hasEHScopes: false
+hasEHFunclets: false
+body: |
+  bb.0:
+...


        


More information about the llvm-commits mailing list