[llvm] 6dc24f6 - [GISel] Improve MachineVerifier for G_SCMP/UCMP. (#120017)

via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 15 22:08:46 PST 2024


Author: Craig Topper
Date: 2024-12-15T22:08:43-08:00
New Revision: 6dc24f6a2fcf0a199e007dc127ca5a4901a3a24e

URL: https://github.com/llvm/llvm-project/commit/6dc24f6a2fcf0a199e007dc127ca5a4901a3a24e
DIFF: https://github.com/llvm/llvm-project/commit/6dc24f6a2fcf0a199e007dc127ca5a4901a3a24e.diff

LOG: [GISel] Improve MachineVerifier for G_SCMP/UCMP. (#120017)

-Ensure destination type is at least 2 bits.
-Remove unnecessary check that both sources are the same type. The
verifier already handles this generically.

Added: 
    

Modified: 
    llvm/lib/CodeGen/MachineVerifier.cpp
    llvm/test/MachineVerifier/test_uscmp.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index 7077580361d08a..bec36b728ae328 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -1590,9 +1590,8 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
   case TargetOpcode::G_UCMP: {
     LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
     LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
-    LLT SrcTy2 = MRI->getType(MI->getOperand(2).getReg());
 
-    if (SrcTy.isPointerOrPointerVector() || SrcTy2.isPointerOrPointerVector()) {
+    if (SrcTy.isPointerOrPointerVector()) {
       report("Generic scmp/ucmp does not support pointers as operands", MI);
       break;
     }
@@ -1602,6 +1601,11 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
       break;
     }
 
+    if (DstTy.getScalarSizeInBits() < 2) {
+      report("Result type must be at least 2 bits wide", MI);
+      break;
+    }
+
     if ((DstTy.isVector() != SrcTy.isVector()) ||
         (DstTy.isVector() &&
          DstTy.getElementCount() != SrcTy.getElementCount())) {
@@ -1609,11 +1613,6 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
       break;
     }
 
-    if (SrcTy != SrcTy2) {
-      report("Generic scmp/ucmp must have same input types", MI);
-      break;
-    }
-
     break;
   }
   case TargetOpcode::G_EXTRACT: {

diff  --git a/llvm/test/MachineVerifier/test_uscmp.mir b/llvm/test/MachineVerifier/test_uscmp.mir
index aa686c4ec73e65..4e518749e7377e 100644
--- a/llvm/test/MachineVerifier/test_uscmp.mir
+++ b/llvm/test/MachineVerifier/test_uscmp.mir
@@ -19,13 +19,17 @@ body:             |
     %23:_(<2 x s32>) = G_IMPLICIT_DEF
     %24:_(<2 x s32>) = G_IMPLICIT_DEF
     ; CHECK: Generic vector scmp/ucmp must preserve number of lanes
-    %5:_(s1) = G_UCMP  %23, %24
+    %5:_(s2) = G_UCMP  %23, %24
 
     %15:_(s32) = G_CONSTANT i32 0
     %16:_(s64) = G_CONSTANT i64 2
-    ; CHECK: Generic scmp/ucmp must have same input types
-    %17:_(s1) = G_SCMP %15, %16
+    ; CHECK: Type mismatch in generic instruction
+    %17:_(s2) = G_SCMP %15, %16
 
+    %18:_(s32) = G_CONSTANT i32 0
+    %19:_(s32) = G_CONSTANT i32 2
+    ; CHECK: Result type must be at least 2 bits wide
+    %20:_(s1) = G_SCMP %18, %19
 
 
 ...


        


More information about the llvm-commits mailing list