160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq -O2 | FileCheck %s --check-prefix=AVX512-ALL3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O2| FileCheck %s --check-prefix=AVX512-ONLY4 5define void @load_v1i2_trunc_v1i1_store(ptr %a0,ptr %a1) {6; AVX512-ALL-LABEL: load_v1i2_trunc_v1i1_store:7; AVX512-ALL: # %bb.0:8; AVX512-ALL-NEXT: kmovb (%rdi), %k09; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k010; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k011; AVX512-ALL-NEXT: kmovb %k0, (%rsi)12; AVX512-ALL-NEXT: retq13;14; AVX512-ONLY-LABEL: load_v1i2_trunc_v1i1_store:15; AVX512-ONLY: # %bb.0:16; AVX512-ONLY-NEXT: movzbl (%rdi), %eax17; AVX512-ONLY-NEXT: andl $1, %eax18; AVX512-ONLY-NEXT: kmovw %eax, %k019; AVX512-ONLY-NEXT: kmovw %k0, %eax20; AVX512-ONLY-NEXT: movb %al, (%rsi)21; AVX512-ONLY-NEXT: retq22 %d0 = load <1 x i2>, ptr %a023 %d1 = trunc <1 x i2> %d0 to <1 x i1>24 store <1 x i1> %d1, ptr %a125 ret void26}27define void @load_v1i3_trunc_v1i1_store(ptr %a0,ptr %a1) {28; AVX512-ALL-LABEL: load_v1i3_trunc_v1i1_store:29; AVX512-ALL: # %bb.0:30; AVX512-ALL-NEXT: kmovb (%rdi), %k031; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k032; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k033; AVX512-ALL-NEXT: kmovb %k0, (%rsi)34; AVX512-ALL-NEXT: retq35;36; AVX512-ONLY-LABEL: load_v1i3_trunc_v1i1_store:37; AVX512-ONLY: # %bb.0:38; AVX512-ONLY-NEXT: movzbl (%rdi), %eax39; AVX512-ONLY-NEXT: andl $1, %eax40; AVX512-ONLY-NEXT: kmovw %eax, %k041; AVX512-ONLY-NEXT: kmovw %k0, %eax42; AVX512-ONLY-NEXT: movb %al, (%rsi)43; AVX512-ONLY-NEXT: retq44 %d0 = load <1 x i3>, ptr %a045 %d1 = trunc <1 x i3> %d0 to <1 x i1>46 store <1 x i1> %d1, ptr %a147 ret void48}49define void @load_v1i4_trunc_v1i1_store(ptr %a0,ptr %a1) {50; AVX512-ALL-LABEL: load_v1i4_trunc_v1i1_store:51; AVX512-ALL: # %bb.0:52; AVX512-ALL-NEXT: kmovb (%rdi), %k053; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k054; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k055; AVX512-ALL-NEXT: kmovb %k0, (%rsi)56; AVX512-ALL-NEXT: retq57;58; AVX512-ONLY-LABEL: load_v1i4_trunc_v1i1_store:59; AVX512-ONLY: # %bb.0:60; AVX512-ONLY-NEXT: movzbl (%rdi), %eax61; AVX512-ONLY-NEXT: andl $1, %eax62; AVX512-ONLY-NEXT: kmovw %eax, %k063; AVX512-ONLY-NEXT: kmovw %k0, %eax64; AVX512-ONLY-NEXT: movb %al, (%rsi)65; AVX512-ONLY-NEXT: retq66 %d0 = load <1 x i4>, ptr %a067 %d1 = trunc <1 x i4> %d0 to <1 x i1>68 store <1 x i1> %d1, ptr %a169 ret void70}71define void @load_v1i8_trunc_v1i1_store(ptr %a0,ptr %a1) {72; AVX512-ALL-LABEL: load_v1i8_trunc_v1i1_store:73; AVX512-ALL: # %bb.0:74; AVX512-ALL-NEXT: kmovb (%rdi), %k075; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k076; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k077; AVX512-ALL-NEXT: kmovb %k0, (%rsi)78; AVX512-ALL-NEXT: retq79;80; AVX512-ONLY-LABEL: load_v1i8_trunc_v1i1_store:81; AVX512-ONLY: # %bb.0:82; AVX512-ONLY-NEXT: movzbl (%rdi), %eax83; AVX512-ONLY-NEXT: andl $1, %eax84; AVX512-ONLY-NEXT: kmovw %eax, %k085; AVX512-ONLY-NEXT: kmovw %k0, %eax86; AVX512-ONLY-NEXT: movb %al, (%rsi)87; AVX512-ONLY-NEXT: retq88 %d0 = load <1 x i8>, ptr %a089 %d1 = trunc <1 x i8> %d0 to <1 x i1>90 store <1 x i1> %d1, ptr %a191 ret void92}93define void @load_v1i16_trunc_v1i1_store(ptr %a0,ptr %a1) {94; AVX512-ALL-LABEL: load_v1i16_trunc_v1i1_store:95; AVX512-ALL: # %bb.0:96; AVX512-ALL-NEXT: kmovb (%rdi), %k097; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k098; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k099; AVX512-ALL-NEXT: kmovb %k0, (%rsi)100; AVX512-ALL-NEXT: retq101;102; AVX512-ONLY-LABEL: load_v1i16_trunc_v1i1_store:103; AVX512-ONLY: # %bb.0:104; AVX512-ONLY-NEXT: movzbl (%rdi), %eax105; AVX512-ONLY-NEXT: andl $1, %eax106; AVX512-ONLY-NEXT: kmovw %eax, %k0107; AVX512-ONLY-NEXT: kmovw %k0, %eax108; AVX512-ONLY-NEXT: movb %al, (%rsi)109; AVX512-ONLY-NEXT: retq110 %d0 = load <1 x i16>, ptr %a0111 %d1 = trunc <1 x i16> %d0 to <1 x i1>112 store <1 x i1> %d1, ptr %a1113 ret void114}115define void @load_v1i32_trunc_v1i1_store(ptr %a0,ptr %a1) {116; AVX512-ALL-LABEL: load_v1i32_trunc_v1i1_store:117; AVX512-ALL: # %bb.0:118; AVX512-ALL-NEXT: kmovb (%rdi), %k0119; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k0120; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k0121; AVX512-ALL-NEXT: kmovb %k0, (%rsi)122; AVX512-ALL-NEXT: retq123;124; AVX512-ONLY-LABEL: load_v1i32_trunc_v1i1_store:125; AVX512-ONLY: # %bb.0:126; AVX512-ONLY-NEXT: movzbl (%rdi), %eax127; AVX512-ONLY-NEXT: andl $1, %eax128; AVX512-ONLY-NEXT: kmovw %eax, %k0129; AVX512-ONLY-NEXT: kmovw %k0, %eax130; AVX512-ONLY-NEXT: movb %al, (%rsi)131; AVX512-ONLY-NEXT: retq132 %d0 = load <1 x i32>, ptr %a0133 %d1 = trunc <1 x i32> %d0 to <1 x i1>134 store <1 x i1> %d1, ptr %a1135 ret void136}137define void @load_v1i64_trunc_v1i1_store(ptr %a0,ptr %a1) {138; AVX512-ALL-LABEL: load_v1i64_trunc_v1i1_store:139; AVX512-ALL: # %bb.0:140; AVX512-ALL-NEXT: kmovb (%rdi), %k0141; AVX512-ALL-NEXT: kshiftlb $7, %k0, %k0142; AVX512-ALL-NEXT: kshiftrb $7, %k0, %k0143; AVX512-ALL-NEXT: kmovb %k0, (%rsi)144; AVX512-ALL-NEXT: retq145;146; AVX512-ONLY-LABEL: load_v1i64_trunc_v1i1_store:147; AVX512-ONLY: # %bb.0:148; AVX512-ONLY-NEXT: movzbl (%rdi), %eax149; AVX512-ONLY-NEXT: andl $1, %eax150; AVX512-ONLY-NEXT: kmovw %eax, %k0151; AVX512-ONLY-NEXT: kmovw %k0, %eax152; AVX512-ONLY-NEXT: movb %al, (%rsi)153; AVX512-ONLY-NEXT: retq154 %d0 = load <1 x i64>, ptr %a0155 %d1 = trunc <1 x i64> %d0 to <1 x i1>156 store <1 x i1> %d1, ptr %a1157 ret void158}159 160