xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/aarch64-be-bv.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64_be--linux-gnu < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@vec_v8i16 = global <8 x i16> <i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t1:
6*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t1() nounwind {
7*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
8*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].4s, #1
9*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
10*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
11*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
12*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0>
13*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
14*9880d681SAndroid Build Coastguard Worker  ret i16 %el
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t2:
18*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t2() nounwind {
19*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
20*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].4s, #1, lsl #8
21*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
22*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
23*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
24*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0>
25*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
26*9880d681SAndroid Build Coastguard Worker  ret i16 %el
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t3:
30*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t3() nounwind {
31*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
32*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].4s, #1, lsl #16
33*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
34*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
35*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
36*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>
37*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
38*9880d681SAndroid Build Coastguard Worker  ret i16 %el
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t4:
42*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t4() nounwind {
43*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
44*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].4s, #1, lsl #24
45*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
46*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
47*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
48*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256>
49*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
50*9880d681SAndroid Build Coastguard Worker  ret i16 %el
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t5:
54*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t5() nounwind {
55*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
56*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].8h, #1
57*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
58*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
59*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
60*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
61*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
62*9880d681SAndroid Build Coastguard Worker  ret i16 %el
63*9880d681SAndroid Build Coastguard Worker}
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t6:
66*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t6() nounwind {
67*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
68*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].8h, #1, lsl #8
69*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
70*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
71*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
72*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
73*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
74*9880d681SAndroid Build Coastguard Worker  ret i16 %el
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t7:
78*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t7() nounwind {
79*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
80*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].4s, #1, msl #8
81*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
82*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
83*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
84*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 511, i16 0, i16 511, i16 0, i16 511, i16 0, i16 511, i16 0>
85*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
86*9880d681SAndroid Build Coastguard Worker  ret i16 %el
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t8:
90*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t8() nounwind {
91*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
92*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].4s, #1, msl #16
93*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
94*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
95*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
96*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65535, i16 1, i16 65535, i16 1, i16 65535, i16 1, i16 65535, i16 1>
97*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
98*9880d681SAndroid Build Coastguard Worker  ret i16 %el
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t9:
102*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t9() nounwind {
103*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
104*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].16b, #1
105*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
106*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
107*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
108*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257>
109*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
110*9880d681SAndroid Build Coastguard Worker  ret i16 %el
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: movi_modimm_t10:
114*9880d681SAndroid Build Coastguard Workerdefine i16 @movi_modimm_t10() nounwind {
115*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
116*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    movi	   v[[REG2:[0-9]+]].2d, #0x00ffff0000ffff
117*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
118*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
119*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
120*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0>
121*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
122*9880d681SAndroid Build Coastguard Worker  ret i16 %el
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fmov_modimm_t11:
126*9880d681SAndroid Build Coastguard Workerdefine i16 @fmov_modimm_t11() nounwind {
127*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
128*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    fmov    v[[REG2:[0-9]+]].4s, #3.00000000
129*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
130*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
131*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
132*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448>
133*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
134*9880d681SAndroid Build Coastguard Worker  ret i16 %el
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fmov_modimm_t12:
138*9880d681SAndroid Build Coastguard Workerdefine i16 @fmov_modimm_t12() nounwind {
139*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
140*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    fmov    v[[REG2:[0-9]+]].2d, #0.17968750
141*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
142*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
143*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
144*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 0, i16 0, i16 0, i16 16327, i16 0, i16 0, i16 0, i16 16327>
145*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
146*9880d681SAndroid Build Coastguard Worker  ret i16 %el
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t1:
150*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t1() nounwind {
151*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
152*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].4s, #1
153*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
154*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
155*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
156*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535>
157*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
158*9880d681SAndroid Build Coastguard Worker  ret i16 %el
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t2:
162*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t2() nounwind {
163*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
164*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].4s, #1, lsl #8
165*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
166*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
167*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
168*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535>
169*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
170*9880d681SAndroid Build Coastguard Worker  ret i16 %el
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t3:
174*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t3() nounwind {
175*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
176*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].4s, #1, lsl #16
177*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
178*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
179*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
180*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
181*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
182*9880d681SAndroid Build Coastguard Worker  ret i16 %el
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t4:
186*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t4() nounwind {
187*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
188*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].4s, #1, lsl #24
189*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
190*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
191*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
192*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279>
193*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
194*9880d681SAndroid Build Coastguard Worker  ret i16 %el
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t5:
198*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t5() nounwind {
199*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
200*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].8h, #1
201*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
202*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
203*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
204*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534>
205*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
206*9880d681SAndroid Build Coastguard Worker  ret i16 %el
207*9880d681SAndroid Build Coastguard Worker}
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t6:
210*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t6() nounwind {
211*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
212*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].8h, #1, lsl #8
213*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
214*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
215*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
216*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279>
217*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
218*9880d681SAndroid Build Coastguard Worker  ret i16 %el
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t7:
222*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t7() nounwind {
223*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
224*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].4s, #1, msl #8
225*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
226*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
227*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
228*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 65024, i16 65535, i16 65024, i16 65535, i16 65024, i16 65535, i16 65024, i16 65535>
229*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
230*9880d681SAndroid Build Coastguard Worker  ret i16 %el
231*9880d681SAndroid Build Coastguard Worker}
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mvni_modimm_t8:
234*9880d681SAndroid Build Coastguard Workerdefine i16 @mvni_modimm_t8() nounwind {
235*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
236*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    mvni	   v[[REG2:[0-9]+]].4s, #1, msl #16
237*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    add	   v[[REG1]].8h, v[[REG1]].8h, v[[REG2]].8h
238*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
239*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
240*9880d681SAndroid Build Coastguard Worker  %rv = add <8 x i16> %in, <i16 0, i16 65534, i16 0, i16 65534, i16 0, i16 65534, i16 0, i16 65534>
241*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
242*9880d681SAndroid Build Coastguard Worker  ret i16 %el
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bic_modimm_t1:
246*9880d681SAndroid Build Coastguard Workerdefine i16 @bic_modimm_t1() nounwind {
247*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
248*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bic	   v[[REG2:[0-9]+]].4s, #1
249*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
250*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
251*9880d681SAndroid Build Coastguard Worker  %rv = and <8 x i16> %in, <i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535>
252*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
253*9880d681SAndroid Build Coastguard Worker  ret i16 %el
254*9880d681SAndroid Build Coastguard Worker}
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bic_modimm_t2:
257*9880d681SAndroid Build Coastguard Workerdefine i16 @bic_modimm_t2() nounwind {
258*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
259*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bic	   v[[REG2:[0-9]+]].4s, #1, lsl #8
260*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
261*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
262*9880d681SAndroid Build Coastguard Worker  %rv = and <8 x i16> %in, <i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535>
263*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
264*9880d681SAndroid Build Coastguard Worker  ret i16 %el
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bic_modimm_t3:
268*9880d681SAndroid Build Coastguard Workerdefine i16 @bic_modimm_t3() nounwind {
269*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
270*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bic	   v[[REG2:[0-9]+]].4s, #1, lsl #16
271*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
272*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
273*9880d681SAndroid Build Coastguard Worker  %rv = and <8 x i16> %in, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
274*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
275*9880d681SAndroid Build Coastguard Worker  ret i16 %el
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bic_modimm_t4:
279*9880d681SAndroid Build Coastguard Workerdefine i16 @bic_modimm_t4() nounwind {
280*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
281*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bic	   v[[REG2:[0-9]+]].4s, #1, lsl #24
282*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
283*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
284*9880d681SAndroid Build Coastguard Worker  %rv = and <8 x i16> %in, <i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279>
285*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
286*9880d681SAndroid Build Coastguard Worker  ret i16 %el
287*9880d681SAndroid Build Coastguard Worker}
288*9880d681SAndroid Build Coastguard Worker
289*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bic_modimm_t5:
290*9880d681SAndroid Build Coastguard Workerdefine i16 @bic_modimm_t5() nounwind {
291*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
292*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bic	   v[[REG2:[0-9]+]].8h, #1
293*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
294*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
295*9880d681SAndroid Build Coastguard Worker  %rv = and <8 x i16> %in, <i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534>
296*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
297*9880d681SAndroid Build Coastguard Worker  ret i16 %el
298*9880d681SAndroid Build Coastguard Worker}
299*9880d681SAndroid Build Coastguard Worker
300*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bic_modimm_t6:
301*9880d681SAndroid Build Coastguard Workerdefine i16 @bic_modimm_t6() nounwind {
302*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
303*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bic	   v[[REG2:[0-9]+]].8h, #1, lsl #8
304*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
305*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
306*9880d681SAndroid Build Coastguard Worker  %rv = and <8 x i16> %in, <i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279>
307*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
308*9880d681SAndroid Build Coastguard Worker  ret i16 %el
309*9880d681SAndroid Build Coastguard Worker}
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orr_modimm_t1:
312*9880d681SAndroid Build Coastguard Workerdefine i16 @orr_modimm_t1() nounwind {
313*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
314*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    orr	   v[[REG2:[0-9]+]].4s, #1
315*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
316*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
317*9880d681SAndroid Build Coastguard Worker  %rv = or <8 x i16> %in, <i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0>
318*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
319*9880d681SAndroid Build Coastguard Worker  ret i16 %el
320*9880d681SAndroid Build Coastguard Worker}
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orr_modimm_t2:
323*9880d681SAndroid Build Coastguard Workerdefine i16 @orr_modimm_t2() nounwind {
324*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
325*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    orr     v[[REG2:[0-9]+]].4s, #1, lsl #8
326*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
327*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
328*9880d681SAndroid Build Coastguard Worker  %rv = or <8 x i16> %in, <i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0>
329*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
330*9880d681SAndroid Build Coastguard Worker  ret i16 %el
331*9880d681SAndroid Build Coastguard Worker}
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orr_modimm_t3:
334*9880d681SAndroid Build Coastguard Workerdefine i16 @orr_modimm_t3() nounwind {
335*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
336*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    orr	   v[[REG2:[0-9]+]].4s, #1, lsl #16
337*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
338*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
339*9880d681SAndroid Build Coastguard Worker  %rv = or <8 x i16> %in, <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>
340*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
341*9880d681SAndroid Build Coastguard Worker  ret i16 %el
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orr_modimm_t4:
345*9880d681SAndroid Build Coastguard Workerdefine i16 @orr_modimm_t4() nounwind {
346*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
347*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    orr	   v[[REG2:[0-9]+]].4s, #1, lsl #24
348*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
349*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
350*9880d681SAndroid Build Coastguard Worker  %rv = or <8 x i16> %in, <i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256>
351*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
352*9880d681SAndroid Build Coastguard Worker  ret i16 %el
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orr_modimm_t5:
356*9880d681SAndroid Build Coastguard Workerdefine i16 @orr_modimm_t5() nounwind {
357*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
358*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    orr	   v[[REG2:[0-9]+]].8h, #1
359*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
360*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
361*9880d681SAndroid Build Coastguard Worker  %rv = or <8 x i16> %in, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
362*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
363*9880d681SAndroid Build Coastguard Worker  ret i16 %el
364*9880d681SAndroid Build Coastguard Worker}
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orr_modimm_t6:
367*9880d681SAndroid Build Coastguard Workerdefine i16 @orr_modimm_t6() nounwind {
368*9880d681SAndroid Build Coastguard Worker  ; CHECK:         ld1     { v[[REG1:[0-9]+]].8h }, [x{{[0-9]+}}]
369*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    orr	   v[[REG2:[0-9]+]].8h, #1, lsl #8
370*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    umov	   w{{[0-9]+}}, v[[REG1]].h[0]
371*9880d681SAndroid Build Coastguard Worker  %in = load <8 x i16>, <8 x i16>* @vec_v8i16
372*9880d681SAndroid Build Coastguard Worker  %rv = or <8 x i16> %in, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
373*9880d681SAndroid Build Coastguard Worker  %el = extractelement <8 x i16> %rv, i32 0
374*9880d681SAndroid Build Coastguard Worker  ret i16 %el
375*9880d681SAndroid Build Coastguard Worker}
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Workerdeclare i8 @f_v8i8(<8 x i8> %arg)
378*9880d681SAndroid Build Coastguard Workerdeclare i16 @f_v4i16(<4 x i16> %arg)
379*9880d681SAndroid Build Coastguard Workerdeclare i32 @f_v2i32(<2 x i32> %arg)
380*9880d681SAndroid Build Coastguard Workerdeclare i64 @f_v1i64(<1 x i64> %arg)
381*9880d681SAndroid Build Coastguard Workerdeclare i8 @f_v16i8(<16 x i8> %arg)
382*9880d681SAndroid Build Coastguard Workerdeclare i16 @f_v8i16(<8 x i16> %arg)
383*9880d681SAndroid Build Coastguard Workerdeclare i32 @f_v4i32(<4 x i32> %arg)
384*9880d681SAndroid Build Coastguard Workerdeclare i64 @f_v2i64(<2 x i64> %arg)
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t1_call:
387*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t1_call() {
388*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #8
389*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
390*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
391*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 8, i8 0, i8 0, i8 0, i8 8, i8 0, i8 0, i8 0>)
392*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #7
393*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
394*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
395*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 7, i16 0, i16 7, i16 0>)
396*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #6
397*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
398*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
399*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 6, i32 6>)
400*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.2s, #5
401*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
402*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 21474836485>)
403*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #5
404*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
405*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
406*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
407*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0>)
408*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #4
409*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
410*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
411*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
412*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 4, i16 0, i16 4, i16 0, i16 4, i16 0, i16 4, i16 0>)
413*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #3
414*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
415*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
416*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
417*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 3, i32 3, i32 3, i32 3>)
418*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].4s, #2
419*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
420*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
421*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 8589934594, i64 8589934594>)
422*9880d681SAndroid Build Coastguard Worker
423*9880d681SAndroid Build Coastguard Worker  ret void
424*9880d681SAndroid Build Coastguard Worker}
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t2_call:
427*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t2_call() {
428*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #8, lsl #8
429*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
430*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
431*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 0, i8 8, i8 0, i8 0, i8 0, i8 8, i8 0, i8 0>)
432*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #7, lsl #8
433*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
434*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
435*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 1792, i16 0, i16 1792, i16 0>)
436*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #6, lsl #8
437*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
438*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
439*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 1536, i32 1536>)
440*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.2s, #5, lsl #8
441*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
442*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 5497558140160>)
443*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #5, lsl #8
444*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
445*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
446*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
447*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0>)
448*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #4, lsl #8
449*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
450*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
451*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
452*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 1024, i16 0, i16 1024, i16 0, i16 1024, i16 0, i16 1024, i16 0>)
453*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #3, lsl #8
454*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
455*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
456*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
457*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 768, i32 768, i32 768, i32 768>)
458*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].4s, #2, lsl #8
459*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
460*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
461*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 2199023256064, i64 2199023256064>)
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Worker  ret void
464*9880d681SAndroid Build Coastguard Worker}
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t3_call:
467*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t3_call() {
468*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #8, lsl #16
469*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
470*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
471*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 0, i8 0, i8 8, i8 0, i8 0, i8 0, i8 8, i8 0>)
472*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #7, lsl #16
473*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
474*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
475*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 0, i16 7, i16 0, i16 7>)
476*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #6, lsl #16
477*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
478*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
479*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 393216, i32 393216>)
480*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.2s, #5, lsl #16
481*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
482*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 1407374883880960>)
483*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #5, lsl #16
484*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
485*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
486*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
487*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0>)
488*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #4, lsl #16
489*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
490*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
491*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
492*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 0, i16 4, i16 0, i16 4, i16 0, i16 4, i16 0, i16 4>)
493*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #3, lsl #16
494*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
495*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
496*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
497*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 196608, i32 196608, i32 196608, i32 196608>)
498*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].4s, #2, lsl #16
499*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
500*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
501*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 562949953552384, i64 562949953552384>)
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Worker  ret void
504*9880d681SAndroid Build Coastguard Worker}
505*9880d681SAndroid Build Coastguard Worker
506*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t4_call:
507*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t4_call() {
508*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #8, lsl #24
509*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
510*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
511*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 0, i8 0, i8 0, i8 8, i8 0, i8 0, i8 0, i8 8>)
512*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #7, lsl #24
513*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
514*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
515*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 0, i16 1792, i16 0, i16 1792>)
516*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #6, lsl #24
517*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
518*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
519*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 100663296, i32 100663296>)
520*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.2s, #5, lsl #24
521*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
522*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 360287970273525760>)
523*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #5, lsl #24
524*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
525*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
526*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
527*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5>)
528*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #4, lsl #24
529*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
530*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
531*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
532*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 0, i16 1024, i16 0, i16 1024, i16 0, i16 1024, i16 0, i16 1024>)
533*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #3, lsl #24
534*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
535*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
536*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
537*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 50331648, i32 50331648, i32 50331648, i32 50331648>)
538*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].4s, #2, lsl #24
539*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
540*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
541*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 144115188109410304, i64 144115188109410304>)
542*9880d681SAndroid Build Coastguard Worker
543*9880d681SAndroid Build Coastguard Worker  ret void
544*9880d681SAndroid Build Coastguard Worker}
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t5_call:
547*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t5_call() {
548*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4h, #8
549*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
550*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
551*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 8, i8 0, i8 8, i8 0, i8 8, i8 0, i8 8, i8 0>)
552*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4h, #7
553*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
554*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
555*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 7, i16 7, i16 7, i16 7>)
556*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4h, #6
557*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
558*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
559*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 393222, i32 393222>)
560*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.4h, #5
561*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
562*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 1407396358717445>)
563*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8h, #5
564*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
565*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
566*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
567*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0>)
568*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8h, #4
569*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
570*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
571*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
572*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>)
573*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8h, #3
574*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
575*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
576*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
577*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 196611, i32 196611, i32 196611, i32 196611>)
578*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].8h, #2
579*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
580*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
581*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 562958543486978, i64 562958543486978>)
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Worker  ret void
584*9880d681SAndroid Build Coastguard Worker}
585*9880d681SAndroid Build Coastguard Worker
586*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t6_call:
587*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t6_call() {
588*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4h, #8, lsl #8
589*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
590*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
591*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 0, i8 8, i8 0, i8 8, i8 0, i8 8, i8 0, i8 8>)
592*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4h, #7, lsl #8
593*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
594*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
595*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 1792, i16 1792, i16 1792, i16 1792>)
596*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4h, #6, lsl #8
597*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
598*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
599*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 100664832, i32 100664832>)
600*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.4h, #5, lsl #8
601*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
602*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 360293467831665920>)
603*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8h, #5, lsl #8
604*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
605*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
606*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
607*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5>)
608*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8h, #4, lsl #8
609*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
610*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
611*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
612*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>)
613*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8h, #3, lsl #8
614*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
615*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
616*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
617*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 50332416, i32 50332416, i32 50332416, i32 50332416>)
618*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].8h, #2, lsl #8
619*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
620*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
621*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 144117387132666368, i64 144117387132666368>)
622*9880d681SAndroid Build Coastguard Worker
623*9880d681SAndroid Build Coastguard Worker  ret void
624*9880d681SAndroid Build Coastguard Worker}
625*9880d681SAndroid Build Coastguard Worker
626*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t7_call:
627*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t7_call() {
628*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #8, msl #8
629*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
630*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
631*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 255, i8 8, i8 0, i8 0, i8 255, i8 8, i8 0, i8 0>)
632*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #7, msl #8
633*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
634*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
635*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 2047, i16 0, i16 2047, i16 0>)
636*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #6, msl #8
637*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
638*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
639*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 1791, i32 1791>)
640*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.2s, #5, msl #8
641*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
642*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 6592774800895>)
643*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #5, msl #8
644*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
645*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
646*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
647*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 255, i8 5, i8 0, i8 0, i8 255, i8 5, i8 0, i8 0, i8 255, i8 5, i8 0, i8 0, i8 255, i8 5, i8 0, i8 0>)
648*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #4, msl #8
649*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
650*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
651*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
652*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 1279, i16 0, i16 1279, i16 0, i16 1279, i16 0, i16 1279, i16 0>)
653*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #3, msl #8
654*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
655*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
656*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
657*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 1023, i32 1023, i32 1023, i32 1023>)
658*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].4s, #2, msl #8
659*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
660*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
661*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 3294239916799, i64 3294239916799>)
662*9880d681SAndroid Build Coastguard Worker
663*9880d681SAndroid Build Coastguard Worker  ret void
664*9880d681SAndroid Build Coastguard Worker}
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t8_call:
667*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t8_call() {
668*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #8, msl #16
669*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
670*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
671*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 255, i8 255, i8 8, i8 0, i8 255, i8 255, i8 8, i8 0>)
672*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #7, msl #16
673*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
674*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
675*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 65535, i16 7, i16 65535, i16 7>)
676*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2s, #6, msl #16
677*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
678*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
679*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 458751, i32 458751>)
680*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v{{[0-9]+}}.2s, #5, msl #16
681*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
682*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 1688845565689855>)
683*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #5, msl #16
684*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
685*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
686*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
687*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 255, i8 255, i8 5, i8 0, i8 255, i8 255, i8 5, i8 0, i8 255, i8 255, i8 5, i8 0, i8 255, i8 255, i8 5, i8 0>)
688*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #4, msl #16
689*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
690*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
691*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
692*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 65535, i16 4, i16 65535, i16 4, i16 65535, i16 4, i16 65535, i16 4>)
693*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].4s, #3, msl #16
694*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
695*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
696*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
697*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 262143, i32 262143, i32 262143, i32 262143>)
698*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG:[0-9]+]].4s, #2, msl #16
699*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
700*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
701*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 844420635361279, i64 844420635361279>)
702*9880d681SAndroid Build Coastguard Worker
703*9880d681SAndroid Build Coastguard Worker  ret void
704*9880d681SAndroid Build Coastguard Worker}
705*9880d681SAndroid Build Coastguard Worker
706*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t9_call:
707*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t9_call() {
708*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8b, #8
709*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
710*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
711*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>)
712*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8b, #7
713*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
714*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
715*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 1799, i16 1799, i16 1799, i16 1799>)
716*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].8b, #6
717*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
718*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
719*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 101058054, i32 101058054>)
720*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].16b, #5
721*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
722*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
723*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
724*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>)
725*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].16b, #4
726*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
727*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
728*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
729*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028>)
730*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].16b, #3
731*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
732*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
733*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
734*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 50529027, i32 50529027, i32 50529027, i32 50529027>)
735*9880d681SAndroid Build Coastguard Worker
736*9880d681SAndroid Build Coastguard Worker  ret void
737*9880d681SAndroid Build Coastguard Worker}
738*9880d681SAndroid Build Coastguard Worker
739*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t10_call:
740*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t10_call() {
741*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    d[[REG1:[0-9]+]], #0x0000ff000000ff
742*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
743*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
744*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 0, i8 0>)
745*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    d[[REG1:[0-9]+]], #0x00ffff0000ffff
746*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
747*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
748*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 -1, i16 0, i16 -1, i16 0>)
749*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    d[[REG1:[0-9]+]], #0xffffffffffffffff
750*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
751*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
752*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 -1, i32 -1>)
753*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2d, #0xffffff00ffffff
754*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
755*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
756*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
757*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0>)
758*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2d, #0xffffffffffff0000
759*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
760*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
761*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
762*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1, i16 -1>)
763*9880d681SAndroid Build Coastguard Worker  ; CHECK:         movi    v[[REG1:[0-9]+]].2d, #0xffffffff00000000
764*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
765*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
766*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
767*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 0, i32 -1, i32 0, i32 -1>)
768*9880d681SAndroid Build Coastguard Worker
769*9880d681SAndroid Build Coastguard Worker  ret void
770*9880d681SAndroid Build Coastguard Worker}
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t11_call:
773*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t11_call() {
774*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].2s, #4.00000000
775*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.8b, v[[REG1]].8b
776*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i8
777*9880d681SAndroid Build Coastguard Worker  call i8 @f_v8i8(<8 x i8> <i8 0, i8 0, i8 128, i8 64, i8 0, i8 0, i8 128, i8 64>)
778*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].2s, #3.75000000
779*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.4h, v[[REG1]].4h
780*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i16
781*9880d681SAndroid Build Coastguard Worker  call i16 @f_v4i16(<4 x i16> <i16 0, i16 16496, i16 0, i16 16496>)
782*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].2s, #3.50000000
783*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v{{[0-9]+}}.2s, v[[REG1]].2s
784*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i32
785*9880d681SAndroid Build Coastguard Worker  call i32 @f_v2i32(<2 x i32> <i32 1080033280, i32 1080033280>)
786*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v{{[0-9]+}}.2s, #0.39062500
787*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v1i64
788*9880d681SAndroid Build Coastguard Worker  call i64 @f_v1i64(<1 x i64> <i64 4523865826746957824>)
789*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].4s, #3.25000000
790*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
791*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
792*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
793*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 80, i8 64, i8 0, i8 0, i8 80, i8 64, i8 0, i8 0, i8 80, i8 64, i8 0, i8 0, i8 80, i8 64>)
794*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].4s, #3.00000000
795*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
796*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
797*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
798*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448>)
799*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].4s, #2.75000000
800*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
801*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
802*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
803*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 1076887552, i32 1076887552, i32 1076887552, i32 1076887552>)
804*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG:[0-9]+]].4s, #2.5000000
805*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
806*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v2i64
807*9880d681SAndroid Build Coastguard Worker  call i64 @f_v2i64(<2 x i64> <i64 4620693218757967872, i64 4620693218757967872>)
808*9880d681SAndroid Build Coastguard Worker
809*9880d681SAndroid Build Coastguard Worker  ret void
810*9880d681SAndroid Build Coastguard Worker}
811*9880d681SAndroid Build Coastguard Worker
812*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: modimm_t12_call:
813*9880d681SAndroid Build Coastguard Workerdefine void @modimm_t12_call() {
814*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].2d, #0.18750000
815*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].16b, v[[REG1]].16b
816*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
817*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v16i8
818*9880d681SAndroid Build Coastguard Worker  call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 200, i8 63, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 200, i8 63>)
819*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].2d, #0.17968750
820*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].8h, v[[REG1]].8h
821*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
822*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v8i16
823*9880d681SAndroid Build Coastguard Worker  call i16 @f_v8i16(<8 x i16> <i16 0, i16 0, i16 0, i16 16327, i16 0, i16 0, i16 0, i16 16327>)
824*9880d681SAndroid Build Coastguard Worker  ; CHECK:         fmov    v[[REG1:[0-9]+]].2d, #0.17187500
825*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    rev64   v[[REG2:[0-9]+]].4s, v[[REG1]].4s
826*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    ext     v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
827*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT:    bl      f_v4i32
828*9880d681SAndroid Build Coastguard Worker  call i32 @f_v4i32(<4 x i32> <i32 0, i32 1069940736, i32 0, i32 1069940736>)
829*9880d681SAndroid Build Coastguard Worker
830*9880d681SAndroid Build Coastguard Worker  ret void
831*9880d681SAndroid Build Coastguard Worker}
832