[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / Hexagon / intrinsics-v60-permute.ll
blob7a16d77d8dd495e8b4229e12220e1dbf9680dd2b
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 @d = external global <16 x i32>
4 @c = external global <32 x i32>
6 ; CHECK-LABEL: test1:
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 {
9 entry:
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, ptr @d, align 64
12   ret void
15 ; CHECK-LABEL: test2:
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 {
18 entry:
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, ptr @d, align 64
21   ret void
24 ; CHECK-LABEL: test3:
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 {
27 entry:
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, ptr @d, align 64
30   ret void
33 ; CHECK-LABEL: test4:
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 {
36 entry:
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, ptr @d, align 64
39   ret void
42 ; CHECK-LABEL: test5:
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 {
45 entry:
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, ptr @d, align 64
48   ret void
51 ; CHECK-LABEL: test6:
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 {
54 entry:
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, ptr @d, align 64
57   ret void
60 ; CHECK-LABEL: test7:
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 {
63 entry:
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, ptr @d, align 64
66   ret void
69 ; CHECK-LABEL: test8:
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 {
72 entry:
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, ptr @d, align 64
75   ret void
78 ; CHECK-LABEL: test9:
79 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vunpack(v{{[0-9]+}}.ub)
80 define void @test9(<16 x i32> %a) #0 {
81 entry:
82   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32> %a)
83   store <32 x i32> %0, ptr @c, align 128
84   ret void
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 {
90 entry:
91   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32> %a)
92   store <32 x i32> %0, ptr @c, align 128
93   ret void
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 {
99 entry:
100   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32> %a)
101   store <32 x i32> %0, ptr @c, align 128
102   ret void
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 {
108 entry:
109   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32> %a)
110   store <32 x i32> %0, ptr @c, align 128
111   ret void
114 ; CHECK-LABEL: test13:
115 ; CHECK: v{{[0-9]+}}.h = vdeal(v{{[0-9]+}}.h)
116 define void @test13(<16 x i32> %a) #0 {
117 entry:
118   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32> %a)
119   store <16 x i32> %0, ptr @d, align 64
120   ret void
123 ; CHECK-LABEL: test14:
124 ; CHECK: v{{[0-9]+}}.b = vdeal(v{{[0-9]+}}.b)
125 define void @test14(<16 x i32> %a) #0 {
126 entry:
127   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32> %a)
128   store <16 x i32> %0, ptr @d, align 64
129   ret void
132 ; CHECK-LABEL: test15:
133 ; CHECK: v{{[0-9]+}}.h = vshuff(v{{[0-9]+}}.h)
134 define void @test15(<16 x i32> %a) #0 {
135 entry:
136   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32> %a)
137   store <16 x i32> %0, ptr @d, align 64
138   ret void
141 ; CHECK-LABEL: test16:
142 ; CHECK: v{{[0-9]+}}.b = vshuff(v{{[0-9]+}}.b)
143 define void @test16(<16 x i32> %a) #0 {
144 entry:
145   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32> %a)
146   store <16 x i32> %0, ptr @d, align 64
147   ret void
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" }