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-apple-darwin -mcpu=skx | FileCheck %s
      3 
      4 define i8 @mask8(i8 %x) {
      5 ; CHECK-LABEL: mask8:
      6 ; CHECK:       ## %bb.0:
      7 ; CHECK-NEXT:    notb %dil
      8 ; CHECK-NEXT:    movl %edi, %eax
      9 ; CHECK-NEXT:    retq
     10   %m0 = bitcast i8 %x to <8 x i1>
     11   %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>
     12   %ret = bitcast <8 x i1> %m1 to i8
     13   ret i8 %ret
     14 }
     15 
     16 define void @mask8_mem(i8* %ptr) {
     17 ; CHECK-LABEL: mask8_mem:
     18 ; CHECK:       ## %bb.0:
     19 ; CHECK-NEXT:    kmovb (%rdi), %k0
     20 ; CHECK-NEXT:    knotb %k0, %k0
     21 ; CHECK-NEXT:    kmovb %k0, (%rdi)
     22 ; CHECK-NEXT:    retq
     23   %x = load i8, i8* %ptr, align 4
     24   %m0 = bitcast i8 %x to <8 x i1>
     25   %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>
     26   %ret = bitcast <8 x i1> %m1 to i8
     27   store i8 %ret, i8* %ptr, align 4
     28   ret void
     29 }
     30 
     31 define i8 @mand8(i8 %x, i8 %y) {
     32 ; CHECK-LABEL: mand8:
     33 ; CHECK:       ## %bb.0:
     34 ; CHECK-NEXT:    movl %edi, %eax
     35 ; CHECK-NEXT:    xorl %esi, %eax
     36 ; CHECK-NEXT:    andl %esi, %edi
     37 ; CHECK-NEXT:    orl %eax, %edi
     38 ; CHECK-NEXT:    movl %edi, %eax
     39 ; CHECK-NEXT:    retq
     40   %ma = bitcast i8 %x to <8 x i1>
     41   %mb = bitcast i8 %y to <8 x i1>
     42   %mc = and <8 x i1> %ma, %mb
     43   %md = xor <8 x i1> %ma, %mb
     44   %me = or <8 x i1> %mc, %md
     45   %ret = bitcast <8 x i1> %me to i8
     46   ret i8 %ret
     47 }
     48 
     49 define i8 @mand8_mem(<8 x i1>* %x, <8 x i1>* %y) {
     50 ; CHECK-LABEL: mand8_mem:
     51 ; CHECK:       ## %bb.0:
     52 ; CHECK-NEXT:    kmovb (%rdi), %k0
     53 ; CHECK-NEXT:    kmovb (%rsi), %k1
     54 ; CHECK-NEXT:    kandb %k1, %k0, %k2
     55 ; CHECK-NEXT:    kxorb %k1, %k0, %k0
     56 ; CHECK-NEXT:    korb %k0, %k2, %k0
     57 ; CHECK-NEXT:    kmovd %k0, %eax
     58 ; CHECK-NEXT:    ## kill: def $al killed $al killed $eax
     59 ; CHECK-NEXT:    retq
     60   %ma = load <8 x i1>, <8 x i1>* %x
     61   %mb = load <8 x i1>, <8 x i1>* %y
     62   %mc = and <8 x i1> %ma, %mb
     63   %md = xor <8 x i1> %ma, %mb
     64   %me = or <8 x i1> %mc, %md
     65   %ret = bitcast <8 x i1> %me to i8
     66   ret i8 %ret
     67 }
     68