[llvm] 193fde7 - llvm-reduce: Clone some of the easy function properties
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 15 17:31:13 PDT 2022
Author: Matt Arsenault
Date: 2022-04-15T20:31:07-04:00
New Revision: 193fde7509d7805771adaef0f34186cb2cf6e084
URL: https://github.com/llvm/llvm-project/commit/193fde7509d7805771adaef0f34186cb2cf6e084
DIFF: https://github.com/llvm/llvm-project/commit/193fde7509d7805771adaef0f34186cb2cf6e084.diff
LOG: llvm-reduce: Clone some of the easy function properties
Error on some of these other fields, since tracking down test cases
for all of these at once is exhausting.
Added:
llvm/test/tools/llvm-reduce/mir/preserve-func-info.mir
Modified:
llvm/include/llvm/CodeGen/MachineFunction.h
llvm/tools/llvm-reduce/ReducerWorkItem.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h
index b2aefa87f8742..6363d3e0de148 100644
--- a/llvm/include/llvm/CodeGen/MachineFunction.h
+++ b/llvm/include/llvm/CodeGen/MachineFunction.h
@@ -1110,6 +1110,11 @@ class LLVM_EXTERNAL_VISIBILITY MachineFunction {
/// Map the landing pad's EH symbol to the call site indexes.
void setCallSiteLandingPad(MCSymbol *Sym, ArrayRef<unsigned> Sites);
+ /// Return if there is any wasm exception handling.
+ bool hasAnyWasmLandingPadIndex() const {
+ return !WasmLPadToIndexMap.empty();
+ }
+
/// Map the landing pad to its index. Used for Wasm exception handling.
void setWasmLandingPadIndex(const MachineBasicBlock *LPad, unsigned Index) {
WasmLPadToIndexMap[LPad] = Index;
@@ -1126,6 +1131,10 @@ class LLVM_EXTERNAL_VISIBILITY MachineFunction {
return WasmLPadToIndexMap.lookup(LPad);
}
+ bool hasAnyCallSiteLandingPad() const {
+ return !LPadToCallSiteMap.empty();
+ }
+
/// Get the call site indexes for a landing pad EH symbol.
SmallVectorImpl<unsigned> &getCallSiteLandingPad(MCSymbol *Sym) {
assert(hasCallSiteLandingPad(Sym) &&
@@ -1138,6 +1147,10 @@ class LLVM_EXTERNAL_VISIBILITY MachineFunction {
return !LPadToCallSiteMap[Sym].empty();
}
+ bool hasAnyCallSiteLabel() const {
+ return !CallSiteMap.empty();
+ }
+
/// Map the begin label for a call site.
void setCallSiteBeginLabel(MCSymbol *BeginLabel, unsigned Site) {
CallSiteMap[BeginLabel] = Site;
diff --git a/llvm/test/tools/llvm-reduce/mir/preserve-func-info.mir b/llvm/test/tools/llvm-reduce/mir/preserve-func-info.mir
new file mode 100644
index 0000000000000..aa43455d732cd
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/mir/preserve-func-info.mir
@@ -0,0 +1,59 @@
+# REQUIRES: amdgpu-registered-target
+# RUN: llvm-reduce -simplify-mir -mtriple=amdgcn-amd-amdhsa --test FileCheck --test-arg --check-prefix=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t 2> %t.log
+# RUN: FileCheck --check-prefix=RESULT %s < %t
+
+# CHECK-INTERESTINGNESS: V_MOV_B32
+
+
+# RESULT: name: func
+# RESULT-NEXT: alignment: 32
+# RESULT-NEXT: exposesReturnsTwice: true
+# RESULT-NEXT: legalized: true
+# RESULT-NEXT: regBankSelected: true
+# RESULT-NEXT: selected: true
+# RESULT-NEXT: failedISel: true
+# RESULT-NEXT: tracksRegLiveness: true
+# RESULT-NEXT: hasWinCFI: true
+# RESULT-NEXT: callsEHReturn: true
+# RESULT-NEXT: callsUnwindInit: true
+# RESULT-NEXT: hasEHCatchret: true
+# RESULT-NEXT: hasEHScopes: true
+# RESULT-NEXT: hasEHFunclets: true
+# RESULT-NEXT: failsVerification: true
+# RESULT-NEXT: tracksDebugUserValues: true
+
+# RESULT: %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+# RESULT-NEXT: S_ENDPGM
+
+--- |
+ define void @func(i32 %size) {
+ ret void
+ }
+
+...
+---
+name: func
+alignment: 32
+exposesReturnsTwice: true
+legalized: true
+regBankSelected: true
+selected: true
+failedISel: true
+tracksRegLiveness: true
+hasWinCFI: true
+failsVerification: true
+tracksDebugUserValues: true
+callsEHReturn: true
+callsUnwindInit: true
+callsUnwindInit: true
+hasEHCatchret: true
+hasEHScopes: true
+hasEHFunclets: true
+
+body: |
+ bb.0:
+ S_NOP 0
+ %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ INLINEASM &"", 1 /* sideeffect attdialect */
+ S_ENDPGM 0, implicit %0
+...
diff --git a/llvm/tools/llvm-reduce/ReducerWorkItem.cpp b/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
index 93b2ac96e723b..75fef698a3b8c 100644
--- a/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
+++ b/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
@@ -230,6 +230,36 @@ static std::unique_ptr<MachineFunction> cloneMF(MachineFunction *SrcMF) {
}
}
+ DstMF->setAlignment(SrcMF->getAlignment());
+ DstMF->setExposesReturnsTwice(SrcMF->exposesReturnsTwice());
+ DstMF->setHasInlineAsm(SrcMF->hasInlineAsm());
+ DstMF->setHasWinCFI(SrcMF->hasWinCFI());
+
+ DstMF->getProperties().reset().set(SrcMF->getProperties());
+
+ if (!SrcMF->getFrameInstructions().empty() ||
+ !SrcMF->getLongjmpTargets().empty() ||
+ !SrcMF->getCatchretTargets().empty())
+ report_fatal_error("cloning not implemented for machine function property");
+
+ DstMF->setCallsEHReturn(SrcMF->callsEHReturn());
+ DstMF->setCallsUnwindInit(SrcMF->callsUnwindInit());
+ DstMF->setHasEHCatchret(SrcMF->hasEHCatchret());
+ DstMF->setHasEHScopes(SrcMF->hasEHScopes());
+ DstMF->setHasEHFunclets(SrcMF->hasEHFunclets());
+
+ if (!SrcMF->getLandingPads().empty() ||
+ !SrcMF->getCodeViewAnnotations().empty() ||
+ !SrcMF->getTypeInfos().empty() ||
+ !SrcMF->getFilterIds().empty() ||
+ SrcMF->hasAnyWasmLandingPadIndex() ||
+ SrcMF->hasAnyCallSiteLandingPad() ||
+ SrcMF->hasAnyCallSiteLabel() ||
+ !SrcMF->getCallSitesInfo().empty())
+ report_fatal_error("cloning not implemented for machine function property");
+
+ DstMF->setDebugInstrNumberingCount(SrcMF->DebugInstrNumberingCount);
+
DstMF->verify(nullptr, "", /*AbortOnError=*/true);
return DstMF;
}
More information about the llvm-commits
mailing list