[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