1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 @d = external global <16 x i32>
4 @c = external global <32 x i32>
7 ; CHECK: v{{[0-9]+}}.b = vpacke(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
8 define void @test1(<16 x i32> %a, <16 x i32> %b) #0 {
10 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackeb(<16 x i32> %a, <16 x i32> %b)
11 store <16 x i32> %0, <16 x i32>* @d, align 64
16 ; CHECK: v{{[0-9]+}}.h = vpacke(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
17 define void @test2(<16 x i32> %a, <16 x i32> %b) #0 {
19 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackeh(<16 x i32> %a, <16 x i32> %b)
20 store <16 x i32> %0, <16 x i32>* @d, align 64
25 ; CHECK: v{{[0-9]+}}.ub = vpack(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
26 define void @test3(<16 x i32> %a, <16 x i32> %b) #0 {
28 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackhub.sat(<16 x i32> %a, <16 x i32> %b)
29 store <16 x i32> %0, <16 x i32>* @d, align 64
34 ; CHECK: v{{[0-9]+}}.b = vpack(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
35 define void @test4(<16 x i32> %a, <16 x i32> %b) #0 {
37 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackhb.sat(<16 x i32> %a, <16 x i32> %b)
38 store <16 x i32> %0, <16 x i32>* @d, align 64
43 ; CHECK: v{{[0-9]+}}.uh = vpack(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat
44 define void @test5(<16 x i32> %a, <16 x i32> %b) #0 {
46 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackwuh.sat(<16 x i32> %a, <16 x i32> %b)
47 store <16 x i32> %0, <16 x i32>* @d, align 64
52 ; CHECK: v{{[0-9]+}}.h = vpack(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat
53 define void @test6(<16 x i32> %a, <16 x i32> %b) #0 {
55 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackwh.sat(<16 x i32> %a, <16 x i32> %b)
56 store <16 x i32> %0, <16 x i32>* @d, align 64
61 ; CHECK: v{{[0-9]+}}.b = vpacko(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
62 define void @test7(<16 x i32> %a, <16 x i32> %b) #0 {
64 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackob(<16 x i32> %a, <16 x i32> %b)
65 store <16 x i32> %0, <16 x i32>* @d, align 64
70 ; CHECK: v{{[0-9]+}}.h = vpacko(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
71 define void @test8(<16 x i32> %a, <16 x i32> %b) #0 {
73 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackoh(<16 x i32> %a, <16 x i32> %b)
74 store <16 x i32> %0, <16 x i32>* @d, align 64
79 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vunpack(v{{[0-9]+}}.ub)
80 define void @test9(<16 x i32> %a) #0 {
82 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32> %a)
83 store <32 x i32> %0, <32 x i32>* @c, align 128
87 ; CHECK-LABEL: test10:
88 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vunpack(v{{[0-9]+}}.uh)
89 define void @test10(<16 x i32> %a) #0 {
91 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32> %a)
92 store <32 x i32> %0, <32 x i32>* @c, align 128
96 ; CHECK-LABEL: test11:
97 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vunpack(v{{[0-9]+}}.b)
98 define void @test11(<16 x i32> %a) #0 {
100 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32> %a)
101 store <32 x i32> %0, <32 x i32>* @c, align 128
105 ; CHECK-LABEL: test12:
106 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vunpack(v{{[0-9]+}}.h)
107 define void @test12(<16 x i32> %a) #0 {
109 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32> %a)
110 store <32 x i32> %0, <32 x i32>* @c, align 128
114 ; CHECK-LABEL: test13:
115 ; CHECK: v{{[0-9]+}}.h = vdeal(v{{[0-9]+}}.h)
116 define void @test13(<16 x i32> %a) #0 {
118 %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32> %a)
119 store <16 x i32> %0, <16 x i32>* @d, align 64
123 ; CHECK-LABEL: test14:
124 ; CHECK: v{{[0-9]+}}.b = vdeal(v{{[0-9]+}}.b)
125 define void @test14(<16 x i32> %a) #0 {
127 %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32> %a)
128 store <16 x i32> %0, <16 x i32>* @d, align 64
132 ; CHECK-LABEL: test15:
133 ; CHECK: v{{[0-9]+}}.h = vshuff(v{{[0-9]+}}.h)
134 define void @test15(<16 x i32> %a) #0 {
136 %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32> %a)
137 store <16 x i32> %0, <16 x i32>* @d, align 64
141 ; CHECK-LABEL: test16:
142 ; CHECK: v{{[0-9]+}}.b = vshuff(v{{[0-9]+}}.b)
143 define void @test16(<16 x i32> %a) #0 {
145 %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32> %a)
146 store <16 x i32> %0, <16 x i32>* @d, align 64
150 declare <16 x i32> @llvm.hexagon.V6.vpackeb(<16 x i32>, <16 x i32>) #0
151 declare <16 x i32> @llvm.hexagon.V6.vpackeh(<16 x i32>, <16 x i32>) #0
152 declare <16 x i32> @llvm.hexagon.V6.vpackhub.sat(<16 x i32>, <16 x i32>) #0
153 declare <16 x i32> @llvm.hexagon.V6.vpackhb.sat(<16 x i32>, <16 x i32>) #0
154 declare <16 x i32> @llvm.hexagon.V6.vpackwuh.sat(<16 x i32>, <16 x i32>) #0
155 declare <16 x i32> @llvm.hexagon.V6.vpackwh.sat(<16 x i32>, <16 x i32>) #0
156 declare <16 x i32> @llvm.hexagon.V6.vpackob(<16 x i32>, <16 x i32>) #0
157 declare <16 x i32> @llvm.hexagon.V6.vpackoh(<16 x i32>, <16 x i32>) #0
158 declare <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32>) #0
159 declare <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32>) #0
160 declare <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32>) #0
161 declare <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32>) #0
162 declare <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32>) #0
163 declare <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32>) #0
164 declare <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32>) #0
165 declare <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32>) #0
167 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length64b" }