blob: 7c45b2bf9432305826e8b6aa119cc5268e239ce8 [file] [log] [blame]
Daniel Sanders2d999eb2013-08-28 10:02:29 +00001; Test the MSA intrinsics that are encoded with the 3R instruction format.
2; There are lots of these so this covers those beginning with 'b'
3
Daniel Sanders1b1e25b2013-09-27 10:08:31 +00004; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
Daniel Sanders1ede3002013-11-15 11:04:16 +00005; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
6; XFAIL: *
Jack Carterbabdcc82013-08-15 12:24:57 +00007
8@llvm_mips_bclr_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
9@llvm_mips_bclr_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
10@llvm_mips_bclr_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
11
12define void @llvm_mips_bclr_b_test() nounwind {
13entry:
14 %0 = load <16 x i8>* @llvm_mips_bclr_b_ARG1
15 %1 = load <16 x i8>* @llvm_mips_bclr_b_ARG2
16 %2 = tail call <16 x i8> @llvm.mips.bclr.b(<16 x i8> %0, <16 x i8> %1)
17 store <16 x i8> %2, <16 x i8>* @llvm_mips_bclr_b_RES
18 ret void
19}
20
21declare <16 x i8> @llvm.mips.bclr.b(<16 x i8>, <16 x i8>) nounwind
22
23; CHECK: llvm_mips_bclr_b_test:
24; CHECK: ld.b
25; CHECK: ld.b
26; CHECK: bclr.b
27; CHECK: st.b
28; CHECK: .size llvm_mips_bclr_b_test
29;
30@llvm_mips_bclr_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
31@llvm_mips_bclr_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
32@llvm_mips_bclr_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
33
34define void @llvm_mips_bclr_h_test() nounwind {
35entry:
36 %0 = load <8 x i16>* @llvm_mips_bclr_h_ARG1
37 %1 = load <8 x i16>* @llvm_mips_bclr_h_ARG2
38 %2 = tail call <8 x i16> @llvm.mips.bclr.h(<8 x i16> %0, <8 x i16> %1)
39 store <8 x i16> %2, <8 x i16>* @llvm_mips_bclr_h_RES
40 ret void
41}
42
43declare <8 x i16> @llvm.mips.bclr.h(<8 x i16>, <8 x i16>) nounwind
44
45; CHECK: llvm_mips_bclr_h_test:
46; CHECK: ld.h
47; CHECK: ld.h
48; CHECK: bclr.h
49; CHECK: st.h
50; CHECK: .size llvm_mips_bclr_h_test
51;
52@llvm_mips_bclr_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
53@llvm_mips_bclr_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
54@llvm_mips_bclr_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
55
56define void @llvm_mips_bclr_w_test() nounwind {
57entry:
58 %0 = load <4 x i32>* @llvm_mips_bclr_w_ARG1
59 %1 = load <4 x i32>* @llvm_mips_bclr_w_ARG2
60 %2 = tail call <4 x i32> @llvm.mips.bclr.w(<4 x i32> %0, <4 x i32> %1)
61 store <4 x i32> %2, <4 x i32>* @llvm_mips_bclr_w_RES
62 ret void
63}
64
65declare <4 x i32> @llvm.mips.bclr.w(<4 x i32>, <4 x i32>) nounwind
66
67; CHECK: llvm_mips_bclr_w_test:
68; CHECK: ld.w
69; CHECK: ld.w
70; CHECK: bclr.w
71; CHECK: st.w
72; CHECK: .size llvm_mips_bclr_w_test
73;
74@llvm_mips_bclr_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
75@llvm_mips_bclr_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
76@llvm_mips_bclr_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
77
78define void @llvm_mips_bclr_d_test() nounwind {
79entry:
80 %0 = load <2 x i64>* @llvm_mips_bclr_d_ARG1
81 %1 = load <2 x i64>* @llvm_mips_bclr_d_ARG2
82 %2 = tail call <2 x i64> @llvm.mips.bclr.d(<2 x i64> %0, <2 x i64> %1)
83 store <2 x i64> %2, <2 x i64>* @llvm_mips_bclr_d_RES
84 ret void
85}
86
87declare <2 x i64> @llvm.mips.bclr.d(<2 x i64>, <2 x i64>) nounwind
88
89; CHECK: llvm_mips_bclr_d_test:
90; CHECK: ld.d
91; CHECK: ld.d
92; CHECK: bclr.d
93; CHECK: st.d
94; CHECK: .size llvm_mips_bclr_d_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +000095
Jack Carterbabdcc82013-08-15 12:24:57 +000096@llvm_mips_binsl_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
Daniel Sandersd5f554f2013-10-30 15:45:42 +000097@llvm_mips_binsl_b_ARG2 = 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
98@llvm_mips_binsl_b_ARG3 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +000099@llvm_mips_binsl_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
100
101define void @llvm_mips_binsl_b_test() nounwind {
102entry:
103 %0 = load <16 x i8>* @llvm_mips_binsl_b_ARG1
104 %1 = load <16 x i8>* @llvm_mips_binsl_b_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000105 %2 = load <16 x i8>* @llvm_mips_binsl_b_ARG3
106 %3 = tail call <16 x i8> @llvm.mips.binsl.b(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2)
107 store <16 x i8> %3, <16 x i8>* @llvm_mips_binsl_b_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000108 ret void
109}
110
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000111declare <16 x i8> @llvm.mips.binsl.b(<16 x i8>, <16 x i8>, <16 x i8>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000112
113; CHECK: llvm_mips_binsl_b_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000114; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsl_b_ARG1)(
115; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsl_b_ARG2)(
116; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsl_b_ARG3)(
117; CHECK-DAG: ld.b [[R4:\$w[0-9]+]], 0([[R1]])
118; CHECK-DAG: ld.b [[R5:\$w[0-9]+]], 0([[R2]])
119; CHECK-DAG: ld.b [[R6:\$w[0-9]+]], 0([[R3]])
120; CHECK-DAG: binsl.b [[R4]], [[R5]], [[R6]]
121; CHECK-DAG: st.b [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000122; CHECK: .size llvm_mips_binsl_b_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000123
Jack Carterbabdcc82013-08-15 12:24:57 +0000124@llvm_mips_binsl_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000125@llvm_mips_binsl_h_ARG2 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
126@llvm_mips_binsl_h_ARG3 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000127@llvm_mips_binsl_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
128
129define void @llvm_mips_binsl_h_test() nounwind {
130entry:
131 %0 = load <8 x i16>* @llvm_mips_binsl_h_ARG1
132 %1 = load <8 x i16>* @llvm_mips_binsl_h_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000133 %2 = load <8 x i16>* @llvm_mips_binsl_h_ARG3
134 %3 = tail call <8 x i16> @llvm.mips.binsl.h(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2)
135 store <8 x i16> %3, <8 x i16>* @llvm_mips_binsl_h_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000136 ret void
137}
138
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000139declare <8 x i16> @llvm.mips.binsl.h(<8 x i16>, <8 x i16>, <8 x i16>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000140
141; CHECK: llvm_mips_binsl_h_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000142; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsl_h_ARG1)(
143; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsl_h_ARG2)(
144; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsl_h_ARG3)(
145; CHECK-DAG: ld.h [[R4:\$w[0-9]+]], 0([[R1]])
146; CHECK-DAG: ld.h [[R5:\$w[0-9]+]], 0([[R2]])
147; CHECK-DAG: ld.h [[R6:\$w[0-9]+]], 0([[R3]])
148; CHECK-DAG: binsl.h [[R4]], [[R5]], [[R6]]
149; CHECK-DAG: st.h [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000150; CHECK: .size llvm_mips_binsl_h_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000151
Jack Carterbabdcc82013-08-15 12:24:57 +0000152@llvm_mips_binsl_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000153@llvm_mips_binsl_w_ARG2 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
154@llvm_mips_binsl_w_ARG3 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000155@llvm_mips_binsl_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
156
157define void @llvm_mips_binsl_w_test() nounwind {
158entry:
159 %0 = load <4 x i32>* @llvm_mips_binsl_w_ARG1
160 %1 = load <4 x i32>* @llvm_mips_binsl_w_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000161 %2 = load <4 x i32>* @llvm_mips_binsl_w_ARG3
162 %3 = tail call <4 x i32> @llvm.mips.binsl.w(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2)
163 store <4 x i32> %3, <4 x i32>* @llvm_mips_binsl_w_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000164 ret void
165}
166
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000167declare <4 x i32> @llvm.mips.binsl.w(<4 x i32>, <4 x i32>, <4 x i32>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000168
169; CHECK: llvm_mips_binsl_w_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000170; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsl_w_ARG1)(
171; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsl_w_ARG2)(
172; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsl_w_ARG3)(
173; CHECK-DAG: ld.w [[R4:\$w[0-9]+]], 0([[R1]])
174; CHECK-DAG: ld.w [[R5:\$w[0-9]+]], 0([[R2]])
175; CHECK-DAG: ld.w [[R6:\$w[0-9]+]], 0([[R3]])
176; CHECK-DAG: binsl.w [[R4]], [[R5]], [[R6]]
177; CHECK-DAG: st.w [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000178; CHECK: .size llvm_mips_binsl_w_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000179
Jack Carterbabdcc82013-08-15 12:24:57 +0000180@llvm_mips_binsl_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000181@llvm_mips_binsl_d_ARG2 = global <2 x i64> <i64 0, i64 1>, align 16
182@llvm_mips_binsl_d_ARG3 = global <2 x i64> <i64 2, i64 3>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000183@llvm_mips_binsl_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
184
185define void @llvm_mips_binsl_d_test() nounwind {
186entry:
187 %0 = load <2 x i64>* @llvm_mips_binsl_d_ARG1
188 %1 = load <2 x i64>* @llvm_mips_binsl_d_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000189 %2 = load <2 x i64>* @llvm_mips_binsl_d_ARG3
190 %3 = tail call <2 x i64> @llvm.mips.binsl.d(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2)
191 store <2 x i64> %3, <2 x i64>* @llvm_mips_binsl_d_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000192 ret void
193}
194
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000195declare <2 x i64> @llvm.mips.binsl.d(<2 x i64>, <2 x i64>, <2 x i64>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000196
197; CHECK: llvm_mips_binsl_d_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000198; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsl_d_ARG1)(
199; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsl_d_ARG2)(
200; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsl_d_ARG3)(
201; CHECK-DAG: ld.d [[R4:\$w[0-9]+]], 0([[R1]])
202; CHECK-DAG: ld.d [[R5:\$w[0-9]+]], 0([[R2]])
203; CHECK-DAG: ld.d [[R6:\$w[0-9]+]], 0([[R3]])
204; CHECK-DAG: binsl.d [[R4]], [[R5]], [[R6]]
205; CHECK-DAG: st.d [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000206; CHECK: .size llvm_mips_binsl_d_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000207
Jack Carterbabdcc82013-08-15 12:24:57 +0000208@llvm_mips_binsr_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
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000209@llvm_mips_binsr_b_ARG2 = 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
210@llvm_mips_binsr_b_ARG3 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000211@llvm_mips_binsr_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
212
213define void @llvm_mips_binsr_b_test() nounwind {
214entry:
215 %0 = load <16 x i8>* @llvm_mips_binsr_b_ARG1
216 %1 = load <16 x i8>* @llvm_mips_binsr_b_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000217 %2 = load <16 x i8>* @llvm_mips_binsr_b_ARG3
218 %3 = tail call <16 x i8> @llvm.mips.binsr.b(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2)
219 store <16 x i8> %3, <16 x i8>* @llvm_mips_binsr_b_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000220 ret void
221}
222
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000223declare <16 x i8> @llvm.mips.binsr.b(<16 x i8>, <16 x i8>, <16 x i8>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000224
225; CHECK: llvm_mips_binsr_b_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000226; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsr_b_ARG1)(
227; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsr_b_ARG2)(
228; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsr_b_ARG3)(
229; CHECK-DAG: ld.b [[R4:\$w[0-9]+]], 0([[R1]])
230; CHECK-DAG: ld.b [[R5:\$w[0-9]+]], 0([[R2]])
231; CHECK-DAG: ld.b [[R6:\$w[0-9]+]], 0([[R3]])
232; CHECK-DAG: binsr.b [[R4]], [[R5]], [[R6]]
233; CHECK-DAG: st.b [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000234; CHECK: .size llvm_mips_binsr_b_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000235
Jack Carterbabdcc82013-08-15 12:24:57 +0000236@llvm_mips_binsr_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000237@llvm_mips_binsr_h_ARG2 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
238@llvm_mips_binsr_h_ARG3 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000239@llvm_mips_binsr_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
240
241define void @llvm_mips_binsr_h_test() nounwind {
242entry:
243 %0 = load <8 x i16>* @llvm_mips_binsr_h_ARG1
244 %1 = load <8 x i16>* @llvm_mips_binsr_h_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000245 %2 = load <8 x i16>* @llvm_mips_binsr_h_ARG3
246 %3 = tail call <8 x i16> @llvm.mips.binsr.h(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2)
247 store <8 x i16> %3, <8 x i16>* @llvm_mips_binsr_h_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000248 ret void
249}
250
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000251declare <8 x i16> @llvm.mips.binsr.h(<8 x i16>, <8 x i16>, <8 x i16>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000252
253; CHECK: llvm_mips_binsr_h_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000254; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsr_h_ARG1)(
255; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsr_h_ARG2)(
256; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsr_h_ARG3)(
257; CHECK-DAG: ld.h [[R4:\$w[0-9]+]], 0([[R1]])
258; CHECK-DAG: ld.h [[R5:\$w[0-9]+]], 0([[R2]])
259; CHECK-DAG: ld.h [[R6:\$w[0-9]+]], 0([[R3]])
260; CHECK-DAG: binsr.h [[R4]], [[R5]], [[R6]]
261; CHECK-DAG: st.h [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000262; CHECK: .size llvm_mips_binsr_h_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000263
Jack Carterbabdcc82013-08-15 12:24:57 +0000264@llvm_mips_binsr_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000265@llvm_mips_binsr_w_ARG2 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
266@llvm_mips_binsr_w_ARG3 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000267@llvm_mips_binsr_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
268
269define void @llvm_mips_binsr_w_test() nounwind {
270entry:
271 %0 = load <4 x i32>* @llvm_mips_binsr_w_ARG1
272 %1 = load <4 x i32>* @llvm_mips_binsr_w_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000273 %2 = load <4 x i32>* @llvm_mips_binsr_w_ARG3
274 %3 = tail call <4 x i32> @llvm.mips.binsr.w(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2)
275 store <4 x i32> %3, <4 x i32>* @llvm_mips_binsr_w_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000276 ret void
277}
278
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000279declare <4 x i32> @llvm.mips.binsr.w(<4 x i32>, <4 x i32>, <4 x i32>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000280
281; CHECK: llvm_mips_binsr_w_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000282; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsr_w_ARG1)(
283; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsr_w_ARG2)(
284; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsr_w_ARG3)(
285; CHECK-DAG: ld.w [[R4:\$w[0-9]+]], 0([[R1]])
286; CHECK-DAG: ld.w [[R5:\$w[0-9]+]], 0([[R2]])
287; CHECK-DAG: ld.w [[R6:\$w[0-9]+]], 0([[R3]])
288; CHECK-DAG: binsr.w [[R4]], [[R5]], [[R6]]
289; CHECK-DAG: st.w [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000290; CHECK: .size llvm_mips_binsr_w_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000291
Jack Carterbabdcc82013-08-15 12:24:57 +0000292@llvm_mips_binsr_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000293@llvm_mips_binsr_d_ARG2 = global <2 x i64> <i64 0, i64 1>, align 16
294@llvm_mips_binsr_d_ARG3 = global <2 x i64> <i64 2, i64 3>, align 16
Jack Carterbabdcc82013-08-15 12:24:57 +0000295@llvm_mips_binsr_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
296
297define void @llvm_mips_binsr_d_test() nounwind {
298entry:
299 %0 = load <2 x i64>* @llvm_mips_binsr_d_ARG1
300 %1 = load <2 x i64>* @llvm_mips_binsr_d_ARG2
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000301 %2 = load <2 x i64>* @llvm_mips_binsr_d_ARG3
302 %3 = tail call <2 x i64> @llvm.mips.binsr.d(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2)
303 store <2 x i64> %3, <2 x i64>* @llvm_mips_binsr_d_RES
Jack Carterbabdcc82013-08-15 12:24:57 +0000304 ret void
305}
306
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000307declare <2 x i64> @llvm.mips.binsr.d(<2 x i64>, <2 x i64>, <2 x i64>) nounwind
Jack Carterbabdcc82013-08-15 12:24:57 +0000308
309; CHECK: llvm_mips_binsr_d_test:
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000310; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsr_d_ARG1)(
311; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsr_d_ARG2)(
312; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_binsr_d_ARG3)(
313; CHECK-DAG: ld.d [[R4:\$w[0-9]+]], 0([[R1]])
314; CHECK-DAG: ld.d [[R5:\$w[0-9]+]], 0([[R2]])
315; CHECK-DAG: ld.d [[R6:\$w[0-9]+]], 0([[R3]])
316; CHECK-DAG: binsr.d [[R4]], [[R5]], [[R6]]
317; CHECK-DAG: st.d [[R4]], 0(
Jack Carterbabdcc82013-08-15 12:24:57 +0000318; CHECK: .size llvm_mips_binsr_d_test
Daniel Sandersd5f554f2013-10-30 15:45:42 +0000319
Jack Carterbabdcc82013-08-15 12:24:57 +0000320@llvm_mips_bneg_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
321@llvm_mips_bneg_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
322@llvm_mips_bneg_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
323
324define void @llvm_mips_bneg_b_test() nounwind {
325entry:
326 %0 = load <16 x i8>* @llvm_mips_bneg_b_ARG1
327 %1 = load <16 x i8>* @llvm_mips_bneg_b_ARG2
328 %2 = tail call <16 x i8> @llvm.mips.bneg.b(<16 x i8> %0, <16 x i8> %1)
329 store <16 x i8> %2, <16 x i8>* @llvm_mips_bneg_b_RES
330 ret void
331}
332
333declare <16 x i8> @llvm.mips.bneg.b(<16 x i8>, <16 x i8>) nounwind
334
335; CHECK: llvm_mips_bneg_b_test:
336; CHECK: ld.b
337; CHECK: ld.b
338; CHECK: bneg.b
339; CHECK: st.b
340; CHECK: .size llvm_mips_bneg_b_test
341;
342@llvm_mips_bneg_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
343@llvm_mips_bneg_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
344@llvm_mips_bneg_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
345
346define void @llvm_mips_bneg_h_test() nounwind {
347entry:
348 %0 = load <8 x i16>* @llvm_mips_bneg_h_ARG1
349 %1 = load <8 x i16>* @llvm_mips_bneg_h_ARG2
350 %2 = tail call <8 x i16> @llvm.mips.bneg.h(<8 x i16> %0, <8 x i16> %1)
351 store <8 x i16> %2, <8 x i16>* @llvm_mips_bneg_h_RES
352 ret void
353}
354
355declare <8 x i16> @llvm.mips.bneg.h(<8 x i16>, <8 x i16>) nounwind
356
357; CHECK: llvm_mips_bneg_h_test:
358; CHECK: ld.h
359; CHECK: ld.h
360; CHECK: bneg.h
361; CHECK: st.h
362; CHECK: .size llvm_mips_bneg_h_test
363;
364@llvm_mips_bneg_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
365@llvm_mips_bneg_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
366@llvm_mips_bneg_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
367
368define void @llvm_mips_bneg_w_test() nounwind {
369entry:
370 %0 = load <4 x i32>* @llvm_mips_bneg_w_ARG1
371 %1 = load <4 x i32>* @llvm_mips_bneg_w_ARG2
372 %2 = tail call <4 x i32> @llvm.mips.bneg.w(<4 x i32> %0, <4 x i32> %1)
373 store <4 x i32> %2, <4 x i32>* @llvm_mips_bneg_w_RES
374 ret void
375}
376
377declare <4 x i32> @llvm.mips.bneg.w(<4 x i32>, <4 x i32>) nounwind
378
379; CHECK: llvm_mips_bneg_w_test:
380; CHECK: ld.w
381; CHECK: ld.w
382; CHECK: bneg.w
383; CHECK: st.w
384; CHECK: .size llvm_mips_bneg_w_test
385;
386@llvm_mips_bneg_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
387@llvm_mips_bneg_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
388@llvm_mips_bneg_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
389
390define void @llvm_mips_bneg_d_test() nounwind {
391entry:
392 %0 = load <2 x i64>* @llvm_mips_bneg_d_ARG1
393 %1 = load <2 x i64>* @llvm_mips_bneg_d_ARG2
394 %2 = tail call <2 x i64> @llvm.mips.bneg.d(<2 x i64> %0, <2 x i64> %1)
395 store <2 x i64> %2, <2 x i64>* @llvm_mips_bneg_d_RES
396 ret void
397}
398
399declare <2 x i64> @llvm.mips.bneg.d(<2 x i64>, <2 x i64>) nounwind
400
401; CHECK: llvm_mips_bneg_d_test:
402; CHECK: ld.d
403; CHECK: ld.d
404; CHECK: bneg.d
405; CHECK: st.d
406; CHECK: .size llvm_mips_bneg_d_test
407;
408@llvm_mips_bset_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
409@llvm_mips_bset_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
410@llvm_mips_bset_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
411
412define void @llvm_mips_bset_b_test() nounwind {
413entry:
414 %0 = load <16 x i8>* @llvm_mips_bset_b_ARG1
415 %1 = load <16 x i8>* @llvm_mips_bset_b_ARG2
416 %2 = tail call <16 x i8> @llvm.mips.bset.b(<16 x i8> %0, <16 x i8> %1)
417 store <16 x i8> %2, <16 x i8>* @llvm_mips_bset_b_RES
418 ret void
419}
420
421declare <16 x i8> @llvm.mips.bset.b(<16 x i8>, <16 x i8>) nounwind
422
423; CHECK: llvm_mips_bset_b_test:
424; CHECK: ld.b
425; CHECK: ld.b
426; CHECK: bset.b
427; CHECK: st.b
428; CHECK: .size llvm_mips_bset_b_test
429;
430@llvm_mips_bset_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
431@llvm_mips_bset_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
432@llvm_mips_bset_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
433
434define void @llvm_mips_bset_h_test() nounwind {
435entry:
436 %0 = load <8 x i16>* @llvm_mips_bset_h_ARG1
437 %1 = load <8 x i16>* @llvm_mips_bset_h_ARG2
438 %2 = tail call <8 x i16> @llvm.mips.bset.h(<8 x i16> %0, <8 x i16> %1)
439 store <8 x i16> %2, <8 x i16>* @llvm_mips_bset_h_RES
440 ret void
441}
442
443declare <8 x i16> @llvm.mips.bset.h(<8 x i16>, <8 x i16>) nounwind
444
445; CHECK: llvm_mips_bset_h_test:
446; CHECK: ld.h
447; CHECK: ld.h
448; CHECK: bset.h
449; CHECK: st.h
450; CHECK: .size llvm_mips_bset_h_test
451;
452@llvm_mips_bset_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
453@llvm_mips_bset_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
454@llvm_mips_bset_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
455
456define void @llvm_mips_bset_w_test() nounwind {
457entry:
458 %0 = load <4 x i32>* @llvm_mips_bset_w_ARG1
459 %1 = load <4 x i32>* @llvm_mips_bset_w_ARG2
460 %2 = tail call <4 x i32> @llvm.mips.bset.w(<4 x i32> %0, <4 x i32> %1)
461 store <4 x i32> %2, <4 x i32>* @llvm_mips_bset_w_RES
462 ret void
463}
464
465declare <4 x i32> @llvm.mips.bset.w(<4 x i32>, <4 x i32>) nounwind
466
467; CHECK: llvm_mips_bset_w_test:
468; CHECK: ld.w
469; CHECK: ld.w
470; CHECK: bset.w
471; CHECK: st.w
472; CHECK: .size llvm_mips_bset_w_test
473;
474@llvm_mips_bset_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
475@llvm_mips_bset_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
476@llvm_mips_bset_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
477
478define void @llvm_mips_bset_d_test() nounwind {
479entry:
480 %0 = load <2 x i64>* @llvm_mips_bset_d_ARG1
481 %1 = load <2 x i64>* @llvm_mips_bset_d_ARG2
482 %2 = tail call <2 x i64> @llvm.mips.bset.d(<2 x i64> %0, <2 x i64> %1)
483 store <2 x i64> %2, <2 x i64>* @llvm_mips_bset_d_RES
484 ret void
485}
486
487declare <2 x i64> @llvm.mips.bset.d(<2 x i64>, <2 x i64>) nounwind
488
489; CHECK: llvm_mips_bset_d_test:
490; CHECK: ld.d
491; CHECK: ld.d
492; CHECK: bset.d
493; CHECK: st.d
494; CHECK: .size llvm_mips_bset_d_test
495;