xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2012-08-09-neon-extload.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=armv7-none-linux-gnueabi < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@var_v2i8 = global <2 x i8> zeroinitializer
4*9880d681SAndroid Build Coastguard Worker@var_v4i8 = global <4 x i8> zeroinitializer
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@var_v2i16 = global <2 x i16> zeroinitializer
7*9880d681SAndroid Build Coastguard Worker@var_v4i16 = global <4 x i16> zeroinitializer
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker@var_v2i32 = global <2 x i32> zeroinitializer
10*9880d681SAndroid Build Coastguard Worker@var_v4i32 = global <4 x i32> zeroinitializer
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker@var_v2i64 = global <2 x i64> zeroinitializer
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i8tov2i32() {
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i8tov2i32:
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker  %i8val = load <2 x i8>, <2 x i8>* @var_v2i8
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  %i32val = sext <2 x i8> %i8val to <2 x i32>
20*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %i32val, <2 x i32>* @var_v2i32
21*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.16 {d[[LOAD:[0-9]+]][0]}, [{{r[0-9]+}}:16]
22*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s8 {{q[0-9]+}}, d[[LOAD]]
23*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s16 {{q[0-9]+}}, {{d[0-9]+}}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker  ret void
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i8tov2i64() {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i8tov2i64:
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker  %i8val = load <2 x i8>, <2 x i8>* @var_v2i8
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker  %i64val = sext <2 x i8> %i8val to <2 x i64>
34*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %i64val, <2 x i64>* @var_v2i64
35*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.16 {d{{[0-9]+}}[0]}, [{{r[0-9]+}}:16]
36*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s8 {{q[0-9]+}}, d[[LOAD]]
37*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s16 {{q[0-9]+}}, {{d[0-9]+}}
38*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s32 {{q[0-9]+}}, {{d[0-9]+}}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker;  %i64val = sext <2 x i8> %i8val to <2 x i64>
41*9880d681SAndroid Build Coastguard Worker;  store <2 x i64> %i64val, <2 x i64>* @var_v2i64
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker  ret void
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i8tov4i16() {
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i8tov4i16:
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker  %i8val = load <4 x i8>, <4 x i8>* @var_v4i8
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker  %i16val = sext <4 x i8> %i8val to <4 x i16>
52*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %i16val, <4 x i16>* @var_v4i16
53*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {d[[LOAD:[0-9]+]][0]}, [{{r[0-9]+}}:32]
54*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s8 {{q[0-9]+}}, d[[LOAD]]
55*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmovl.s16
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker  ret void
58*9880d681SAndroid Build Coastguard Worker; CHECK: bx lr
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i8tov4i32() {
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i8tov4i32:
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker  %i8val = load <4 x i8>, <4 x i8>* @var_v4i8
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker  %i16val = sext <4 x i8> %i8val to <4 x i32>
67*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %i16val, <4 x i32>* @var_v4i32
68*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {d[[LOAD:[0-9]+]][0]}, [{{r[0-9]+}}:32]
69*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s8 {{q[0-9]+}}, d[[LOAD]]
70*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s16 {{q[0-9]+}}, {{d[0-9]+}}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker  ret void
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i16tov2i32() {
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i16tov2i32:
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker  %i16val = load <2 x i16>, <2 x i16>* @var_v2i16
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker  %i32val = sext <2 x i16> %i16val to <2 x i32>
81*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %i32val, <2 x i32>* @var_v2i32
82*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {d[[LOAD:[0-9]+]][0]}, [{{r[0-9]+}}:32]
83*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s16 {{q[0-9]+}}, d[[LOAD]]
84*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmovl
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker  ret void
87*9880d681SAndroid Build Coastguard Worker; CHECK: bx lr
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i16tov2i64() {
91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i16tov2i64:
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker  %i16val = load <2 x i16>, <2 x i16>* @var_v2i16
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker  %i64val = sext <2 x i16> %i16val to <2 x i64>
96*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %i64val, <2 x i64>* @var_v2i64
97*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {d[[LOAD:[0-9]+]][0]}, [{{r[0-9]+}}:32]
98*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s16 {{q[0-9]+}}, d[[LOAD]]
99*9880d681SAndroid Build Coastguard Worker; CHECK: vmovl.s32 {{q[0-9]+}}, d[[LOAD]]
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker  ret void
102*9880d681SAndroid Build Coastguard Worker}
103