blob: 9dda745bc7e3aef84331ab7cd0da05c171d5fd85 [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 Wilson973a0742010-08-30 20:02:30 +0000129; vmovn should be auto-upgraded to trunc
130
131; CHECK: vmovni16
132; CHECK-NOT: arm.neon.vmovn.v8i8
133; CHECK: trunc <8 x i16>
134
135; CHECK: vmovni32
136; CHECK-NOT: arm.neon.vmovn.v4i16
137; CHECK: trunc <4 x i32>
138
139; CHECK: vmovni64
140; CHECK-NOT: arm.neon.vmovn.v2i32
141; CHECK: trunc <2 x i64>
142
Bob Wilson7a9ef442010-08-27 17:13:24 +0000143; vld* and vst* intrinsic calls need an alignment argument (defaulted to 1)
144
145; CHECK: vld1i8
146; CHECK: i32 1
147; CHECK: vld2Qi16
148; CHECK: i32 1
149; CHECK: vld3i32
150; CHECK: i32 1
151; CHECK: vld4Qf
152; CHECK: i32 1
153
154; CHECK: vst1i8
155; CHECK: i32 1
156; CHECK: vst2Qi16
157; CHECK: i32 1
158; CHECK: vst3i32
159; CHECK: i32 1
160; CHECK: vst4Qf
161; CHECK: i32 1
162
163; CHECK: vld2laneQi16
164; CHECK: i32 1
165; CHECK: vld3lanei32
166; CHECK: i32 1
167; CHECK: vld4laneQf
168; CHECK: i32 1
169
170; CHECK: vst2laneQi16
171; CHECK: i32 1
172; CHECK: vst3lanei32
173; CHECK: i32 1
174; CHECK: vst4laneQf
175; CHECK: i32 1