[mips][msa] Added support for matching mulv, nlzc, sll, sra, srl, and subv from norma...
[oota-llvm.git] / test / CodeGen / Mips / msa / i8.ll
1 ; Test the MSA intrinsics that are encoded with the I8 instruction format.
2
3 ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck %s
4
5 @llvm_mips_andi_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
6 @llvm_mips_andi_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
7
8 define void @llvm_mips_andi_b_test() nounwind {
9 entry:
10   %0 = load <16 x i8>* @llvm_mips_andi_b_ARG1
11   %1 = tail call <16 x i8> @llvm.mips.andi.b(<16 x i8> %0, i32 25)
12   store <16 x i8> %1, <16 x i8>* @llvm_mips_andi_b_RES
13   ret void
14 }
15
16 declare <16 x i8> @llvm.mips.andi.b(<16 x i8>, i32) nounwind
17
18 ; CHECK: llvm_mips_andi_b_test:
19 ; CHECK: ld.b
20 ; CHECK: andi.b
21 ; CHECK: st.b
22 ; CHECK: .size llvm_mips_andi_b_test
23 ;
24 @llvm_mips_bmnzi_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
25 @llvm_mips_bmnzi_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
26
27 define void @llvm_mips_bmnzi_b_test() nounwind {
28 entry:
29   %0 = load <16 x i8>* @llvm_mips_bmnzi_b_ARG1
30   %1 = tail call <16 x i8> @llvm.mips.bmnzi.b(<16 x i8> %0, i32 25)
31   store <16 x i8> %1, <16 x i8>* @llvm_mips_bmnzi_b_RES
32   ret void
33 }
34
35 declare <16 x i8> @llvm.mips.bmnzi.b(<16 x i8>, i32) nounwind
36
37 ; CHECK: llvm_mips_bmnzi_b_test:
38 ; CHECK: ld.b
39 ; CHECK: bmnzi.b
40 ; CHECK: st.b
41 ; CHECK: .size llvm_mips_bmnzi_b_test
42 ;
43 @llvm_mips_bmzi_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
44 @llvm_mips_bmzi_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
45
46 define void @llvm_mips_bmzi_b_test() nounwind {
47 entry:
48   %0 = load <16 x i8>* @llvm_mips_bmzi_b_ARG1
49   %1 = tail call <16 x i8> @llvm.mips.bmzi.b(<16 x i8> %0, i32 25)
50   store <16 x i8> %1, <16 x i8>* @llvm_mips_bmzi_b_RES
51   ret void
52 }
53
54 declare <16 x i8> @llvm.mips.bmzi.b(<16 x i8>, i32) nounwind
55
56 ; CHECK: llvm_mips_bmzi_b_test:
57 ; CHECK: ld.b
58 ; CHECK: bmzi.b
59 ; CHECK: st.b
60 ; CHECK: .size llvm_mips_bmzi_b_test
61 ;
62 @llvm_mips_bseli_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
63 @llvm_mips_bseli_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
64
65 define void @llvm_mips_bseli_b_test() nounwind {
66 entry:
67   %0 = load <16 x i8>* @llvm_mips_bseli_b_ARG1
68   %1 = tail call <16 x i8> @llvm.mips.bseli.b(<16 x i8> %0, i32 25)
69   store <16 x i8> %1, <16 x i8>* @llvm_mips_bseli_b_RES
70   ret void
71 }
72
73 declare <16 x i8> @llvm.mips.bseli.b(<16 x i8>, i32) nounwind
74
75 ; CHECK: llvm_mips_bseli_b_test:
76 ; CHECK: ld.b
77 ; CHECK: bseli.b
78 ; CHECK: st.b
79 ; CHECK: .size llvm_mips_bseli_b_test
80 ;
81 @llvm_mips_nori_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
82 @llvm_mips_nori_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
83
84 define void @llvm_mips_nori_b_test() nounwind {
85 entry:
86   %0 = load <16 x i8>* @llvm_mips_nori_b_ARG1
87   %1 = tail call <16 x i8> @llvm.mips.nori.b(<16 x i8> %0, i32 25)
88   store <16 x i8> %1, <16 x i8>* @llvm_mips_nori_b_RES
89   ret void
90 }
91
92 declare <16 x i8> @llvm.mips.nori.b(<16 x i8>, i32) nounwind
93
94 ; CHECK: llvm_mips_nori_b_test:
95 ; CHECK: ld.b
96 ; CHECK: nori.b
97 ; CHECK: st.b
98 ; CHECK: .size llvm_mips_nori_b_test
99 ;
100 @llvm_mips_ori_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
101 @llvm_mips_ori_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
102
103 define void @llvm_mips_ori_b_test() nounwind {
104 entry:
105   %0 = load <16 x i8>* @llvm_mips_ori_b_ARG1
106   %1 = tail call <16 x i8> @llvm.mips.ori.b(<16 x i8> %0, i32 25)
107   store <16 x i8> %1, <16 x i8>* @llvm_mips_ori_b_RES
108   ret void
109 }
110
111 declare <16 x i8> @llvm.mips.ori.b(<16 x i8>, i32) nounwind
112
113 ; CHECK: llvm_mips_ori_b_test:
114 ; CHECK: ld.b
115 ; CHECK: ori.b
116 ; CHECK: st.b
117 ; CHECK: .size llvm_mips_ori_b_test
118 ;
119 @llvm_mips_shf_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
120 @llvm_mips_shf_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
121
122 define void @llvm_mips_shf_b_test() nounwind {
123 entry:
124   %0 = load <16 x i8>* @llvm_mips_shf_b_ARG1
125   %1 = tail call <16 x i8> @llvm.mips.shf.b(<16 x i8> %0, i32 25)
126   store <16 x i8> %1, <16 x i8>* @llvm_mips_shf_b_RES
127   ret void
128 }
129
130 declare <16 x i8> @llvm.mips.shf.b(<16 x i8>, i32) nounwind
131
132 ; CHECK: llvm_mips_shf_b_test:
133 ; CHECK: ld.b
134 ; CHECK: shf.b
135 ; CHECK: st.b
136 ; CHECK: .size llvm_mips_shf_b_test
137 ;
138 @llvm_mips_shf_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
139 @llvm_mips_shf_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
140
141 define void @llvm_mips_shf_h_test() nounwind {
142 entry:
143   %0 = load <8 x i16>* @llvm_mips_shf_h_ARG1
144   %1 = tail call <8 x i16> @llvm.mips.shf.h(<8 x i16> %0, i32 25)
145   store <8 x i16> %1, <8 x i16>* @llvm_mips_shf_h_RES
146   ret void
147 }
148
149 declare <8 x i16> @llvm.mips.shf.h(<8 x i16>, i32) nounwind
150
151 ; CHECK: llvm_mips_shf_h_test:
152 ; CHECK: ld.h
153 ; CHECK: shf.h
154 ; CHECK: st.h
155 ; CHECK: .size llvm_mips_shf_h_test
156 ;
157 @llvm_mips_shf_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
158 @llvm_mips_shf_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
159
160 define void @llvm_mips_shf_w_test() nounwind {
161 entry:
162   %0 = load <4 x i32>* @llvm_mips_shf_w_ARG1
163   %1 = tail call <4 x i32> @llvm.mips.shf.w(<4 x i32> %0, i32 25)
164   store <4 x i32> %1, <4 x i32>* @llvm_mips_shf_w_RES
165   ret void
166 }
167
168 declare <4 x i32> @llvm.mips.shf.w(<4 x i32>, i32) nounwind
169
170 ; CHECK: llvm_mips_shf_w_test:
171 ; CHECK: ld.w
172 ; CHECK: shf.w
173 ; CHECK: st.w
174 ; CHECK: .size llvm_mips_shf_w_test
175 ;
176 @llvm_mips_xori_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
177 @llvm_mips_xori_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
178
179 define void @llvm_mips_xori_b_test() nounwind {
180 entry:
181   %0 = load <16 x i8>* @llvm_mips_xori_b_ARG1
182   %1 = tail call <16 x i8> @llvm.mips.xori.b(<16 x i8> %0, i32 25)
183   store <16 x i8> %1, <16 x i8>* @llvm_mips_xori_b_RES
184   ret void
185 }
186
187 declare <16 x i8> @llvm.mips.xori.b(<16 x i8>, i32) nounwind
188
189 ; CHECK: llvm_mips_xori_b_test:
190 ; CHECK: ld.b
191 ; CHECK: xori.b
192 ; CHECK: st.b
193 ; CHECK: .size llvm_mips_xori_b_test
194 ;