Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw -mattr=+avx512vl --show-mc-encoding| FileCheck %s
      2 
      3 ; CHECK-LABEL: test_256_1
      4 ; CHECK: vmovdqu8 {{.*}} ## encoding: [0x62
      5 ; CHECK: ret
      6 define <32 x i8> @test_256_1(i8 * %addr) {
      7   %vaddr = bitcast i8* %addr to <32 x i8>*
      8   %res = load <32 x i8>, <32 x i8>* %vaddr, align 1
      9   ret <32 x i8>%res
     10 }
     11 
     12 ; CHECK-LABEL: test_256_2
     13 ; CHECK: vmovdqu8{{.*}} ## encoding: [0x62
     14 ; CHECK: ret
     15 define void @test_256_2(i8 * %addr, <32 x i8> %data) {
     16   %vaddr = bitcast i8* %addr to <32 x i8>*
     17   store <32 x i8>%data, <32 x i8>* %vaddr, align 1
     18   ret void
     19 }
     20 
     21 ; CHECK-LABEL: test_256_3
     22 ; CHECK: vmovdqu8{{.*{%k[1-7]} }}## encoding: [0x62
     23 ; CHECK: ret
     24 define <32 x i8> @test_256_3(i8 * %addr, <32 x i8> %old, <32 x i8> %mask1) {
     25   %mask = icmp ne <32 x i8> %mask1, zeroinitializer
     26   %vaddr = bitcast i8* %addr to <32 x i8>*
     27   %r = load <32 x i8>, <32 x i8>* %vaddr, align 1
     28   %res = select <32 x i1> %mask, <32 x i8> %r, <32 x i8> %old
     29   ret <32 x i8>%res
     30 }
     31 
     32 ; CHECK-LABEL: test_256_4
     33 ; CHECK: vmovdqu8{{.*{%k[1-7]} {z} }}## encoding: [0x62
     34 ; CHECK: ret
     35 define <32 x i8> @test_256_4(i8 * %addr, <32 x i8> %mask1) {
     36   %mask = icmp ne <32 x i8> %mask1, zeroinitializer
     37   %vaddr = bitcast i8* %addr to <32 x i8>*
     38   %r = load <32 x i8>, <32 x i8>* %vaddr, align 1
     39   %res = select <32 x i1> %mask, <32 x i8> %r, <32 x i8> zeroinitializer
     40   ret <32 x i8>%res
     41 }
     42 
     43 ; CHECK-LABEL: test_256_5
     44 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
     45 ; CHECK: ret
     46 define <16 x i16> @test_256_5(i8 * %addr) {
     47   %vaddr = bitcast i8* %addr to <16 x i16>*
     48   %res = load <16 x i16>, <16 x i16>* %vaddr, align 1
     49   ret <16 x i16>%res
     50 }
     51 
     52 ; CHECK-LABEL: test_256_6
     53 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
     54 ; CHECK: ret
     55 define void @test_256_6(i8 * %addr, <16 x i16> %data) {
     56   %vaddr = bitcast i8* %addr to <16 x i16>*
     57   store <16 x i16>%data, <16 x i16>* %vaddr, align 1
     58   ret void
     59 }
     60 
     61 ; CHECK-LABEL: test_256_7
     62 ; CHECK: vmovdqu16{{.*{%k[1-7]} }}## encoding: [0x62
     63 ; CHECK: ret
     64 define <16 x i16> @test_256_7(i8 * %addr, <16 x i16> %old, <16 x i16> %mask1) {
     65   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
     66   %vaddr = bitcast i8* %addr to <16 x i16>*
     67   %r = load <16 x i16>, <16 x i16>* %vaddr, align 1
     68   %res = select <16 x i1> %mask, <16 x i16> %r, <16 x i16> %old
     69   ret <16 x i16>%res
     70 }
     71 
     72 ; CHECK-LABEL: test_256_8
     73 ; CHECK: vmovdqu16{{.*{%k[1-7]} {z} }}## encoding: [0x62
     74 ; CHECK: ret
     75 define <16 x i16> @test_256_8(i8 * %addr, <16 x i16> %mask1) {
     76   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
     77   %vaddr = bitcast i8* %addr to <16 x i16>*
     78   %r = load <16 x i16>, <16 x i16>* %vaddr, align 1
     79   %res = select <16 x i1> %mask, <16 x i16> %r, <16 x i16> zeroinitializer
     80   ret <16 x i16>%res
     81 }
     82 
     83 ; CHECK-LABEL: test_128_1
     84 ; CHECK: vmovdqu8 {{.*}} ## encoding: [0x62
     85 ; CHECK: ret
     86 define <16 x i8> @test_128_1(i8 * %addr) {
     87   %vaddr = bitcast i8* %addr to <16 x i8>*
     88   %res = load <16 x i8>, <16 x i8>* %vaddr, align 1
     89   ret <16 x i8>%res
     90 }
     91 
     92 ; CHECK-LABEL: test_128_2
     93 ; CHECK: vmovdqu8{{.*}} ## encoding: [0x62
     94 ; CHECK: ret
     95 define void @test_128_2(i8 * %addr, <16 x i8> %data) {
     96   %vaddr = bitcast i8* %addr to <16 x i8>*
     97   store <16 x i8>%data, <16 x i8>* %vaddr, align 1
     98   ret void
     99 }
    100 
    101 ; CHECK-LABEL: test_128_3
    102 ; CHECK: vmovdqu8{{.*{%k[1-7]} }}## encoding: [0x62
    103 ; CHECK: ret
    104 define <16 x i8> @test_128_3(i8 * %addr, <16 x i8> %old, <16 x i8> %mask1) {
    105   %mask = icmp ne <16 x i8> %mask1, zeroinitializer
    106   %vaddr = bitcast i8* %addr to <16 x i8>*
    107   %r = load <16 x i8>, <16 x i8>* %vaddr, align 1
    108   %res = select <16 x i1> %mask, <16 x i8> %r, <16 x i8> %old
    109   ret <16 x i8>%res
    110 }
    111 
    112 ; CHECK-LABEL: test_128_4
    113 ; CHECK: vmovdqu8{{.*{%k[1-7]} {z} }}## encoding: [0x62
    114 ; CHECK: ret
    115 define <16 x i8> @test_128_4(i8 * %addr, <16 x i8> %mask1) {
    116   %mask = icmp ne <16 x i8> %mask1, zeroinitializer
    117   %vaddr = bitcast i8* %addr to <16 x i8>*
    118   %r = load <16 x i8>, <16 x i8>* %vaddr, align 1
    119   %res = select <16 x i1> %mask, <16 x i8> %r, <16 x i8> zeroinitializer
    120   ret <16 x i8>%res
    121 }
    122 
    123 ; CHECK-LABEL: test_128_5
    124 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
    125 ; CHECK: ret
    126 define <8 x i16> @test_128_5(i8 * %addr) {
    127   %vaddr = bitcast i8* %addr to <8 x i16>*
    128   %res = load <8 x i16>, <8 x i16>* %vaddr, align 1
    129   ret <8 x i16>%res
    130 }
    131 
    132 ; CHECK-LABEL: test_128_6
    133 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
    134 ; CHECK: ret
    135 define void @test_128_6(i8 * %addr, <8 x i16> %data) {
    136   %vaddr = bitcast i8* %addr to <8 x i16>*
    137   store <8 x i16>%data, <8 x i16>* %vaddr, align 1
    138   ret void
    139 }
    140 
    141 ; CHECK-LABEL: test_128_7
    142 ; CHECK: vmovdqu16{{.*{%k[1-7]} }}## encoding: [0x62
    143 ; CHECK: ret
    144 define <8 x i16> @test_128_7(i8 * %addr, <8 x i16> %old, <8 x i16> %mask1) {
    145   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
    146   %vaddr = bitcast i8* %addr to <8 x i16>*
    147   %r = load <8 x i16>, <8 x i16>* %vaddr, align 1
    148   %res = select <8 x i1> %mask, <8 x i16> %r, <8 x i16> %old
    149   ret <8 x i16>%res
    150 }
    151 
    152 ; CHECK-LABEL: test_128_8
    153 ; CHECK: vmovdqu16{{.*{%k[1-7]} {z} }}## encoding: [0x62
    154 ; CHECK: ret
    155 define <8 x i16> @test_128_8(i8 * %addr, <8 x i16> %mask1) {
    156   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
    157   %vaddr = bitcast i8* %addr to <8 x i16>*
    158   %r = load <8 x i16>, <8 x i16>* %vaddr, align 1
    159   %res = select <8 x i1> %mask, <8 x i16> %r, <8 x i16> zeroinitializer
    160   ret <8 x i16>%res
    161 }
    162 
    163