1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 4 5declare <1 x i1> @llvm.vp.and.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32) 6 7define <1 x i1> @and_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) { 8; CHECK-LABEL: and_v1i1: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 11; CHECK-NEXT: vmand.mm v0, v0, v8 12; CHECK-NEXT: ret 13 %v = call <1 x i1> @llvm.vp.and.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl) 14 ret <1 x i1> %v 15} 16 17declare <2 x i1> @llvm.vp.and.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32) 18 19define <2 x i1> @and_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) { 20; CHECK-LABEL: and_v2i1: 21; CHECK: # %bb.0: 22; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 23; CHECK-NEXT: vmand.mm v0, v0, v8 24; CHECK-NEXT: ret 25 %v = call <2 x i1> @llvm.vp.and.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl) 26 ret <2 x i1> %v 27} 28 29declare <4 x i1> @llvm.vp.and.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32) 30 31define <4 x i1> @and_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) { 32; CHECK-LABEL: and_v4i1: 33; CHECK: # %bb.0: 34; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 35; CHECK-NEXT: vmand.mm v0, v0, v8 36; CHECK-NEXT: ret 37 %v = call <4 x i1> @llvm.vp.and.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl) 38 ret <4 x i1> %v 39} 40 41declare <8 x i1> @llvm.vp.and.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32) 42 43define <8 x i1> @and_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) { 44; CHECK-LABEL: and_v8i1: 45; CHECK: # %bb.0: 46; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 47; CHECK-NEXT: vmand.mm v0, v0, v8 48; CHECK-NEXT: ret 49 %v = call <8 x i1> @llvm.vp.and.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl) 50 ret <8 x i1> %v 51} 52 53declare <16 x i1> @llvm.vp.and.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32) 54 55define <16 x i1> @and_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) { 56; CHECK-LABEL: and_v16i1: 57; CHECK: # %bb.0: 58; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 59; CHECK-NEXT: vmand.mm v0, v0, v8 60; CHECK-NEXT: ret 61 %v = call <16 x i1> @llvm.vp.and.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl) 62 ret <16 x i1> %v 63} 64 65declare <vscale x 1 x i1> @llvm.vp.and.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, <vscale x 1 x i1>, i32) 66 67define <vscale x 1 x i1> @and_nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 zeroext %evl) { 68; CHECK-LABEL: and_nxv1i1: 69; CHECK: # %bb.0: 70; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 71; CHECK-NEXT: vmand.mm v0, v0, v8 72; CHECK-NEXT: ret 73 %v = call <vscale x 1 x i1> @llvm.vp.and.nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 %evl) 74 ret <vscale x 1 x i1> %v 75} 76 77declare <vscale x 2 x i1> @llvm.vp.and.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, <vscale x 2 x i1>, i32) 78 79define <vscale x 2 x i1> @and_nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 zeroext %evl) { 80; CHECK-LABEL: and_nxv2i1: 81; CHECK: # %bb.0: 82; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 83; CHECK-NEXT: vmand.mm v0, v0, v8 84; CHECK-NEXT: ret 85 %v = call <vscale x 2 x i1> @llvm.vp.and.nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 %evl) 86 ret <vscale x 2 x i1> %v 87} 88 89declare <vscale x 4 x i1> @llvm.vp.and.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, <vscale x 4 x i1>, i32) 90 91define <vscale x 4 x i1> @and_nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 zeroext %evl) { 92; CHECK-LABEL: and_nxv4i1: 93; CHECK: # %bb.0: 94; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 95; CHECK-NEXT: vmand.mm v0, v0, v8 96; CHECK-NEXT: ret 97 %v = call <vscale x 4 x i1> @llvm.vp.and.nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 %evl) 98 ret <vscale x 4 x i1> %v 99} 100 101declare <vscale x 8 x i1> @llvm.vp.and.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, <vscale x 8 x i1>, i32) 102 103define <vscale x 8 x i1> @and_nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 zeroext %evl) { 104; CHECK-LABEL: and_nxv8i1: 105; CHECK: # %bb.0: 106; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 107; CHECK-NEXT: vmand.mm v0, v0, v8 108; CHECK-NEXT: ret 109 %v = call <vscale x 8 x i1> @llvm.vp.and.nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 %evl) 110 ret <vscale x 8 x i1> %v 111} 112 113declare <vscale x 16 x i1> @llvm.vp.and.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, i32) 114 115define <vscale x 16 x i1> @and_nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 zeroext %evl) { 116; CHECK-LABEL: and_nxv16i1: 117; CHECK: # %bb.0: 118; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 119; CHECK-NEXT: vmand.mm v0, v0, v8 120; CHECK-NEXT: ret 121 %v = call <vscale x 16 x i1> @llvm.vp.and.nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 %evl) 122 ret <vscale x 16 x i1> %v 123} 124 125declare <vscale x 32 x i1> @llvm.vp.and.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, <vscale x 32 x i1>, i32) 126 127define <vscale x 32 x i1> @and_nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 zeroext %evl) { 128; CHECK-LABEL: and_nxv32i1: 129; CHECK: # %bb.0: 130; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 131; CHECK-NEXT: vmand.mm v0, v0, v8 132; CHECK-NEXT: ret 133 %v = call <vscale x 32 x i1> @llvm.vp.and.nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 %evl) 134 ret <vscale x 32 x i1> %v 135} 136 137declare <vscale x 64 x i1> @llvm.vp.and.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, <vscale x 64 x i1>, i32) 138 139define <vscale x 64 x i1> @and_nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 zeroext %evl) { 140; CHECK-LABEL: and_nxv64i1: 141; CHECK: # %bb.0: 142; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 143; CHECK-NEXT: vmand.mm v0, v0, v8 144; CHECK-NEXT: ret 145 %v = call <vscale x 64 x i1> @llvm.vp.and.nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 %evl) 146 ret <vscale x 64 x i1> %v 147} 148 149declare <1 x i1> @llvm.vp.or.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32) 150 151define <1 x i1> @or_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) { 152; CHECK-LABEL: or_v1i1: 153; CHECK: # %bb.0: 154; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 155; CHECK-NEXT: vmor.mm v0, v0, v8 156; CHECK-NEXT: ret 157 %v = call <1 x i1> @llvm.vp.or.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl) 158 ret <1 x i1> %v 159} 160 161declare <2 x i1> @llvm.vp.or.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32) 162 163define <2 x i1> @or_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) { 164; CHECK-LABEL: or_v2i1: 165; CHECK: # %bb.0: 166; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 167; CHECK-NEXT: vmor.mm v0, v0, v8 168; CHECK-NEXT: ret 169 %v = call <2 x i1> @llvm.vp.or.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl) 170 ret <2 x i1> %v 171} 172 173declare <4 x i1> @llvm.vp.or.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32) 174 175define <4 x i1> @or_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) { 176; CHECK-LABEL: or_v4i1: 177; CHECK: # %bb.0: 178; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 179; CHECK-NEXT: vmor.mm v0, v0, v8 180; CHECK-NEXT: ret 181 %v = call <4 x i1> @llvm.vp.or.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl) 182 ret <4 x i1> %v 183} 184 185declare <8 x i1> @llvm.vp.or.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32) 186 187define <8 x i1> @or_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) { 188; CHECK-LABEL: or_v8i1: 189; CHECK: # %bb.0: 190; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 191; CHECK-NEXT: vmor.mm v0, v0, v8 192; CHECK-NEXT: ret 193 %v = call <8 x i1> @llvm.vp.or.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl) 194 ret <8 x i1> %v 195} 196 197declare <16 x i1> @llvm.vp.or.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32) 198 199define <16 x i1> @or_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) { 200; CHECK-LABEL: or_v16i1: 201; CHECK: # %bb.0: 202; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 203; CHECK-NEXT: vmor.mm v0, v0, v8 204; CHECK-NEXT: ret 205 %v = call <16 x i1> @llvm.vp.or.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl) 206 ret <16 x i1> %v 207} 208 209declare <vscale x 1 x i1> @llvm.vp.or.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, <vscale x 1 x i1>, i32) 210 211define <vscale x 1 x i1> @or_nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 zeroext %evl) { 212; CHECK-LABEL: or_nxv1i1: 213; CHECK: # %bb.0: 214; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 215; CHECK-NEXT: vmor.mm v0, v0, v8 216; CHECK-NEXT: ret 217 %v = call <vscale x 1 x i1> @llvm.vp.or.nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 %evl) 218 ret <vscale x 1 x i1> %v 219} 220 221declare <vscale x 2 x i1> @llvm.vp.or.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, <vscale x 2 x i1>, i32) 222 223define <vscale x 2 x i1> @or_nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 zeroext %evl) { 224; CHECK-LABEL: or_nxv2i1: 225; CHECK: # %bb.0: 226; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 227; CHECK-NEXT: vmor.mm v0, v0, v8 228; CHECK-NEXT: ret 229 %v = call <vscale x 2 x i1> @llvm.vp.or.nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 %evl) 230 ret <vscale x 2 x i1> %v 231} 232 233declare <vscale x 4 x i1> @llvm.vp.or.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, <vscale x 4 x i1>, i32) 234 235define <vscale x 4 x i1> @or_nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 zeroext %evl) { 236; CHECK-LABEL: or_nxv4i1: 237; CHECK: # %bb.0: 238; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 239; CHECK-NEXT: vmor.mm v0, v0, v8 240; CHECK-NEXT: ret 241 %v = call <vscale x 4 x i1> @llvm.vp.or.nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 %evl) 242 ret <vscale x 4 x i1> %v 243} 244 245declare <vscale x 8 x i1> @llvm.vp.or.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, <vscale x 8 x i1>, i32) 246 247define <vscale x 8 x i1> @or_nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 zeroext %evl) { 248; CHECK-LABEL: or_nxv8i1: 249; CHECK: # %bb.0: 250; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 251; CHECK-NEXT: vmor.mm v0, v0, v8 252; CHECK-NEXT: ret 253 %v = call <vscale x 8 x i1> @llvm.vp.or.nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 %evl) 254 ret <vscale x 8 x i1> %v 255} 256 257declare <vscale x 16 x i1> @llvm.vp.or.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, i32) 258 259define <vscale x 16 x i1> @or_nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 zeroext %evl) { 260; CHECK-LABEL: or_nxv16i1: 261; CHECK: # %bb.0: 262; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 263; CHECK-NEXT: vmor.mm v0, v0, v8 264; CHECK-NEXT: ret 265 %v = call <vscale x 16 x i1> @llvm.vp.or.nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 %evl) 266 ret <vscale x 16 x i1> %v 267} 268 269declare <vscale x 32 x i1> @llvm.vp.or.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, <vscale x 32 x i1>, i32) 270 271define <vscale x 32 x i1> @or_nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 zeroext %evl) { 272; CHECK-LABEL: or_nxv32i1: 273; CHECK: # %bb.0: 274; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 275; CHECK-NEXT: vmor.mm v0, v0, v8 276; CHECK-NEXT: ret 277 %v = call <vscale x 32 x i1> @llvm.vp.or.nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 %evl) 278 ret <vscale x 32 x i1> %v 279} 280 281declare <vscale x 64 x i1> @llvm.vp.or.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, <vscale x 64 x i1>, i32) 282 283define <vscale x 64 x i1> @or_nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 zeroext %evl) { 284; CHECK-LABEL: or_nxv64i1: 285; CHECK: # %bb.0: 286; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 287; CHECK-NEXT: vmor.mm v0, v0, v8 288; CHECK-NEXT: ret 289 %v = call <vscale x 64 x i1> @llvm.vp.or.nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 %evl) 290 ret <vscale x 64 x i1> %v 291} 292 293declare <1 x i1> @llvm.vp.xor.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32) 294 295define <1 x i1> @xor_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) { 296; CHECK-LABEL: xor_v1i1: 297; CHECK: # %bb.0: 298; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 299; CHECK-NEXT: vmxor.mm v0, v0, v8 300; CHECK-NEXT: ret 301 %v = call <1 x i1> @llvm.vp.xor.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl) 302 ret <1 x i1> %v 303} 304 305declare <2 x i1> @llvm.vp.xor.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32) 306 307define <2 x i1> @xor_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) { 308; CHECK-LABEL: xor_v2i1: 309; CHECK: # %bb.0: 310; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 311; CHECK-NEXT: vmxor.mm v0, v0, v8 312; CHECK-NEXT: ret 313 %v = call <2 x i1> @llvm.vp.xor.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl) 314 ret <2 x i1> %v 315} 316 317declare <4 x i1> @llvm.vp.xor.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32) 318 319define <4 x i1> @xor_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) { 320; CHECK-LABEL: xor_v4i1: 321; CHECK: # %bb.0: 322; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 323; CHECK-NEXT: vmxor.mm v0, v0, v8 324; CHECK-NEXT: ret 325 %v = call <4 x i1> @llvm.vp.xor.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl) 326 ret <4 x i1> %v 327} 328 329declare <8 x i1> @llvm.vp.xor.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32) 330 331define <8 x i1> @xor_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) { 332; CHECK-LABEL: xor_v8i1: 333; CHECK: # %bb.0: 334; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 335; CHECK-NEXT: vmxor.mm v0, v0, v8 336; CHECK-NEXT: ret 337 %v = call <8 x i1> @llvm.vp.xor.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl) 338 ret <8 x i1> %v 339} 340 341declare <16 x i1> @llvm.vp.xor.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32) 342 343define <16 x i1> @xor_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) { 344; CHECK-LABEL: xor_v16i1: 345; CHECK: # %bb.0: 346; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 347; CHECK-NEXT: vmxor.mm v0, v0, v8 348; CHECK-NEXT: ret 349 %v = call <16 x i1> @llvm.vp.xor.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl) 350 ret <16 x i1> %v 351} 352 353declare <vscale x 1 x i1> @llvm.vp.xor.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, <vscale x 1 x i1>, i32) 354 355define <vscale x 1 x i1> @xor_nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 zeroext %evl) { 356; CHECK-LABEL: xor_nxv1i1: 357; CHECK: # %bb.0: 358; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 359; CHECK-NEXT: vmxor.mm v0, v0, v8 360; CHECK-NEXT: ret 361 %v = call <vscale x 1 x i1> @llvm.vp.xor.nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 %evl) 362 ret <vscale x 1 x i1> %v 363} 364 365declare <vscale x 2 x i1> @llvm.vp.xor.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, <vscale x 2 x i1>, i32) 366 367define <vscale x 2 x i1> @xor_nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 zeroext %evl) { 368; CHECK-LABEL: xor_nxv2i1: 369; CHECK: # %bb.0: 370; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 371; CHECK-NEXT: vmxor.mm v0, v0, v8 372; CHECK-NEXT: ret 373 %v = call <vscale x 2 x i1> @llvm.vp.xor.nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 %evl) 374 ret <vscale x 2 x i1> %v 375} 376 377declare <vscale x 4 x i1> @llvm.vp.xor.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, <vscale x 4 x i1>, i32) 378 379define <vscale x 4 x i1> @xor_nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 zeroext %evl) { 380; CHECK-LABEL: xor_nxv4i1: 381; CHECK: # %bb.0: 382; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 383; CHECK-NEXT: vmxor.mm v0, v0, v8 384; CHECK-NEXT: ret 385 %v = call <vscale x 4 x i1> @llvm.vp.xor.nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 %evl) 386 ret <vscale x 4 x i1> %v 387} 388 389declare <vscale x 8 x i1> @llvm.vp.xor.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, <vscale x 8 x i1>, i32) 390 391define <vscale x 8 x i1> @xor_nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 zeroext %evl) { 392; CHECK-LABEL: xor_nxv8i1: 393; CHECK: # %bb.0: 394; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 395; CHECK-NEXT: vmxor.mm v0, v0, v8 396; CHECK-NEXT: ret 397 %v = call <vscale x 8 x i1> @llvm.vp.xor.nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 %evl) 398 ret <vscale x 8 x i1> %v 399} 400 401declare <vscale x 16 x i1> @llvm.vp.xor.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, i32) 402 403define <vscale x 16 x i1> @xor_nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 zeroext %evl) { 404; CHECK-LABEL: xor_nxv16i1: 405; CHECK: # %bb.0: 406; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 407; CHECK-NEXT: vmxor.mm v0, v0, v8 408; CHECK-NEXT: ret 409 %v = call <vscale x 16 x i1> @llvm.vp.xor.nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 %evl) 410 ret <vscale x 16 x i1> %v 411} 412 413declare <vscale x 32 x i1> @llvm.vp.xor.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, <vscale x 32 x i1>, i32) 414 415define <vscale x 32 x i1> @xor_nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 zeroext %evl) { 416; CHECK-LABEL: xor_nxv32i1: 417; CHECK: # %bb.0: 418; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 419; CHECK-NEXT: vmxor.mm v0, v0, v8 420; CHECK-NEXT: ret 421 %v = call <vscale x 32 x i1> @llvm.vp.xor.nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 %evl) 422 ret <vscale x 32 x i1> %v 423} 424 425declare <vscale x 64 x i1> @llvm.vp.xor.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, <vscale x 64 x i1>, i32) 426 427define <vscale x 64 x i1> @xor_nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 zeroext %evl) { 428; CHECK-LABEL: xor_nxv64i1: 429; CHECK: # %bb.0: 430; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 431; CHECK-NEXT: vmxor.mm v0, v0, v8 432; CHECK-NEXT: ret 433 %v = call <vscale x 64 x i1> @llvm.vp.xor.nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 %evl) 434 ret <vscale x 64 x i1> %v 435} 436