[llvm] [NFC][SPIR-V] Use PatternMatch combinators in SPIRVEmitIntrinsics (PR #189554)
Juan Manuel Martinez CaamaƱo via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 2 05:50:24 PDT 2026
================
@@ -375,37 +376,28 @@ class SPIRVEmitIntrinsics
};
bool isConvergenceIntrinsic(const Instruction *I) {
- const auto *II = dyn_cast<IntrinsicInst>(I);
- if (!II)
- return false;
-
- return II->getIntrinsicID() == Intrinsic::experimental_convergence_entry ||
- II->getIntrinsicID() == Intrinsic::experimental_convergence_loop ||
- II->getIntrinsicID() == Intrinsic::experimental_convergence_anchor;
+ return match(
+ I, m_CombineOr(
+ m_Intrinsic<Intrinsic::experimental_convergence_entry>(),
+ m_CombineOr(
+ m_Intrinsic<Intrinsic::experimental_convergence_loop>(),
+ m_Intrinsic<Intrinsic::experimental_convergence_anchor>())));
}
bool expectIgnoredInIRTranslation(const Instruction *I) {
- const auto *II = dyn_cast<IntrinsicInst>(I);
- if (!II)
- return false;
- switch (II->getIntrinsicID()) {
- case Intrinsic::invariant_start:
- case Intrinsic::spv_resource_handlefrombinding:
- case Intrinsic::spv_resource_getpointer:
- return true;
----------------
jmmartinez wrote:
TBH these `m_CombienOr` feel almost worse. And the `m_Intrinsic` would keep checking if I is an intrinsic for unoptimized builds (which is not a deal breaker but maybe we can do better).
The simpler ones do look nicer (specially the one in `getPointerRoot`).
---
This pattern is not isolated to SPIRV's backend. Have you thought about proposing a new pattern in PatternMatch that can be used elsewhere and that is also as efficient as the switch statement?
https://github.com/llvm/llvm-project/pull/189554
More information about the llvm-commits
mailing list