Skip to content

Commit dc06d69

Browse files
authored
[Hexagon] Handle truncate of v64i32 -> v64i1 when Hvx is enabled (#164931)
Fixes #160806
1 parent fa21fcb commit dc06d69

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

llvm/lib/Target/Hexagon/HexagonPatternsHVX.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,9 @@ let Predicates = [UseHVX] in {
612612
(V6_vandvrt HvxVR:$Vs, (ToI32 0x01010101))>;
613613
def: Pat<(VecQ32 (trunc HVI32:$Vs)),
614614
(V6_vandvrt HvxVR:$Vs, (ToI32 0x01010101))>;
615+
def: Pat<(VecQ16 (trunc HWI32:$Vss)),
616+
(Combineq(VecQ32(V6_vandvrt (HiVec $Vss), (ToI32 0x01010101))),
617+
(VecQ32 (V6_vandvrt (LoVec $Vss), (ToI32 0x01010101))))>;
615618
}
616619

617620
let Predicates = [UseHVX] in {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
; RUN: llc --mtriple=hexagon -mattr=+hvxv79,+hvx-length128b < %s | FileCheck %s
2+
3+
define void @f5(<64 x i32> %a0, ptr %a1) {
4+
; CHECK-LABEL: f5:
5+
; CHECK: [[REG0:(r[0-9]+)]] = ##16843009
6+
; CHECK-DAG: q[[Q0:[0-9]+]] = vand(v{{[0-9]+}},[[REG0]])
7+
; CHECK-DAG: q[[Q1:[0-9]+]] = vand(v{{[0-9]+}},[[REG0]])
8+
; CHECK: v{{[0-9]+}}.b = vpacke(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
9+
; CHECK: v{{[0-9]+}}.b = vpacke(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
10+
; CHECK: v[[VROR:[0-9]+]] = vror(v{{[0-9]+}},r{{[0-9]+}})
11+
; CHECK: v[[VOR:[0-9]+]] = vor(v[[VROR]],v{{[0-9]+}})
12+
; CHECK: q{{[0-9]+}} = vand(v[[VOR]],r{{[0-9]+}})
13+
b0:
14+
%v0 = trunc <64 x i32> %a0 to <64 x i1>
15+
store <64 x i1> %v0, ptr %a1, align 1
16+
ret void
17+
}
18+

0 commit comments

Comments
 (0)