1 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s 2 3 define i8 @mask8(i8 %x) { 4 %m0 = bitcast i8 %x to <8 x i1> 5 %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1> 6 %ret = bitcast <8 x i1> %m1 to i8 7 ret i8 %ret 8 ; CHECK: mask8 9 ; CHECK: knotb 10 ; CHECK: ret 11 } 12 13 define void @mask8_mem(i8* %ptr) { 14 %x = load i8, i8* %ptr, align 4 15 %m0 = bitcast i8 %x to <8 x i1> 16 %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1> 17 %ret = bitcast <8 x i1> %m1 to i8 18 store i8 %ret, i8* %ptr, align 4 19 ret void 20 ; CHECK-LABEL: mask8_mem 21 ; CHECK: kmovb ([[ARG1:%rdi|%rcx]]), %k{{[0-7]}} 22 ; CHECK-NEXT: knotb 23 ; CHECK-NEXT: kmovb %k{{[0-7]}}, ([[ARG1]]) 24 ; CHECK: ret 25 } 26 27 define i8 @mand8(i8 %x, i8 %y) { 28 %ma = bitcast i8 %x to <8 x i1> 29 %mb = bitcast i8 %y to <8 x i1> 30 %mc = and <8 x i1> %ma, %mb 31 %md = xor <8 x i1> %ma, %mb 32 %me = or <8 x i1> %mc, %md 33 %ret = bitcast <8 x i1> %me to i8 34 ; CHECK: kandb 35 ; CHECK: kxorb 36 ; CHECK: korb 37 ret i8 %ret 38 } 39