[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