[llvm] [Hexagon] Handle truncate of v64i32 -> v64i1 when Hvx is enabled (PR #164931)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 24 01:26:38 PDT 2025
https://github.com/pkarveti updated https://github.com/llvm/llvm-project/pull/164931
>From e2fb21b6b868c35ac00180db05090de0293b4ada Mon Sep 17 00:00:00 2001
From: pavani karveti <quic_pkarveti at quicinc.com>
Date: Wed, 15 Oct 2025 00:40:20 -0700
Subject: [PATCH] [Hexagon] Handle truncate of v64i32 -> v64i1 when Hvx is
enabled
Change-Id: I1eec8b87304f7bf6fcb3b2cd1acbebfd3075afb2
---
llvm/lib/Target/Hexagon/HexagonPatternsHVX.td | 3 +++
.../CodeGen/Hexagon/isel/trunc-vNi1-HVX.ll | 18 ++++++++++++++++++
2 files changed, 21 insertions(+)
create mode 100644 llvm/test/CodeGen/Hexagon/isel/trunc-vNi1-HVX.ll
diff --git a/llvm/lib/Target/Hexagon/HexagonPatternsHVX.td b/llvm/lib/Target/Hexagon/HexagonPatternsHVX.td
index 1637b91f1fa12..d19920cfc9ea0 100644
--- a/llvm/lib/Target/Hexagon/HexagonPatternsHVX.td
+++ b/llvm/lib/Target/Hexagon/HexagonPatternsHVX.td
@@ -612,6 +612,9 @@ let Predicates = [UseHVX] in {
(V6_vandvrt HvxVR:$Vs, (ToI32 0x01010101))>;
def: Pat<(VecQ32 (trunc HVI32:$Vs)),
(V6_vandvrt HvxVR:$Vs, (ToI32 0x01010101))>;
+ def: Pat<(VecQ16 (trunc HWI32:$Vss)),
+ (Combineq(VecQ32(V6_vandvrt (HiVec $Vss), (ToI32 0x01010101))),
+ (VecQ32 (V6_vandvrt (LoVec $Vss), (ToI32 0x01010101))))>;
}
let Predicates = [UseHVX] in {
diff --git a/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1-HVX.ll b/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1-HVX.ll
new file mode 100644
index 0000000000000..1491729a17f30
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1-HVX.ll
@@ -0,0 +1,18 @@
+; RUN: llc --mtriple=hexagon -mattr=+hvxv79,+hvx-length128b < %s | FileCheck %s
+
+define void @f5(<64 x i32> %a0, ptr %a1) {
+; CHECK-LABEL: f5:
+; CHECK: [[REG0:(r[0-9]+)]] = ##16843009
+; CHECK-DAG: q[[Q0:[0-9]+]] = vand(v{{[0-9]+}},[[REG0]])
+; CHECK-DAG: q[[Q1:[0-9]+]] = vand(v{{[0-9]+}},[[REG0]])
+; CHECK: v{{[0-9]+}}.b = vpacke(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
+; CHECK: v{{[0-9]+}}.b = vpacke(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
+; CHECK: v[[VROR:[0-9]+]] = vror(v{{[0-9]+}},r{{[0-9]+}})
+; CHECK: v[[VOR:[0-9]+]] = vor(v[[VROR]],v{{[0-9]+}})
+; CHECK: q{{[0-9]+}} = vand(v[[VOR]],r{{[0-9]+}})
+b0:
+ %v0 = trunc <64 x i32> %a0 to <64 x i1>
+ store <64 x i1> %v0, ptr %a1, align 1
+ ret void
+}
+
More information about the llvm-commits
mailing list