blob: 272cd424e2a2054fdd459178108680736b23a668 [file] [log] [blame]
Bob Wilsonb31a11b2010-08-20 04:54:02 +00001; RUN: llvm-dis < %s.bc | FileCheck %s
2
3; vmovls should be auto-upgraded to sext
4
5; CHECK: vmovls8
6; CHECK-NOT: arm.neon.vmovls.v8i16
7; CHECK: sext <8 x i8>
8
9; CHECK: vmovls16
10; CHECK-NOT: arm.neon.vmovls.v4i32
11; CHECK: sext <4 x i16>
12
13; CHECK: vmovls32
14; CHECK-NOT: arm.neon.vmovls.v2i64
15; CHECK: sext <2 x i32>
16
17; vmovlu should be auto-upgraded to zext
18
19; CHECK: vmovlu8
20; CHECK-NOT: arm.neon.vmovlu.v8i16
21; CHECK: zext <8 x i8>
22
23; CHECK: vmovlu16
24; CHECK-NOT: arm.neon.vmovlu.v4i32
25; CHECK: zext <4 x i16>
26
27; CHECK: vmovlu32
28; CHECK-NOT: arm.neon.vmovlu.v2i64
29; CHECK: zext <2 x i32>
Bob Wilson7a9ef442010-08-27 17:13:24 +000030
Bob Wilson04d6c282010-08-29 05:57:34 +000031; vaddl/vaddw should be auto-upgraded to add with sext/zext
32
33; CHECK: vaddls16
34; CHECK-NOT: arm.neon.vaddls.v4i32
35; CHECK: sext <4 x i16>
36; CHECK-NEXT: sext <4 x i16>
37; CHECK-NEXT: add <4 x i32>
38
39; CHECK: vaddlu32
40; CHECK-NOT: arm.neon.vaddlu.v2i64
41; CHECK: zext <2 x i32>
42; CHECK-NEXT: zext <2 x i32>
43; CHECK-NEXT: add <2 x i64>
44
45; CHECK: vaddws8
46; CHECK-NOT: arm.neon.vaddws.v8i16
47; CHECK: sext <8 x i8>
48; CHECK-NEXT: add <8 x i16>
49
50; CHECK: vaddwu16
51; CHECK-NOT: arm.neon.vaddwu.v4i32
52; CHECK: zext <4 x i16>
53; CHECK-NEXT: add <4 x i32>
54
Bob Wilsond0b69cf2010-09-01 23:50:19 +000055; vsubl/vsubw should be auto-upgraded to subtract with sext/zext
Bob Wilson04d6c282010-08-29 05:57:34 +000056
57; CHECK: vsubls16
58; CHECK-NOT: arm.neon.vsubls.v4i32
59; CHECK: sext <4 x i16>
60; CHECK-NEXT: sext <4 x i16>
61; CHECK-NEXT: sub <4 x i32>
62
63; CHECK: vsublu32
64; CHECK-NOT: arm.neon.vsublu.v2i64
65; CHECK: zext <2 x i32>
66; CHECK-NEXT: zext <2 x i32>
67; CHECK-NEXT: sub <2 x i64>
68
69; CHECK: vsubws8
70; CHECK-NOT: arm.neon.vsubws.v8i16
71; CHECK: sext <8 x i8>
72; CHECK-NEXT: sub <8 x i16>
73
74; CHECK: vsubwu16
75; CHECK-NOT: arm.neon.vsubwu.v4i32
76; CHECK: zext <4 x i16>
77; CHECK-NEXT: sub <4 x i32>
78
Bob Wilsond0b69cf2010-09-01 23:50:19 +000079; vmull should be auto-upgraded to multiply with sext/zext
80; (but vmullp should remain an intrinsic)
81
82; CHECK: vmulls8
83; CHECK-NOT: arm.neon.vmulls.v8i16
84; CHECK: sext <8 x i8>
85; CHECK-NEXT: sext <8 x i8>
86; CHECK-NEXT: mul <8 x i16>
87
88; CHECK: vmullu16
89; CHECK-NOT: arm.neon.vmullu.v4i32
90; CHECK: zext <4 x i16>
91; CHECK-NEXT: zext <4 x i16>
92; CHECK-NEXT: mul <4 x i32>
93
94; CHECK: vmullp8
95; CHECK: arm.neon.vmullp.v8i16
96
97; vmlal should be auto-upgraded to multiply/add with sext/zext
98
99; CHECK: vmlals32
100; CHECK-NOT: arm.neon.vmlals.v2i64
101; CHECK: sext <2 x i32>
102; CHECK-NEXT: sext <2 x i32>
103; CHECK-NEXT: mul <2 x i64>
104; CHECK-NEXT: add <2 x i64>
105
106; CHECK: vmlalu8
107; CHECK-NOT: arm.neon.vmlalu.v8i16
108; CHECK: zext <8 x i8>
109; CHECK-NEXT: zext <8 x i8>
110; CHECK-NEXT: mul <8 x i16>
111; CHECK-NEXT: add <8 x i16>
112
113; vmlsl should be auto-upgraded to multiply/sub with sext/zext
114
115; CHECK: vmlsls16
116; CHECK-NOT: arm.neon.vmlsls.v4i32
117; CHECK: sext <4 x i16>
118; CHECK-NEXT: sext <4 x i16>
119; CHECK-NEXT: mul <4 x i32>
120; CHECK-NEXT: sub <4 x i32>
121
122; CHECK: vmlslu32
123; CHECK-NOT: arm.neon.vmlslu.v2i64
124; CHECK: zext <2 x i32>
125; CHECK-NEXT: zext <2 x i32>
126; CHECK-NEXT: mul <2 x i64>
127; CHECK-NEXT: sub <2 x i64>
128
Bob Wilsoneb0c3d32010-09-03 01:35:08 +0000129; vaba should be auto-upgraded to vabd + add
130
131; CHECK: vabas32
132; CHECK-NOT: arm.neon.vabas.v2i32
133; CHECK: arm.neon.vabds.v2i32
134; CHECK-NEXT: add <2 x i32>
135
136; CHECK: vabaQu8
137; CHECK-NOT: arm.neon.vabau.v16i8
138; CHECK: arm.neon.vabdu.v16i8
139; CHECK-NEXT: add <16 x i8>
140
141; vabal should be auto-upgraded to vabd with zext + add
142
143; CHECK: vabals16
144; CHECK-NOT: arm.neon.vabals.v4i32
145; CHECK: arm.neon.vabds.v4i16
146; CHECK-NEXT: zext <4 x i16>
147; CHECK-NEXT: add <4 x i32>
148
149; CHECK: vabalu32
150; CHECK-NOT: arm.neon.vabalu.v2i64
151; CHECK: arm.neon.vabdu.v2i32
152; CHECK-NEXT: zext <2 x i32>
153; CHECK-NEXT: add <2 x i64>
154
155; vabdl should be auto-upgraded to vabd with zext
156
157; CHECK: vabdls8
158; CHECK-NOT: arm.neon.vabdls.v8i16
159; CHECK: arm.neon.vabds.v8i8
160; CHECK-NEXT: zext <8 x i8>
161
162; CHECK: vabdlu16
163; CHECK-NOT: arm.neon.vabdlu.v4i32
164; CHECK: arm.neon.vabdu.v4i16
165; CHECK-NEXT: zext <4 x i16>
166
Bob Wilson973a0742010-08-30 20:02:30 +0000167; vmovn should be auto-upgraded to trunc
168
169; CHECK: vmovni16
170; CHECK-NOT: arm.neon.vmovn.v8i8
171; CHECK: trunc <8 x i16>
172
173; CHECK: vmovni32
174; CHECK-NOT: arm.neon.vmovn.v4i16
175; CHECK: trunc <4 x i32>
176
177; CHECK: vmovni64
178; CHECK-NOT: arm.neon.vmovn.v2i32
179; CHECK: trunc <2 x i64>
180
Bob Wilson7a9ef442010-08-27 17:13:24 +0000181; vld* and vst* intrinsic calls need an alignment argument (defaulted to 1)
182
183; CHECK: vld1i8
184; CHECK: i32 1
185; CHECK: vld2Qi16
186; CHECK: i32 1
187; CHECK: vld3i32
188; CHECK: i32 1
189; CHECK: vld4Qf
190; CHECK: i32 1
191
192; CHECK: vst1i8
193; CHECK: i32 1
194; CHECK: vst2Qi16
195; CHECK: i32 1
196; CHECK: vst3i32
197; CHECK: i32 1
198; CHECK: vst4Qf
199; CHECK: i32 1
200
201; CHECK: vld2laneQi16
202; CHECK: i32 1
203; CHECK: vld3lanei32
204; CHECK: i32 1
205; CHECK: vld4laneQf
206; CHECK: i32 1
207
208; CHECK: vst2laneQi16
209; CHECK: i32 1
210; CHECK: vst3lanei32
211; CHECK: i32 1
212; CHECK: vst4laneQf
213; CHECK: i32 1