Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -mcpu=cyclone | FileCheck %s
      2 
      3 
      4 ; The mask:
      5 ; CHECK: lCPI0_0:
      6 ; CHECK:  .byte   2                       ; 0x2
      7 ; CHECK:  .byte   255                     ; 0xff
      8 ; CHECK:  .byte   6                       ; 0x6
      9 ; CHECK:  .byte   255                     ; 0xff
     10 ; The second vector is legalized to undef and the elements of the first vector
     11 ; are used instead.
     12 ; CHECK:  .byte   2                       ; 0x2
     13 ; CHECK:  .byte   4                       ; 0x4
     14 ; CHECK:  .byte   6                       ; 0x6
     15 ; CHECK:  .byte   0                       ; 0x0
     16 ; CHECK: test1
     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() {
     21 entry:
     22   %Shuff = shufflevector <8 x i1> <i1 0, i1 1, i1 2, i1 3, i1 4, i1 5, i1 6,
     23                                    i1 7>,
     24                          <8 x i1> <i1 0, i1 1, i1 2, i1 3, i1 4, i1 5, i1 6,
     25                                    i1 7>,
     26                          <8 x i32> <i32 2, i32 undef, i32 6, i32 undef, i32 10,
     27                                     i32 12, i32 14, i32 0>
     28   ret <8 x i1> %Shuff
     29 }
     30 
     31 ; CHECK: lCPI1_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
     40 ; CHECK: test2
     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() {
     46 bb:
     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,
     50                 i32 0>
     51   ret <8 x i1> %Shuff
     52 }
     53 
     54 ; CHECK: lCPI2_0:
     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
     71 ; CHECK: test3
     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) {
     77 bb:
     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,
     81                  i32 14, i32 0>
     82   ret <16 x i1> %Shuff
     83 }
     84 ; CHECK: lCPI3_1:
     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
    101 ; CHECK: _test4:
    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) {
    108 bb:
    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>
    114   ret <16 x i1> %Shuff
    115 }
    116