1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s 3; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s 5; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s 6 7define void @and_v8i1(<8 x i1>* %x, <8 x i1>* %y) { 8; CHECK-LABEL: and_v8i1: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu 11; CHECK-NEXT: vle1.v v25, (a0) 12; CHECK-NEXT: vle1.v v26, (a1) 13; CHECK-NEXT: vmand.mm v25, v25, v26 14; CHECK-NEXT: vse1.v v25, (a0) 15; CHECK-NEXT: ret 16 %a = load <8 x i1>, <8 x i1>* %x 17 %b = load <8 x i1>, <8 x i1>* %y 18 %c = and <8 x i1> %a, %b 19 store <8 x i1> %c, <8 x i1>* %x 20 ret void 21} 22 23define void @or_v16i1(<16 x i1>* %x, <16 x i1>* %y) { 24; CHECK-LABEL: or_v16i1: 25; CHECK: # %bb.0: 26; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, mu 27; CHECK-NEXT: vle1.v v25, (a0) 28; CHECK-NEXT: vle1.v v26, (a1) 29; CHECK-NEXT: vmor.mm v25, v25, v26 30; CHECK-NEXT: vse1.v v25, (a0) 31; CHECK-NEXT: ret 32 %a = load <16 x i1>, <16 x i1>* %x 33 %b = load <16 x i1>, <16 x i1>* %y 34 %c = or <16 x i1> %a, %b 35 store <16 x i1> %c, <16 x i1>* %x 36 ret void 37} 38 39define void @xor_v32i1(<32 x i1>* %x, <32 x i1>* %y) { 40; CHECK-LABEL: xor_v32i1: 41; CHECK: # %bb.0: 42; CHECK-NEXT: addi a2, zero, 32 43; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, mu 44; CHECK-NEXT: vle1.v v25, (a0) 45; CHECK-NEXT: vle1.v v26, (a1) 46; CHECK-NEXT: vmxor.mm v25, v25, v26 47; CHECK-NEXT: vse1.v v25, (a0) 48; CHECK-NEXT: ret 49 %a = load <32 x i1>, <32 x i1>* %x 50 %b = load <32 x i1>, <32 x i1>* %y 51 %c = xor <32 x i1> %a, %b 52 store <32 x i1> %c, <32 x i1>* %x 53 ret void 54} 55 56define void @not_v64i1(<64 x i1>* %x, <64 x i1>* %y) { 57; CHECK-LABEL: not_v64i1: 58; CHECK: # %bb.0: 59; CHECK-NEXT: addi a1, zero, 64 60; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu 61; CHECK-NEXT: vle1.v v25, (a0) 62; CHECK-NEXT: vmnand.mm v25, v25, v25 63; CHECK-NEXT: vse1.v v25, (a0) 64; CHECK-NEXT: ret 65 %a = load <64 x i1>, <64 x i1>* %x 66 %b = load <64 x i1>, <64 x i1>* %y 67 %c = xor <64 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 68 store <64 x i1> %c, <64 x i1>* %x 69 ret void 70} 71 72define void @andnot_v8i1(<8 x i1>* %x, <8 x i1>* %y) { 73; CHECK-LABEL: andnot_v8i1: 74; CHECK: # %bb.0: 75; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu 76; CHECK-NEXT: vle1.v v25, (a0) 77; CHECK-NEXT: vle1.v v26, (a1) 78; CHECK-NEXT: vmandnot.mm v25, v26, v25 79; CHECK-NEXT: vse1.v v25, (a0) 80; CHECK-NEXT: ret 81 %a = load <8 x i1>, <8 x i1>* %x 82 %b = load <8 x i1>, <8 x i1>* %y 83 %c = xor <8 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 84 %d = and <8 x i1> %b, %c 85 store <8 x i1> %d, <8 x i1>* %x 86 ret void 87} 88 89define void @ornot_v16i1(<16 x i1>* %x, <16 x i1>* %y) { 90; CHECK-LABEL: ornot_v16i1: 91; CHECK: # %bb.0: 92; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, mu 93; CHECK-NEXT: vle1.v v25, (a0) 94; CHECK-NEXT: vle1.v v26, (a1) 95; CHECK-NEXT: vmornot.mm v25, v26, v25 96; CHECK-NEXT: vse1.v v25, (a0) 97; CHECK-NEXT: ret 98 %a = load <16 x i1>, <16 x i1>* %x 99 %b = load <16 x i1>, <16 x i1>* %y 100 %c = xor <16 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 101 %d = or <16 x i1> %b, %c 102 store <16 x i1> %d, <16 x i1>* %x 103 ret void 104} 105 106define void @xornot_v32i1(<32 x i1>* %x, <32 x i1>* %y) { 107; CHECK-LABEL: xornot_v32i1: 108; CHECK: # %bb.0: 109; CHECK-NEXT: addi a2, zero, 32 110; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, mu 111; CHECK-NEXT: vle1.v v25, (a0) 112; CHECK-NEXT: vle1.v v26, (a1) 113; CHECK-NEXT: vmxnor.mm v25, v25, v26 114; CHECK-NEXT: vse1.v v25, (a0) 115; CHECK-NEXT: ret 116 %a = load <32 x i1>, <32 x i1>* %x 117 %b = load <32 x i1>, <32 x i1>* %y 118 %c = xor <32 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 119 %d = xor <32 x i1> %b, %c 120 store <32 x i1> %d, <32 x i1>* %x 121 ret void 122} 123 124define void @nand_v8i1(<8 x i1>* %x, <8 x i1>* %y) { 125; CHECK-LABEL: nand_v8i1: 126; CHECK: # %bb.0: 127; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu 128; CHECK-NEXT: vle1.v v25, (a0) 129; CHECK-NEXT: vle1.v v26, (a1) 130; CHECK-NEXT: vmnand.mm v25, v25, v26 131; CHECK-NEXT: vse1.v v25, (a0) 132; CHECK-NEXT: ret 133 %a = load <8 x i1>, <8 x i1>* %x 134 %b = load <8 x i1>, <8 x i1>* %y 135 %c = and <8 x i1> %a, %b 136 %d = xor <8 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 137 store <8 x i1> %d, <8 x i1>* %x 138 ret void 139} 140 141define void @nor_v16i1(<16 x i1>* %x, <16 x i1>* %y) { 142; CHECK-LABEL: nor_v16i1: 143; CHECK: # %bb.0: 144; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, mu 145; CHECK-NEXT: vle1.v v25, (a0) 146; CHECK-NEXT: vle1.v v26, (a1) 147; CHECK-NEXT: vmnor.mm v25, v25, v26 148; CHECK-NEXT: vse1.v v25, (a0) 149; CHECK-NEXT: ret 150 %a = load <16 x i1>, <16 x i1>* %x 151 %b = load <16 x i1>, <16 x i1>* %y 152 %c = or <16 x i1> %a, %b 153 %d = xor <16 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 154 store <16 x i1> %d, <16 x i1>* %x 155 ret void 156} 157 158define void @xnor_v32i1(<32 x i1>* %x, <32 x i1>* %y) { 159; CHECK-LABEL: xnor_v32i1: 160; CHECK: # %bb.0: 161; CHECK-NEXT: addi a2, zero, 32 162; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, mu 163; CHECK-NEXT: vle1.v v25, (a0) 164; CHECK-NEXT: vle1.v v26, (a1) 165; CHECK-NEXT: vmxnor.mm v25, v25, v26 166; CHECK-NEXT: vse1.v v25, (a0) 167; CHECK-NEXT: ret 168 %a = load <32 x i1>, <32 x i1>* %x 169 %b = load <32 x i1>, <32 x i1>* %y 170 %c = xor <32 x i1> %a, %b 171 %d = xor <32 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 172 store <32 x i1> %d, <32 x i1>* %x 173 ret void 174} 175