Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq -O2 | FileCheck %s --check-prefix=AVX512-ALL
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O2| FileCheck %s --check-prefix=AVX512-ONLY
      4 
      5 define void @load_v1i2_trunc_v1i1_store(<1 x i2>* %a0,<1 x i1>* %a1) {
      6 ; AVX512-ALL-LABEL: load_v1i2_trunc_v1i1_store:
      7 ; AVX512-ALL:       # %bb.0:
      8 ; AVX512-ALL-NEXT:    movb (%rdi), %al
      9 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
     10 ; AVX512-ALL-NEXT:    retq
     11 ;
     12 ; AVX512-ONLY-LABEL: load_v1i2_trunc_v1i1_store:
     13 ; AVX512-ONLY:       # %bb.0:
     14 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
     15 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
     16 ; AVX512-ONLY-NEXT:    retq
     17     %d0 = load <1 x i2>, <1 x i2>* %a0
     18     %d1 = trunc <1 x i2> %d0 to <1 x i1>
     19     store <1 x i1> %d1, <1 x i1>* %a1
     20     ret void
     21 }
     22 define void @load_v1i3_trunc_v1i1_store(<1 x i3>* %a0,<1 x i1>* %a1) {
     23 ; AVX512-ALL-LABEL: load_v1i3_trunc_v1i1_store:
     24 ; AVX512-ALL:       # %bb.0:
     25 ; AVX512-ALL-NEXT:    movb (%rdi), %al
     26 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
     27 ; AVX512-ALL-NEXT:    retq
     28 ;
     29 ; AVX512-ONLY-LABEL: load_v1i3_trunc_v1i1_store:
     30 ; AVX512-ONLY:       # %bb.0:
     31 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
     32 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
     33 ; AVX512-ONLY-NEXT:    retq
     34     %d0 = load <1 x i3>, <1 x i3>* %a0
     35     %d1 = trunc <1 x i3> %d0 to <1 x i1>
     36     store <1 x i1> %d1, <1 x i1>* %a1
     37     ret void
     38 }
     39 define void @load_v1i4_trunc_v1i1_store(<1 x i4>* %a0,<1 x i1>* %a1) {
     40 ; AVX512-ALL-LABEL: load_v1i4_trunc_v1i1_store:
     41 ; AVX512-ALL:       # %bb.0:
     42 ; AVX512-ALL-NEXT:    movb (%rdi), %al
     43 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
     44 ; AVX512-ALL-NEXT:    retq
     45 ;
     46 ; AVX512-ONLY-LABEL: load_v1i4_trunc_v1i1_store:
     47 ; AVX512-ONLY:       # %bb.0:
     48 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
     49 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
     50 ; AVX512-ONLY-NEXT:    retq
     51     %d0 = load <1 x i4>, <1 x i4>* %a0
     52     %d1 = trunc <1 x i4> %d0 to <1 x i1>
     53     store <1 x i1> %d1, <1 x i1>* %a1
     54     ret void
     55 }
     56 define void @load_v1i8_trunc_v1i1_store(<1 x i8>* %a0,<1 x i1>* %a1) {
     57 ; AVX512-ALL-LABEL: load_v1i8_trunc_v1i1_store:
     58 ; AVX512-ALL:       # %bb.0:
     59 ; AVX512-ALL-NEXT:    movb (%rdi), %al
     60 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
     61 ; AVX512-ALL-NEXT:    retq
     62 ;
     63 ; AVX512-ONLY-LABEL: load_v1i8_trunc_v1i1_store:
     64 ; AVX512-ONLY:       # %bb.0:
     65 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
     66 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
     67 ; AVX512-ONLY-NEXT:    retq
     68     %d0 = load <1 x i8>, <1 x i8>* %a0
     69     %d1 = trunc <1 x i8> %d0 to <1 x i1>
     70     store <1 x i1> %d1, <1 x i1>* %a1
     71     ret void
     72 }
     73 define void @load_v1i16_trunc_v1i1_store(<1 x i16>* %a0,<1 x i1>* %a1) {
     74 ; AVX512-ALL-LABEL: load_v1i16_trunc_v1i1_store:
     75 ; AVX512-ALL:       # %bb.0:
     76 ; AVX512-ALL-NEXT:    movb (%rdi), %al
     77 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
     78 ; AVX512-ALL-NEXT:    retq
     79 ;
     80 ; AVX512-ONLY-LABEL: load_v1i16_trunc_v1i1_store:
     81 ; AVX512-ONLY:       # %bb.0:
     82 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
     83 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
     84 ; AVX512-ONLY-NEXT:    retq
     85     %d0 = load <1 x i16>, <1 x i16>* %a0
     86     %d1 = trunc <1 x i16> %d0 to <1 x i1>
     87     store <1 x i1> %d1, <1 x i1>* %a1
     88     ret void
     89 }
     90 define void @load_v1i32_trunc_v1i1_store(<1 x i32>* %a0,<1 x i1>* %a1) {
     91 ; AVX512-ALL-LABEL: load_v1i32_trunc_v1i1_store:
     92 ; AVX512-ALL:       # %bb.0:
     93 ; AVX512-ALL-NEXT:    movb (%rdi), %al
     94 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
     95 ; AVX512-ALL-NEXT:    retq
     96 ;
     97 ; AVX512-ONLY-LABEL: load_v1i32_trunc_v1i1_store:
     98 ; AVX512-ONLY:       # %bb.0:
     99 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
    100 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
    101 ; AVX512-ONLY-NEXT:    retq
    102     %d0 = load <1 x i32>, <1 x i32>* %a0
    103     %d1 = trunc <1 x i32> %d0 to <1 x i1>
    104     store <1 x i1> %d1, <1 x i1>* %a1
    105     ret void
    106 }
    107 define void @load_v1i64_trunc_v1i1_store(<1 x i64>* %a0,<1 x i1>* %a1) {
    108 ; AVX512-ALL-LABEL: load_v1i64_trunc_v1i1_store:
    109 ; AVX512-ALL:       # %bb.0:
    110 ; AVX512-ALL-NEXT:    movb (%rdi), %al
    111 ; AVX512-ALL-NEXT:    movb %al, (%rsi)
    112 ; AVX512-ALL-NEXT:    retq
    113 ;
    114 ; AVX512-ONLY-LABEL: load_v1i64_trunc_v1i1_store:
    115 ; AVX512-ONLY:       # %bb.0:
    116 ; AVX512-ONLY-NEXT:    movb (%rdi), %al
    117 ; AVX512-ONLY-NEXT:    movb %al, (%rsi)
    118 ; AVX512-ONLY-NEXT:    retq
    119     %d0 = load <1 x i64>, <1 x i64>* %a0
    120     %d1 = trunc <1 x i64> %d0 to <1 x i1>
    121     store <1 x i1> %d1, <1 x i1>* %a1
    122     ret void
    123 }
    124 
    125