175 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s5; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s6 7define void @and_v8i1(ptr %x, ptr %y) {8; CHECK-LABEL: and_v8i1:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma11; CHECK-NEXT: vlm.v v8, (a0)12; CHECK-NEXT: vlm.v v9, (a1)13; CHECK-NEXT: vmand.mm v8, v8, v914; CHECK-NEXT: vsm.v v8, (a0)15; CHECK-NEXT: ret16 %a = load <8 x i1>, ptr %x17 %b = load <8 x i1>, ptr %y18 %c = and <8 x i1> %a, %b19 store <8 x i1> %c, ptr %x20 ret void21}22 23define void @or_v16i1(ptr %x, ptr %y) {24; CHECK-LABEL: or_v16i1:25; CHECK: # %bb.0:26; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma27; CHECK-NEXT: vlm.v v8, (a0)28; CHECK-NEXT: vlm.v v9, (a1)29; CHECK-NEXT: vmor.mm v8, v8, v930; CHECK-NEXT: vsm.v v8, (a0)31; CHECK-NEXT: ret32 %a = load <16 x i1>, ptr %x33 %b = load <16 x i1>, ptr %y34 %c = or <16 x i1> %a, %b35 store <16 x i1> %c, ptr %x36 ret void37}38 39define void @xor_v32i1(ptr %x, ptr %y) {40; CHECK-LABEL: xor_v32i1:41; CHECK: # %bb.0:42; CHECK-NEXT: li a2, 3243; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma44; CHECK-NEXT: vlm.v v8, (a0)45; CHECK-NEXT: vlm.v v9, (a1)46; CHECK-NEXT: vmxor.mm v8, v8, v947; CHECK-NEXT: vsm.v v8, (a0)48; CHECK-NEXT: ret49 %a = load <32 x i1>, ptr %x50 %b = load <32 x i1>, ptr %y51 %c = xor <32 x i1> %a, %b52 store <32 x i1> %c, ptr %x53 ret void54}55 56define void @not_v64i1(ptr %x, ptr %y) {57; CHECK-LABEL: not_v64i1:58; CHECK: # %bb.0:59; CHECK-NEXT: li a1, 6460; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma61; CHECK-NEXT: vlm.v v8, (a0)62; CHECK-NEXT: vmnot.m v8, v863; CHECK-NEXT: vsm.v v8, (a0)64; CHECK-NEXT: ret65 %a = load <64 x i1>, ptr %x66 %b = load <64 x i1>, ptr %y67 %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, ptr %x69 ret void70}71 72define void @andnot_v8i1(ptr %x, ptr %y) {73; CHECK-LABEL: andnot_v8i1:74; CHECK: # %bb.0:75; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma76; CHECK-NEXT: vlm.v v8, (a0)77; CHECK-NEXT: vlm.v v9, (a1)78; CHECK-NEXT: vmandn.mm v8, v9, v879; CHECK-NEXT: vsm.v v8, (a0)80; CHECK-NEXT: ret81 %a = load <8 x i1>, ptr %x82 %b = load <8 x i1>, ptr %y83 %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, %c85 store <8 x i1> %d, ptr %x86 ret void87}88 89define void @ornot_v16i1(ptr %x, ptr %y) {90; CHECK-LABEL: ornot_v16i1:91; CHECK: # %bb.0:92; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma93; CHECK-NEXT: vlm.v v8, (a0)94; CHECK-NEXT: vlm.v v9, (a1)95; CHECK-NEXT: vmorn.mm v8, v9, v896; CHECK-NEXT: vsm.v v8, (a0)97; CHECK-NEXT: ret98 %a = load <16 x i1>, ptr %x99 %b = load <16 x i1>, ptr %y100 %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, %c102 store <16 x i1> %d, ptr %x103 ret void104}105 106define void @xornot_v32i1(ptr %x, ptr %y) {107; CHECK-LABEL: xornot_v32i1:108; CHECK: # %bb.0:109; CHECK-NEXT: li a2, 32110; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma111; CHECK-NEXT: vlm.v v8, (a0)112; CHECK-NEXT: vlm.v v9, (a1)113; CHECK-NEXT: vmxnor.mm v8, v8, v9114; CHECK-NEXT: vsm.v v8, (a0)115; CHECK-NEXT: ret116 %a = load <32 x i1>, ptr %x117 %b = load <32 x i1>, ptr %y118 %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, %c120 store <32 x i1> %d, ptr %x121 ret void122}123 124define void @nand_v8i1(ptr %x, ptr %y) {125; CHECK-LABEL: nand_v8i1:126; CHECK: # %bb.0:127; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma128; CHECK-NEXT: vlm.v v8, (a0)129; CHECK-NEXT: vlm.v v9, (a1)130; CHECK-NEXT: vmnand.mm v8, v8, v9131; CHECK-NEXT: vsm.v v8, (a0)132; CHECK-NEXT: ret133 %a = load <8 x i1>, ptr %x134 %b = load <8 x i1>, ptr %y135 %c = and <8 x i1> %a, %b136 %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, ptr %x138 ret void139}140 141define void @nor_v16i1(ptr %x, ptr %y) {142; CHECK-LABEL: nor_v16i1:143; CHECK: # %bb.0:144; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma145; CHECK-NEXT: vlm.v v8, (a0)146; CHECK-NEXT: vlm.v v9, (a1)147; CHECK-NEXT: vmnor.mm v8, v8, v9148; CHECK-NEXT: vsm.v v8, (a0)149; CHECK-NEXT: ret150 %a = load <16 x i1>, ptr %x151 %b = load <16 x i1>, ptr %y152 %c = or <16 x i1> %a, %b153 %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, ptr %x155 ret void156}157 158define void @xnor_v32i1(ptr %x, ptr %y) {159; CHECK-LABEL: xnor_v32i1:160; CHECK: # %bb.0:161; CHECK-NEXT: li a2, 32162; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma163; CHECK-NEXT: vlm.v v8, (a0)164; CHECK-NEXT: vlm.v v9, (a1)165; CHECK-NEXT: vmxnor.mm v8, v8, v9166; CHECK-NEXT: vsm.v v8, (a0)167; CHECK-NEXT: ret168 %a = load <32 x i1>, ptr %x169 %b = load <32 x i1>, ptr %y170 %c = xor <32 x i1> %a, %b171 %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, ptr %x173 ret void174}175