OSDN Git Service

931c6c3979c6057ee396829643f59820496843f3
[android-x86/external-llvm.git] / test / CodeGen / ARM / big-endian-neon-extend.ll
1 ; RUN: llc < %s -mtriple armeb-eabi -mattr v7,neon -o - | FileCheck %s
2
3 define void @vector_ext_2i8_to_2i64( <2 x i8>* %loadaddr, <2 x i64>* %storeaddr ) {
4 ; CHECK-LABEL: vector_ext_2i8_to_2i64:
5 ; CHECK:       vld1.16 {[[REG:d[0-9]+]]
6 ; CHECK:       vmov.i64 {{q[0-9]+}}, #0xff
7 ; CHECK:       vrev16.8  [[REG]], [[REG]]
8 ; CHECK:       vmovl.u8  {{q[0-9]+}}, [[REG]]
9   %1 = load <2 x i8>* %loadaddr
10   %2 = zext <2 x i8> %1 to <2 x i64>
11   store <2 x i64> %2, <2 x i64>* %storeaddr
12   ret void
13 }
14
15 define void @vector_ext_2i16_to_2i64( <2 x i16>* %loadaddr, <2 x i64>* %storeaddr ) {
16 ; CHECK-LABEL: vector_ext_2i16_to_2i64:
17 ; CHECK:       vld1.32 {[[REG:d[0-9]+]]
18 ; CHECK:       vmov.i64 {{q[0-9]+}}, #0xffff
19 ; CHECK:       vrev32.16  [[REG]], [[REG]]
20 ; CHECK:       vmovl.u16  {{q[0-9]+}}, [[REG]]
21   %1 = load <2 x i16>* %loadaddr
22   %2 = zext <2 x i16> %1 to <2 x i64>
23   store <2 x i64> %2, <2 x i64>* %storeaddr
24   ret void
25 }
26
27
28 define void @vector_ext_2i8_to_2i32( <2 x i8>* %loadaddr, <2 x i32>* %storeaddr ) {
29 ; CHECK-LABEL: vector_ext_2i8_to_2i32:
30 ; CHECK:       vld1.16 {[[REG:d[0-9]+]]
31 ; CHECK:       vrev16.8  [[REG]], [[REG]]
32   %1 = load <2 x i8>* %loadaddr
33   %2 = zext <2 x i8> %1 to <2 x i32>
34   store <2 x i32> %2, <2 x i32>* %storeaddr
35   ret void
36 }
37
38 define void @vector_ext_2i16_to_2i32( <2 x i16>* %loadaddr, <2 x i32>* %storeaddr ) {
39 ; CHECK-LABEL: vector_ext_2i16_to_2i32:
40 ; CHECK:       vld1.32 {[[REG:d[0-9]+]]
41 ; CHECK:       vrev32.16  [[REG]], [[REG]]
42 ; CHECK:       vmovl.u16  {{q[0-9]+}}, [[REG]]
43   %1 = load <2 x i16>* %loadaddr
44   %2 = zext <2 x i16> %1 to <2 x i32>
45   store <2 x i32> %2, <2 x i32>* %storeaddr
46   ret void
47 }
48
49 define void @vector_ext_2i8_to_2i16( <2 x i8>* %loadaddr, <2 x i16>* %storeaddr ) {
50 ; CHECK-LABEL: vector_ext_2i8_to_2i16:
51 ; CHECK:       vld1.16 {[[REG:d[0-9]+]]
52 ; CHECK:       vrev16.8  [[REG]], [[REG]]
53 ; CHECK:       vmovl.u8  {{q[0-9]+}}, [[REG]]
54   %1 = load <2 x i8>* %loadaddr
55   %2 = zext <2 x i8> %1 to <2 x i16>
56   store <2 x i16> %2, <2 x i16>* %storeaddr
57   ret void
58 }
59
60 define void @vector_ext_4i8_to_4i32( <4 x i8>* %loadaddr, <4 x i32>* %storeaddr ) {
61 ; CHECK-LABEL: vector_ext_4i8_to_4i32:
62 ; CHECK:       vld1.32 {[[REG:d[0-9]+]]
63 ; CHECK:       vrev32.8  [[REG]], [[REG]]
64 ; CHECK:       vmovl.u8  {{q[0-9]+}}, [[REG]]
65   %1 = load <4 x i8>* %loadaddr
66   %2 = zext <4 x i8> %1 to <4 x i32>
67   store <4 x i32> %2, <4 x i32>* %storeaddr
68   ret void
69 }
70
71 define void @vector_ext_4i8_to_4i16( <4 x i8>* %loadaddr, <4 x i16>* %storeaddr ) {
72 ; CHECK-LABEL: vector_ext_4i8_to_4i16:
73 ; CHECK:       vld1.32 {[[REG:d[0-9]+]]
74 ; CHECK:       vrev32.8  [[REG]], [[REG]]
75 ; CHECK:       vmovl.u8  {{q[0-9]+}}, [[REG]]
76   %1 = load <4 x i8>* %loadaddr
77   %2 = zext <4 x i8> %1 to <4 x i16>
78   store <4 x i16> %2, <4 x i16>* %storeaddr
79   ret void
80 }
81