[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / AArch64 / arm64-vshuffle.ll
blobfdd7cad78536b0aeb30f7c69c09032e2185ac740
1 ; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -mcpu=cyclone | FileCheck %s
4 ; CHECK: test1
5 ; CHECK: movi.16b v[[REG0:[0-9]+]], #0
6 define <8 x i1> @test1() {
7 entry:
8   %Shuff = shufflevector <8 x i1> <i1 0, i1 1, i1 2, i1 3, i1 4, i1 5, i1 6,
9                                    i1 7>,
10                          <8 x i1> <i1 0, i1 1, i1 2, i1 3, i1 4, i1 5, i1 6,
11                                    i1 7>,
12                          <8 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10,
13                                     i32 12, i32 14, i32 0>
14   ret <8 x i1> %Shuff
17 ; CHECK: lCPI1_0:
18 ; CHECK:          .byte   0                       ; 0x0
19 ; CHECK:          .byte   0                       ; 0x0
20 ; CHECK:          .byte   0                       ; 0x0
21 ; CHECK:          .byte   0                       ; 0x0
22 ; CHECK:          .byte   1                       ; 0x1
23 ; CHECK:          .byte   0                       ; 0x0
24 ; CHECK:          .byte   0                       ; 0x0
25 ; CHECK:          .byte   0                       ; 0x0
26 ; CHECK: test2
27 ; CHECK: adrp    x[[REG2:[0-9]+]], lCPI1_0@PAGE
28 ; CHECK: ldr     d[[REG1:[0-9]+]], [x[[REG2]], lCPI1_0@PAGEOFF]
29 define <8 x i1>@test2() {
30 bb:
31   %Shuff = shufflevector <8 x i1> zeroinitializer,
32      <8 x i1> <i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 0, i1 0>,
33      <8 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10, i32 12, i32 14,
34                 i32 0>
35   ret <8 x i1> %Shuff
38 ; CHECK: test3
39 ; CHECK: movi.4s v{{[0-9]+}}, #1
40 define <16 x i1> @test3(i1* %ptr, i32 %v) {
41 bb:
42   %Shuff = shufflevector <16 x i1> <i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 0, i1 0>, <16 x i1> undef,
43      <16 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10, i32 12, i32 14,
44                  i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 10, i32 12,
45                  i32 14, i32 0>
46   ret <16 x i1> %Shuff
48 ; CHECK: lCPI3_0:
49 ; CHECK:         .byte   0                       ; 0x0
50 ; CHECK:         .byte   0                       ; 0x0
51 ; CHECK:         .byte   0                       ; 0x0
52 ; CHECK:         .byte   1                       ; 0x1
53 ; CHECK:         .byte   0                       ; 0x0
54 ; CHECK:         .byte   0                       ; 0x0
55 ; CHECK:         .byte   0                       ; 0x0
56 ; CHECK:         .byte   0                       ; 0x0
57 ; CHECK:         .byte   0                       ; 0x0
58 ; CHECK:         .byte   0                       ; 0x0
59 ; CHECK:         .byte   0                       ; 0x0
60 ; CHECK:         .byte   0                       ; 0x0
61 ; CHECK:         .byte   0                       ; 0x0
62 ; CHECK:         .byte   0                       ; 0x0
63 ; CHECK:         .byte   0                       ; 0x0
64 ; CHECK:         .byte   0                       ; 0x0
65 ; CHECK: _test4:
66 ; CHECK:         adrp    x[[REG3:[0-9]+]], lCPI3_0@PAGE
67 ; CHECK:         ldr     q[[REG2:[0-9]+]], [x[[REG3]], lCPI3_0@PAGEOFF]
68 define <16 x i1> @test4(i1* %ptr, i32 %v) {
69 bb:
70   %Shuff = shufflevector <16 x i1> zeroinitializer,
71      <16 x i1> <i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 0, i1 0, i1 0, i1 1,
72                 i1 1, i1 0, i1 0, i1 1, i1 0, i1 0>,
73      <16 x i32> <i32 2, i32 1, i32 6, i32 18, i32 10, i32 12, i32 14, i32 0,
74                  i32 2, i32 31, i32 6, i32 30, i32 10, i32 12, i32 14, i32 0>
75   ret <16 x i1> %Shuff