[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