[ARM] Promote helper function to SelectionDAG.
[oota-llvm.git] / test / CodeGen / ARM / neon_div.ll
1 ; RUN: llc -mtriple=arm-eabi -mattr=+neon -pre-RA-sched=source -disable-post-ra %s -o - \
2 ; RUN:  | FileCheck %s
3
4 define <8 x i8> @sdivi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
5 ;CHECK: vrecpe.f32
6 ;CHECK: vmovn.i32
7 ;CHECK: vrecpe.f32
8 ;CHECK: vmovn.i32
9 ;CHECK: vmovn.i16
10         %tmp1 = load <8 x i8>, <8 x i8>* %A
11         %tmp2 = load <8 x i8>, <8 x i8>* %B
12         %tmp3 = sdiv <8 x i8> %tmp1, %tmp2
13         ret <8 x i8> %tmp3
14 }
15
16 define <8 x i8> @udivi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
17 ;CHECK: vrecpe.f32
18 ;CHECK: vrecps.f32
19 ;CHECK: vmovn.i32
20 ;CHECK: vrecpe.f32
21 ;CHECK: vrecps.f32
22 ;CHECK: vmovn.i32
23 ;CHECK: vqmovun.s16
24         %tmp1 = load <8 x i8>, <8 x i8>* %A
25         %tmp2 = load <8 x i8>, <8 x i8>* %B
26         %tmp3 = udiv <8 x i8> %tmp1, %tmp2
27         ret <8 x i8> %tmp3
28 }
29
30 define <4 x i16> @sdivi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
31 ;CHECK: vrecpe.f32
32 ;CHECK: vrecps.f32
33 ;CHECK: vmovn.i32
34         %tmp1 = load <4 x i16>, <4 x i16>* %A
35         %tmp2 = load <4 x i16>, <4 x i16>* %B
36         %tmp3 = sdiv <4 x i16> %tmp1, %tmp2
37         ret <4 x i16> %tmp3
38 }
39
40 define <4 x i16> @udivi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
41 ;CHECK: vrecpe.f32
42 ;CHECK: vrecps.f32
43 ;CHECK: vrecps.f32
44 ;CHECK: vmovn.i32
45         %tmp1 = load <4 x i16>, <4 x i16>* %A
46         %tmp2 = load <4 x i16>, <4 x i16>* %B
47         %tmp3 = udiv <4 x i16> %tmp1, %tmp2
48         ret <4 x i16> %tmp3
49 }