1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @mask32(i32 %x) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mask32: 6*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %edi, %k0 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: knotd %k0, %k0 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %k0, %eax 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 11*9880d681SAndroid Build Coastguard Worker %m0 = bitcast i32 %x to <32 x i1> 12*9880d681SAndroid Build Coastguard Worker %m1 = xor <32 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 13*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 14*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 15*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1> 16*9880d681SAndroid Build Coastguard Worker %ret = bitcast <32 x i1> %m1 to i32 17*9880d681SAndroid Build Coastguard Worker ret i32 %ret 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i64 @mask64(i64 %x) { 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mask64: 22*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k0 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: knotq %k0, %k0 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %k0, %rax 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 27*9880d681SAndroid Build Coastguard Worker %m0 = bitcast i64 %x to <64 x i1> 28*9880d681SAndroid Build Coastguard Worker %m1 = xor <64 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 29*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 30*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 31*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 32*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 33*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 34*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 35*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1> 36*9880d681SAndroid Build Coastguard Worker %ret = bitcast <64 x i1> %m1 to i64 37*9880d681SAndroid Build Coastguard Worker ret i64 %ret 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdefine void @mask32_mem(i32* %ptr) { 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mask32_mem: 42*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd (%rdi), %k0 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: knotd %k0, %k0 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %k0, (%rdi) 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 47*9880d681SAndroid Build Coastguard Worker %x = load i32, i32* %ptr, align 4 48*9880d681SAndroid Build Coastguard Worker %m0 = bitcast i32 %x to <32 x i1> 49*9880d681SAndroid Build Coastguard Worker %m1 = xor <32 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 50*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 51*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 52*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1> 53*9880d681SAndroid Build Coastguard Worker %ret = bitcast <32 x i1> %m1 to i32 54*9880d681SAndroid Build Coastguard Worker store i32 %ret, i32* %ptr, align 4 55*9880d681SAndroid Build Coastguard Worker ret void 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine void @mask64_mem(i64* %ptr) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mask64_mem: 60*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq (%rdi), %k0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: knotq %k0, %k0 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %k0, (%rdi) 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 65*9880d681SAndroid Build Coastguard Worker %x = load i64, i64* %ptr, align 4 66*9880d681SAndroid Build Coastguard Worker %m0 = bitcast i64 %x to <64 x i1> 67*9880d681SAndroid Build Coastguard Worker %m1 = xor <64 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 68*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 69*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 70*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 71*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 72*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 73*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, 74*9880d681SAndroid Build Coastguard Worker i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1> 75*9880d681SAndroid Build Coastguard Worker %ret = bitcast <64 x i1> %m1 to i64 76*9880d681SAndroid Build Coastguard Worker store i64 %ret, i64* %ptr, align 4 77*9880d681SAndroid Build Coastguard Worker ret void 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine i32 @mand32(i32 %x, i32 %y) { 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mand32: 82*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %edi, %eax 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl %esi, %eax 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorl %esi, %edi 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: orl %eax, %edi 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %edi, %eax 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 89*9880d681SAndroid Build Coastguard Worker %ma = bitcast i32 %x to <32 x i1> 90*9880d681SAndroid Build Coastguard Worker %mb = bitcast i32 %y to <32 x i1> 91*9880d681SAndroid Build Coastguard Worker %mc = and <32 x i1> %ma, %mb 92*9880d681SAndroid Build Coastguard Worker %md = xor <32 x i1> %ma, %mb 93*9880d681SAndroid Build Coastguard Worker %me = or <32 x i1> %mc, %md 94*9880d681SAndroid Build Coastguard Worker %ret = bitcast <32 x i1> %me to i32 95*9880d681SAndroid Build Coastguard Worker ret i32 %ret 96*9880d681SAndroid Build Coastguard Worker} 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdefine i32 @mand32_mem(<32 x i1>* %x, <32 x i1>* %y) { 99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mand32_mem: 100*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd (%rdi), %k0 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd (%rsi), %k1 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kandd %k1, %k0, %k2 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kxord %k1, %k0, %k0 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kord %k0, %k2, %k0 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %k0, %eax 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 108*9880d681SAndroid Build Coastguard Worker %ma = load <32 x i1>, <32 x i1>* %x 109*9880d681SAndroid Build Coastguard Worker %mb = load <32 x i1>, <32 x i1>* %y 110*9880d681SAndroid Build Coastguard Worker %mc = and <32 x i1> %ma, %mb 111*9880d681SAndroid Build Coastguard Worker %md = xor <32 x i1> %ma, %mb 112*9880d681SAndroid Build Coastguard Worker %me = or <32 x i1> %mc, %md 113*9880d681SAndroid Build Coastguard Worker %ret = bitcast <32 x i1> %me to i32 114*9880d681SAndroid Build Coastguard Worker ret i32 %ret 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine i64 @mand64(i64 %x, i64 %y) { 118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mand64: 119*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andq %rsi, %rax 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorq %rsi, %rdi 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: orq %rax, %rdi 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker %ma = bitcast i64 %x to <64 x i1> 127*9880d681SAndroid Build Coastguard Worker %mb = bitcast i64 %y to <64 x i1> 128*9880d681SAndroid Build Coastguard Worker %mc = and <64 x i1> %ma, %mb 129*9880d681SAndroid Build Coastguard Worker %md = xor <64 x i1> %ma, %mb 130*9880d681SAndroid Build Coastguard Worker %me = or <64 x i1> %mc, %md 131*9880d681SAndroid Build Coastguard Worker %ret = bitcast <64 x i1> %me to i64 132*9880d681SAndroid Build Coastguard Worker ret i64 %ret 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerdefine i64 @mand64_mem(<64 x i1>* %x, <64 x i1>* %y) { 136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mand64_mem: 137*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq (%rdi), %k0 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq (%rsi), %k1 140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kandq %k1, %k0, %k2 141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kxorq %k1, %k0, %k0 142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korq %k0, %k2, %k0 143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %k0, %rax 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 145*9880d681SAndroid Build Coastguard Worker %ma = load <64 x i1>, <64 x i1>* %x 146*9880d681SAndroid Build Coastguard Worker %mb = load <64 x i1>, <64 x i1>* %y 147*9880d681SAndroid Build Coastguard Worker %mc = and <64 x i1> %ma, %mb 148*9880d681SAndroid Build Coastguard Worker %md = xor <64 x i1> %ma, %mb 149*9880d681SAndroid Build Coastguard Worker %me = or <64 x i1> %mc, %md 150*9880d681SAndroid Build Coastguard Worker %ret = bitcast <64 x i1> %me to i64 151*9880d681SAndroid Build Coastguard Worker ret i64 %ret 152*9880d681SAndroid Build Coastguard Worker} 153