108 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 5define <vscale x 8 x i8> @mask_sext_not_nxv8i8(<vscale x 8 x i1> %m) {6; CHECK-LABEL: mask_sext_not_nxv8i8:7; CHECK: # %bb.0:8; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma9; CHECK-NEXT: vmv.v.i v8, -110; CHECK-NEXT: vmerge.vim v8, v8, 0, v011; CHECK-NEXT: ret12 %not = xor <vscale x 8 x i1> %m, splat (i1 true)13 %ext = sext <vscale x 8 x i1> %not to <vscale x 8 x i8>14 ret <vscale x 8 x i8> %ext15}16 17define <vscale x 8 x i8> @mask_zext_not_nxv8i8(<vscale x 8 x i1> %m) {18; CHECK-LABEL: mask_zext_not_nxv8i8:19; CHECK: # %bb.0:20; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma21; CHECK-NEXT: vmv.v.i v8, 122; CHECK-NEXT: vmerge.vim v8, v8, 0, v023; CHECK-NEXT: ret24 %not = xor <vscale x 8 x i1> %m, splat (i1 true)25 %ext = zext <vscale x 8 x i1> %not to <vscale x 8 x i8>26 ret <vscale x 8 x i8> %ext27}28 29define <8 x i8> @mask_sext_not_v8i8(<8 x i1> %m) {30; CHECK-LABEL: mask_sext_not_v8i8:31; CHECK: # %bb.0:32; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma33; CHECK-NEXT: vmv.v.i v8, -134; CHECK-NEXT: vmerge.vim v8, v8, 0, v035; CHECK-NEXT: ret36 %not = xor <8 x i1> %m, splat (i1 true)37 %ext = sext <8 x i1> %not to <8 x i8>38 ret <8 x i8> %ext39}40 41define <8 x i8> @mask_zext_not_v8i8(<8 x i1> %m) {42; CHECK-LABEL: mask_zext_not_v8i8:43; CHECK: # %bb.0:44; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma45; CHECK-NEXT: vmv.v.i v8, 146; CHECK-NEXT: vmerge.vim v8, v8, 0, v047; CHECK-NEXT: ret48 %not = xor <8 x i1> %m, splat (i1 true)49 %ext = zext <8 x i1> %not to <8 x i8>50 ret <8 x i8> %ext51}52 53define <vscale x 8 x i8> @mask_sext_xor_nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i1> %x) {54; CHECK-LABEL: mask_sext_xor_nxv8i8:55; CHECK: # %bb.0:56; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma57; CHECK-NEXT: vmxor.mm v0, v0, v858; CHECK-NEXT: vmv.v.i v8, 059; CHECK-NEXT: vmerge.vim v8, v8, -1, v060; CHECK-NEXT: ret61 %xor = xor <vscale x 8 x i1> %m, %x62 %ext = sext <vscale x 8 x i1> %xor to <vscale x 8 x i8>63 ret <vscale x 8 x i8> %ext64}65 66define <vscale x 8 x i8> @mask_zext_xor_nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i1> %x) {67; CHECK-LABEL: mask_zext_xor_nxv8i8:68; CHECK: # %bb.0:69; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma70; CHECK-NEXT: vmxor.mm v0, v0, v871; CHECK-NEXT: vmv.v.i v8, 072; CHECK-NEXT: vmerge.vim v8, v8, 1, v073; CHECK-NEXT: ret74 %xor = xor <vscale x 8 x i1> %m, %x75 %ext = zext <vscale x 8 x i1> %xor to <vscale x 8 x i8>76 ret <vscale x 8 x i8> %ext77}78 79define <8 x i8> @mask_sext_xor_v8i8(<8 x i1> %m) {80; CHECK-LABEL: mask_sext_xor_v8i8:81; CHECK: # %bb.0:82; CHECK-NEXT: li a0, 8583; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma84; CHECK-NEXT: vmv.s.x v8, a085; CHECK-NEXT: vmxor.mm v0, v0, v886; CHECK-NEXT: vmv.v.i v8, 087; CHECK-NEXT: vmerge.vim v8, v8, -1, v088; CHECK-NEXT: ret89 %xor = xor <8 x i1> %m, <i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0>90 %ext = sext <8 x i1> %xor to <8 x i8>91 ret <8 x i8> %ext92}93 94define <8 x i8> @mask_zext_xor_v8i8(<8 x i1> %m) {95; CHECK-LABEL: mask_zext_xor_v8i8:96; CHECK: # %bb.0:97; CHECK-NEXT: li a0, 8598; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma99; CHECK-NEXT: vmv.s.x v8, a0100; CHECK-NEXT: vmxor.mm v0, v0, v8101; CHECK-NEXT: vmv.v.i v8, 0102; CHECK-NEXT: vmerge.vim v8, v8, 1, v0103; CHECK-NEXT: ret104 %xor = xor <8 x i1> %m, <i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0>105 %ext = zext <8 x i1> %xor to <8 x i8>106 ret <8 x i8> %ext107}108