/// 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;
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) &&
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;
--- /dev/null
+# 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
+...
}
}
+ 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;
}