1 ; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -mcpu=cyclone | FileCheck %s
7 ; CHECK: .byte 255 ; 0xff
9 ; CHECK: .byte 255 ; 0xff
10 ; The second vector is legalized to undef and the elements of the first vector
12 ; CHECK: .byte 2 ; 0x2
13 ; CHECK: .byte 4 ; 0x4
14 ; CHECK: .byte 6 ; 0x6
15 ; CHECK: .byte 0 ; 0x0
17 ; CHECK: ldr d[[REG0:[0-9]+]], [{{.*}}, lCPI0_0
18 ; CHECK: movi.8h v[[REG1:[0-9]+]], #0x1, lsl #8
19 ; CHECK: tbl.8b v{{[0-9]+}}, { v[[REG1]] }, v[[REG0]]
20 define <8 x i1> @test1() {
22 %Shuff = shufflevector <8 x i1> <i1 0, i1 1, i1 2, i1 3, i1 4, i1 5, i1 6,
24 <8 x i1> <i1 0, i1 1, i1 2, i1 3, i1 4, i1 5, i1 6,
26 <8 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10,
27 i32 12, i32 14, i32 0>
32 ; CHECK: .byte 0 ; 0x0
33 ; CHECK: .byte 255 ; 0xff
34 ; CHECK: .byte 2 ; 0x2
35 ; CHECK: .byte 255 ; 0xff
36 ; CHECK: .byte 10 ; 0xa
37 ; CHECK: .byte 12 ; 0xc
38 ; CHECK: .byte 14 ; 0xe
39 ; CHECK: .byte 7 ; 0x7
41 ; CHECK: ldr d[[REG0:[0-9]+]], [{{.*}}, lCPI1_0@PAGEOFF]
42 ; CHECK: adrp x[[REG2:[0-9]+]], lCPI1_1@PAGE
43 ; CHECK: ldr q[[REG1:[0-9]+]], [x[[REG2]], lCPI1_1@PAGEOFF]
44 ; CHECK: tbl.8b v{{[0-9]+}}, { v[[REG1]] }, v[[REG0]]
45 define <8 x i1>@test2() {
47 %Shuff = shufflevector <8 x i1> zeroinitializer,
48 <8 x i1> <i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 0, i1 0>,
49 <8 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10, i32 12, i32 14,
55 ; CHECK: .byte 2 ; 0x2
56 ; CHECK: .byte 255 ; 0xff
57 ; CHECK: .byte 6 ; 0x6
58 ; CHECK: .byte 255 ; 0xff
59 ; CHECK: .byte 10 ; 0xa
60 ; CHECK: .byte 12 ; 0xc
61 ; CHECK: .byte 14 ; 0xe
62 ; CHECK: .byte 0 ; 0x0
63 ; CHECK: .byte 2 ; 0x2
64 ; CHECK: .byte 255 ; 0xff
65 ; CHECK: .byte 6 ; 0x6
66 ; CHECK: .byte 255 ; 0xff
67 ; CHECK: .byte 10 ; 0xa
68 ; CHECK: .byte 12 ; 0xc
69 ; CHECK: .byte 14 ; 0xe
70 ; CHECK: .byte 0 ; 0x0
72 ; CHECK: adrp x[[REG3:[0-9]+]], lCPI2_0@PAGE
73 ; CHECK: ldr q[[REG0:[0-9]+]], [x[[REG3]], lCPI2_0@PAGEOFF]
74 ; CHECK: ldr q[[REG1:[0-9]+]], [x[[REG3]], lCPI2_1@PAGEOFF]
75 ; CHECK: tbl.16b v{{[0-9]+}}, { v[[REG1]] }, v[[REG0]]
76 define <16 x i1> @test3(i1* %ptr, i32 %v) {
78 %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,
79 <16 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10, i32 12, i32 14,
80 i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 10, i32 12,
85 ; CHECK: .byte 0 ; 0x0
86 ; CHECK: .byte 1 ; 0x1
87 ; CHECK: .byte 2 ; 0x2
88 ; CHECK: .byte 18 ; 0x12
89 ; CHECK: .byte 4 ; 0x4
90 ; CHECK: .byte 5 ; 0x5
91 ; CHECK: .byte 6 ; 0x6
92 ; CHECK: .byte 7 ; 0x7
93 ; CHECK: .byte 8 ; 0x8
94 ; CHECK: .byte 31 ; 0x1f
95 ; CHECK: .byte 10 ; 0xa
96 ; CHECK: .byte 30 ; 0x1e
97 ; CHECK: .byte 12 ; 0xc
98 ; CHECK: .byte 13 ; 0xd
99 ; CHECK: .byte 14 ; 0xe
100 ; CHECK: .byte 15 ; 0xf
102 ; CHECK: ldr q[[REG1:[0-9]+]]
103 ; CHECK: movi.2d v[[REG0:[0-9]+]], #0000000000000000
104 ; CHECK: adrp x[[REG3:[0-9]+]], lCPI3_1@PAGE
105 ; CHECK: ldr q[[REG2:[0-9]+]], [x[[REG3]], lCPI3_1@PAGEOFF]
106 ; CHECK: tbl.16b v{{[0-9]+}}, { v[[REG0]], v[[REG1]] }, v[[REG2]]
107 define <16 x i1> @test4(i1* %ptr, i32 %v) {
109 %Shuff = shufflevector <16 x i1> zeroinitializer,
110 <16 x i1> <i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 0, i1 0, i1 0, i1 1,
111 i1 1, i1 0, i1 0, i1 1, i1 0, i1 0>,
112 <16 x i32> <i32 2, i32 1, i32 6, i32 18, i32 10, i32 12, i32 14, i32 0,
113 i32 2, i32 31, i32 6, i32 30, i32 10, i32 12, i32 14, i32 0>