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 2 ; 0x2
33 ; CHECK: .byte 255 ; 0xff
34 ; CHECK: .byte 6 ; 0x6
35 ; CHECK: .byte 255 ; 0xff
36 ; CHECK: .byte 10 ; 0xa
37 ; CHECK: .byte 12 ; 0xc
38 ; CHECK: .byte 14 ; 0xe
39 ; CHECK: .byte 0 ; 0x0
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 2 ; 0x2
86 ; CHECK: .byte 1 ; 0x1
87 ; CHECK: .byte 6 ; 0x6
88 ; CHECK: .byte 18 ; 0x12
89 ; CHECK: .byte 10 ; 0xa
90 ; CHECK: .byte 12 ; 0xc
91 ; CHECK: .byte 14 ; 0xe
92 ; CHECK: .byte 0 ; 0x0
93 ; CHECK: .byte 2 ; 0x2
94 ; CHECK: .byte 31 ; 0x1f
95 ; CHECK: .byte 6 ; 0x6
96 ; CHECK: .byte 30 ; 0x1e
97 ; CHECK: .byte 10 ; 0xa
98 ; CHECK: .byte 12 ; 0xc
99 ; CHECK: .byte 14 ; 0xe
100 ; CHECK: .byte 0 ; 0x0
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>