@@ -10,7 +10,8 @@ define arm_aapcs_vfpcc <8 x i8> @vmov_i8() {
1010;
1111; CHECK-BE-LABEL: vmov_i8:
1212; CHECK-BE: @ %bb.0:
13- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff
13+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff00000000000000
14+ ; CHECK-BE-NEXT: vrev64.8 d0, d16
1415; CHECK-BE-NEXT: bx lr
1516 ret <8 x i8 > <i8 0 , i8 0 , i8 0 , i8 0 , i8 0 , i8 0 , i8 0 , i8 -1 >
1617}
@@ -23,7 +24,8 @@ define arm_aapcs_vfpcc <4 x i16> @vmov_i16_a() {
2324;
2425; CHECK-BE-LABEL: vmov_i16_a:
2526; CHECK-BE: @ %bb.0:
26- ; CHECK-BE-NEXT: vmov.i64 d0, #0xffff
27+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xffff000000000000
28+ ; CHECK-BE-NEXT: vrev64.16 d0, d16
2729; CHECK-BE-NEXT: bx lr
2830 ret <4 x i16 > <i16 0 , i16 0 , i16 0 , i16 -1 >
2931}
@@ -36,7 +38,8 @@ define arm_aapcs_vfpcc <4 x i16> @vmov_i16_b() {
3638;
3739; CHECK-BE-LABEL: vmov_i16_b:
3840; CHECK-BE: @ %bb.0:
39- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff
41+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff000000000000
42+ ; CHECK-BE-NEXT: vrev64.16 d0, d16
4043; CHECK-BE-NEXT: bx lr
4144 ret <4 x i16 > <i16 0 , i16 0 , i16 0 , i16 255 >
4245}
@@ -49,7 +52,8 @@ define arm_aapcs_vfpcc <4 x i16> @vmov_i16_c() {
4952;
5053; CHECK-BE-LABEL: vmov_i16_c:
5154; CHECK-BE: @ %bb.0:
52- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff00
55+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff00000000000000
56+ ; CHECK-BE-NEXT: vrev64.16 d0, d16
5357; CHECK-BE-NEXT: bx lr
5458 ret <4 x i16 > <i16 0 , i16 0 , i16 0 , i16 65280 >
5559}
@@ -62,7 +66,8 @@ define arm_aapcs_vfpcc <2 x i32> @vmov_i32_a() {
6266;
6367; CHECK-BE-LABEL: vmov_i32_a:
6468; CHECK-BE: @ %bb.0:
65- ; CHECK-BE-NEXT: vmov.i64 d0, #0xffffffff
69+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xffffffff00000000
70+ ; CHECK-BE-NEXT: vrev64.32 d0, d16
6671; CHECK-BE-NEXT: bx lr
6772 ret <2 x i32 > <i32 0 , i32 -1 >
6873}
@@ -75,7 +80,8 @@ define arm_aapcs_vfpcc <2 x i32> @vmov_i32_b() {
7580;
7681; CHECK-BE-LABEL: vmov_i32_b:
7782; CHECK-BE: @ %bb.0:
78- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff
83+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff00000000
84+ ; CHECK-BE-NEXT: vrev64.32 d0, d16
7985; CHECK-BE-NEXT: bx lr
8086 ret <2 x i32 > <i32 0 , i32 255 >
8187}
@@ -88,7 +94,8 @@ define arm_aapcs_vfpcc <2 x i32> @vmov_i32_c() {
8894;
8995; CHECK-BE-LABEL: vmov_i32_c:
9096; CHECK-BE: @ %bb.0:
91- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff00
97+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff0000000000
98+ ; CHECK-BE-NEXT: vrev64.32 d0, d16
9299; CHECK-BE-NEXT: bx lr
93100 ret <2 x i32 > <i32 0 , i32 65280 >
94101}
@@ -101,7 +108,8 @@ define arm_aapcs_vfpcc <2 x i32> @vmov_i32_d() {
101108;
102109; CHECK-BE-LABEL: vmov_i32_d:
103110; CHECK-BE: @ %bb.0:
104- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff0000
111+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff000000000000
112+ ; CHECK-BE-NEXT: vrev64.32 d0, d16
105113; CHECK-BE-NEXT: bx lr
106114 ret <2 x i32 > <i32 0 , i32 16711680 >
107115}
@@ -114,7 +122,8 @@ define arm_aapcs_vfpcc <2 x i32> @vmov_i32_e() {
114122;
115123; CHECK-BE-LABEL: vmov_i32_e:
116124; CHECK-BE: @ %bb.0:
117- ; CHECK-BE-NEXT: vmov.i64 d0, #0xff000000
125+ ; CHECK-BE-NEXT: vmov.i64 d16, #0xff00000000000000
126+ ; CHECK-BE-NEXT: vrev64.32 d0, d16
118127; CHECK-BE-NEXT: bx lr
119128 ret <2 x i32 > <i32 0 , i32 4278190080 >
120129}
@@ -128,10 +137,16 @@ define arm_aapcs_vfpcc <1 x i64> @vmov_i64_a() {
128137}
129138
130139define arm_aapcs_vfpcc <1 x i64 > @vmov_i64_b () {
131- ; CHECK-LABEL: vmov_i64_b:
132- ; CHECK: @ %bb.0:
133- ; CHECK-NEXT: vmov.i64 d0, #0xffff00ff0000ff
134- ; CHECK-NEXT: bx lr
140+ ; CHECK-LE-LABEL: vmov_i64_b:
141+ ; CHECK-LE: @ %bb.0:
142+ ; CHECK-LE-NEXT: vmov.i64 d0, #0xffff00ff0000ff
143+ ; CHECK-LE-NEXT: bx lr
144+ ;
145+ ; CHECK-BE-LABEL: vmov_i64_b:
146+ ; CHECK-BE: @ %bb.0:
147+ ; CHECK-BE-NEXT: d16, #0xff0000ff00ffff00
148+ ; CHECK-BE-NEXT: vrev64.32 d0, d16
149+ ; CHECK-BE-NEXT: bx lr
135150 ret <1 x i64 > <i64 72056498804490495 >
136151}
137152
@@ -157,11 +172,18 @@ define arm_aapcs_vfpcc <4 x i32> @vmov_v4i32_b() {
157172}
158173
159174define arm_aapcs_vfpcc <2 x i64 > @and_v2i64_b (<2 x i64 > %a ) {
160- ; CHECK-LABEL: and_v2i64_b:
161- ; CHECK: @ %bb.0:
162- ; CHECK-NEXT: vmov.i64 q8, #0xffff00ff0000ff
163- ; CHECK-NEXT: vand q0, q0, q8
164- ; CHECK-NEXT: bx lr
175+ ; CHECK-LE-LABEL: and_v2i64_b:
176+ ; CHECK-LE: @ %bb.0:
177+ ; CHECK-LE-NEXT: vmov.i64 q8, #0xffff00ff0000ff
178+ ; CHECK-LE-NEXT: vand q0, q0, q8
179+ ; CHECK-LE-NEXT: bx lr
180+ ;
181+ ; CHECK-BE-LABEL: and_v2i64_b:
182+ ; CHECK-BE: @ %bb.0:
183+ ; CHECK-BE-NEXT: q8, #0xff0000ff00ffff00
184+ ; CHECK-BE-NEXT: vrev64.32 q8, q8
185+ ; CHECK-BE-NEXT: vand q0, q0, q8
186+ ; CHECK-BE-NEXT: bx lr
165187 %b = and <2 x i64 > %a , <i64 72056498804490495 , i64 72056498804490495 >
166188 ret <2 x i64 > %b
167189}
@@ -175,9 +197,8 @@ define arm_aapcs_vfpcc <4 x i32> @and_v4i32_b(<4 x i32> %a) {
175197;
176198; CHECK-BE-LABEL: and_v4i32_b:
177199; CHECK-BE: @ %bb.0:
178- ; CHECK-BE-NEXT: vmov.i64 q8, #0xffff00ff0000ff
200+ ; CHECK-BE-NEXT: vmov.i64 q8, #0xff0000ff00ffff00
179201; CHECK-BE-NEXT: vrev64.32 q9, q0
180- ; CHECK-BE-NEXT: vrev64.32 q8, q8
181202; CHECK-BE-NEXT: vand q8, q9, q8
182203; CHECK-BE-NEXT: vrev64.32 q0, q8
183204; CHECK-BE-NEXT: bx lr
@@ -198,7 +219,6 @@ define arm_aapcs_vfpcc <8 x i16> @vmvn_v16i8_m1() {
198219 ret <8 x i16 > <i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 >
199220}
200221
201- ; FIXME: This is incorrect for BE
202222define arm_aapcs_vfpcc <8 x i16 > @and_v8i16_m1 (<8 x i16 > %a ) {
203223; CHECK-LE-LABEL: and_v8i16_m1:
204224; CHECK-LE: @ %bb.0:
@@ -227,7 +247,6 @@ define arm_aapcs_vfpcc <8 x i16> @xor_v8i16_m1(<8 x i16> %a) {
227247; CHECK-BE: @ %bb.0:
228248; CHECK-BE-NEXT: vmvn.i32 q8, #0x10000
229249; CHECK-BE-NEXT: vrev64.16 q9, q0
230- ; CHECK-BE-NEXT: vrev32.16 q8, q8
231250; CHECK-BE-NEXT: veor q8, q9, q8
232251; CHECK-BE-NEXT: vrev64.16 q0, q8
233252; CHECK-BE-NEXT: bx lr
0 commit comments