[llvm] [SPIR-V] Extend runLowerI1Comparisons to cover vector i1 types (PR #206409)

Arseniy Obolenskiy via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 28 23:57:45 PDT 2026


https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/206409

None

>From 08f648fc48d2a91a6673419349c557c9844d444b Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Mon, 29 Jun 2026 08:57:01 +0200
Subject: [PATCH] [SPIR-V] Extend runLowerI1Comparisons to cover vector i1
 types

---
 llvm/lib/Target/SPIRV/SPIRVRegularizer.cpp    |  2 +-
 .../SPIRV/passes/SPIRVRegularizer-i1-icmp.ll  | 20 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVRegularizer.cpp b/llvm/lib/Target/SPIRV/SPIRVRegularizer.cpp
index 04e062c4b2dff..e3ea827e3f4c6 100644
--- a/llvm/lib/Target/SPIRV/SPIRVRegularizer.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVRegularizer.cpp
@@ -162,7 +162,7 @@ static void runLowerI1Comparisons(Function &F) {
     if (!Cmp)
       continue;
 
-    bool IsI1 = Cmp->getOperand(0)->getType()->isIntegerTy(1);
+    bool IsI1 = Cmp->getOperand(0)->getType()->getScalarType()->isIntegerTy(1);
     if (!IsI1)
       continue;
 
diff --git a/llvm/test/CodeGen/SPIRV/passes/SPIRVRegularizer-i1-icmp.ll b/llvm/test/CodeGen/SPIRV/passes/SPIRVRegularizer-i1-icmp.ll
index 361a422c425c3..d72f3690383b0 100644
--- a/llvm/test/CodeGen/SPIRV/passes/SPIRVRegularizer-i1-icmp.ll
+++ b/llvm/test/CodeGen/SPIRV/passes/SPIRVRegularizer-i1-icmp.ll
@@ -22,3 +22,23 @@ define i1 @ugt_i1(i1 %p, i1 %q) {
   %r = icmp ugt i1 %p, %q
   ret i1 %r
 }
+
+define <4 x i1> @ult_v4i1(<4 x i1> %p, <4 x i1> %q) {
+; CHECK-LABEL: define <4 x i1> @ult_v4i1(
+; CHECK-SAME: <4 x i1> [[P:%.*]], <4 x i1> [[Q:%.*]]) {
+; CHECK:    [[NOT:%.*]] = xor <4 x i1> [[P]], splat (i1 true)
+; CHECK:    [[R:%.*]] = and <4 x i1> [[Q]], [[NOT]]
+; CHECK:    ret <4 x i1> [[R]]
+  %r = icmp ult <4 x i1> %p, %q
+  ret <4 x i1> %r
+}
+
+define <4 x i1> @ugt_v4i1(<4 x i1> %p, <4 x i1> %q) {
+; CHECK-LABEL: define <4 x i1> @ugt_v4i1(
+; CHECK-SAME: <4 x i1> [[P:%.*]], <4 x i1> [[Q:%.*]]) {
+; CHECK:    [[NOT:%.*]] = xor <4 x i1> [[Q]], splat (i1 true)
+; CHECK:    [[R:%.*]] = and <4 x i1> [[P]], [[NOT]]
+; CHECK:    ret <4 x i1> [[R]]
+  %r = icmp ugt <4 x i1> %p, %q
+  ret <4 x i1> %r
+}



More information about the llvm-commits mailing list