[llvm] 2526c9d - SPIRV: Use mi_match in combiner match functions (#216964)

via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 20 05:07:48 PDT 2026


Author: Matt Arsenault
Date: 2026-08-20T14:07:44+02:00
New Revision: 2526c9db1be9762d70d1fb55217cfc96165bc315

URL: https://github.com/llvm/llvm-project/commit/2526c9db1be9762d70d1fb55217cfc96165bc315
DIFF: https://github.com/llvm/llvm-project/commit/2526c9db1be9762d70d1fb55217cfc96165bc315.diff

LOG: SPIRV: Use mi_match in combiner match functions (#216964)

Convert some simple cases away from getVRegDef + opcode
checks which don't require new matchers.

Co-authored-by: Claude (Opus 4.8) <noreply at anthropic.com>

Added: 
    

Modified: 
    llvm/lib/Target/SPIRV/SPIRVCombinerHelper.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/SPIRV/SPIRVCombinerHelper.cpp b/llvm/lib/Target/SPIRV/SPIRVCombinerHelper.cpp
index 0882970895452..4f3c82f64f5cf 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCombinerHelper.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCombinerHelper.cpp
@@ -40,11 +40,7 @@ bool SPIRVCombinerHelper::matchLengthToDistance(MachineInstr &MI) const {
 
   // First operand of MI is `G_INTRINSIC` so start at operand 2.
   Register SubReg = MI.getOperand(2).getReg();
-  MachineInstr *SubInstr = MRI.getVRegDef(SubReg);
-  if (SubInstr->getOpcode() != TargetOpcode::G_FSUB)
-    return false;
-
-  return true;
+  return mi_match(SubReg, MRI, m_GFSub(m_Reg(), m_Reg()));
 }
 
 void SPIRVCombinerHelper::applySPIRVDistance(MachineInstr &MI) const {
@@ -129,10 +125,9 @@ bool SPIRVCombinerHelper::matchSelectToFaceForward(MachineInstr &MI) const {
   if (!mi_match(TrueReg, MRI, m_GFNeg(m_SpecificReg(FalseReg))) &&
       !mi_match(FalseReg, MRI, m_GFNeg(m_SpecificReg(TrueReg)))) {
     std::optional<FPValueAndVReg> MulConstant;
-    MachineInstr *TrueInstr = MRI.getVRegDef(TrueReg);
-    MachineInstr *FalseInstr = MRI.getVRegDef(FalseReg);
-    if (TrueInstr->getOpcode() == TargetOpcode::G_BUILD_VECTOR &&
-        FalseInstr->getOpcode() == TargetOpcode::G_BUILD_VECTOR &&
+    GBuildVector *TrueInstr, *FalseInstr;
+    if (mi_match(TrueReg, MRI, m_GBuildVector(TrueInstr)) &&
+        mi_match(FalseReg, MRI, m_GBuildVector(FalseInstr)) &&
         TrueInstr->getNumOperands() == FalseInstr->getNumOperands()) {
       for (unsigned I = 1; I < TrueInstr->getNumOperands(); ++I)
         if (!AreNegatedConstantsOrSplats(TrueInstr->getOperand(I).getReg(),


        


More information about the llvm-commits mailing list