[llvm] e16a0a3 - [NFC][LLVM][Verifier] Eliminate redundant checks for GC intrinsics (#206890)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 1 05:53:36 PDT 2026


Author: Rahul Joshi
Date: 2026-07-01T05:53:32-07:00
New Revision: e16a0a30801efea7129751a4757f278a34269799

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

LOG: [NFC][LLVM][Verifier] Eliminate redundant checks for GC intrinsics (#206890)

Added: 
    

Modified: 
    llvm/lib/IR/Verifier.cpp
    llvm/test/Verifier/intrinsic-bad-arg-type1.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 88d99750048d5..5ecc741698ba6 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -3267,25 +3267,10 @@ void Verifier::visitFunction(const Function &F) {
   }
 
   // Check intrinsics' signatures.
-  switch (IID) {
-  case Intrinsic::experimental_gc_get_pointer_base: {
+  if (IID == Intrinsic::experimental_gc_get_pointer_base) {
     FunctionType *FT = F.getFunctionType();
-    Check(FT->getNumParams() == 1, "wrong number of parameters", F);
-    Check(isa<PointerType>(F.getReturnType()),
-          "gc.get.pointer.base must return a pointer", F);
     Check(FT->getParamType(0) == F.getReturnType(),
           "gc.get.pointer.base operand and result must be of the same type", F);
-    break;
-  }
-  case Intrinsic::experimental_gc_get_pointer_offset: {
-    FunctionType *FT = F.getFunctionType();
-    Check(FT->getNumParams() == 1, "wrong number of parameters", F);
-    Check(isa<PointerType>(FT->getParamType(0)),
-          "gc.get.pointer.offset operand must be a pointer", F);
-    Check(F.getReturnType()->isIntegerTy(),
-          "gc.get.pointer.offset must return integer", F);
-    break;
-  }
   }
 
   auto *N = F.getSubprogram();

diff  --git a/llvm/test/Verifier/intrinsic-bad-arg-type1.ll b/llvm/test/Verifier/intrinsic-bad-arg-type1.ll
index 7a052dbcf9684..829e3d6976a00 100644
--- a/llvm/test/Verifier/intrinsic-bad-arg-type1.ll
+++ b/llvm/test/Verifier/intrinsic-bad-arg-type1.ll
@@ -162,6 +162,29 @@ declare <4 x double> @llvm.aarch64.sve.sdot.v4f64(<4 x double>, <16 x half>, flo
 ; type signature = [llvm_anyvector_ty], [LLVMMatchType<0>, LLVMMatchType<0>, LLVMVectorOfBitcastsToInt<0>, llvm_anyint_ty]
 declare <4 x float> @llvm.riscv.vrgather.vv.v4f32.i32(<4 x float>, <4 x float>, i32, i32)
 
+; CHECK: intrinsic has incorrect number of args. Expected 1, but got 2
+; CHECK-NEXT: declare i64 @llvm.experimental.gc.get.pointer.offset.p0p0(ptr, ptr)
+declare i64 @llvm.experimental.gc.get.pointer.offset.p0p0(ptr, ptr)
+
+; CHECK: intrinsic return type expected i64, but got i32
+; CHECK-NEXT: declare i32 @llvm.experimental.gc.get.pointer.offset.p0(ptr)
+declare i32 @llvm.experimental.gc.get.pointer.offset.p0(ptr)
+
+; CHECK:intrinsic argument 0 type (overload type 0) expected any pointer type, but got i32
+; CHECK-NEXT: declare i64 @llvm.experimental.gc.get.pointer.offset.i32(i32)
+declare i64 @llvm.experimental.gc.get.pointer.offset.i32(i32)
+
+; CHECK: intrinsic has incorrect number of args. Expected 1, but got 2
+; CHECK-NEXT: declare ptr @llvm.experimental.gc.get.pointer.base.p0p0(ptr, ptr)
+declare ptr @llvm.experimental.gc.get.pointer.base.p0p0(ptr, ptr)
+
+; CHECK: intrinsic return type (overload type 0) expected any pointer type, but got i32
+; CHECK-NEXT: declare i32 @llvm.experimental.gc.get.pointer.base.i32.p0(ptr)
+declare i32 @llvm.experimental.gc.get.pointer.base.i32.p0(ptr)
+
+; CHECK: gc.get.pointer.base operand and result must be of the same type
+; CHECK-NEXT: ptr @llvm.experimental.gc.get.pointer.base.p0.p1
+declare ptr @llvm.experimental.gc.get.pointer.base.p0.p1(ptr addrspace(1))
 
 ;--- test1.ll
 ; RUN: not opt -S -passes=verify -disable-output 2>&1 < %t/test1.ll | FileCheck %t/test1.ll


        


More information about the llvm-commits mailing list