[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