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