172ecf2f4SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 23cf15af2SeopXD; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 33cf15af2SeopXD; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 472ecf2f4SCraig Topper 572ecf2f4SCraig Topperdeclare <vscale x 1 x i16> @llvm.abs.nxv1i16(<vscale x 1 x i16>, i1) 672ecf2f4SCraig Topper 772ecf2f4SCraig Topperdefine <vscale x 1 x i16> @vabs_nxv1i16(<vscale x 1 x i16> %v) { 872ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv1i16: 972ecf2f4SCraig Topper; CHECK: # %bb.0: 10*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 11facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v9, v8, 0 12facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v9 1372ecf2f4SCraig Topper; CHECK-NEXT: ret 1472ecf2f4SCraig Topper %r = call <vscale x 1 x i16> @llvm.abs.nxv1i16(<vscale x 1 x i16> %v, i1 false) 1572ecf2f4SCraig Topper ret <vscale x 1 x i16> %r 1672ecf2f4SCraig Topper} 1772ecf2f4SCraig Topper 1872ecf2f4SCraig Topperdeclare <vscale x 2 x i16> @llvm.abs.nxv2i16(<vscale x 2 x i16>, i1) 1972ecf2f4SCraig Topper 2072ecf2f4SCraig Topperdefine <vscale x 2 x i16> @vabs_nxv2i16(<vscale x 2 x i16> %v) { 2172ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv2i16: 2272ecf2f4SCraig Topper; CHECK: # %bb.0: 23*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 24facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v9, v8, 0 25facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v9 2672ecf2f4SCraig Topper; CHECK-NEXT: ret 2772ecf2f4SCraig Topper %r = call <vscale x 2 x i16> @llvm.abs.nxv2i16(<vscale x 2 x i16> %v, i1 false) 2872ecf2f4SCraig Topper ret <vscale x 2 x i16> %r 2972ecf2f4SCraig Topper} 3072ecf2f4SCraig Topper 3172ecf2f4SCraig Topperdeclare <vscale x 4 x i16> @llvm.abs.nxv4i16(<vscale x 4 x i16>, i1) 3272ecf2f4SCraig Topper 3372ecf2f4SCraig Topperdefine <vscale x 4 x i16> @vabs_nxv4i16(<vscale x 4 x i16> %v) { 3472ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv4i16: 3572ecf2f4SCraig Topper; CHECK: # %bb.0: 36*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 37facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v9, v8, 0 38facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v9 3972ecf2f4SCraig Topper; CHECK-NEXT: ret 4072ecf2f4SCraig Topper %r = call <vscale x 4 x i16> @llvm.abs.nxv4i16(<vscale x 4 x i16> %v, i1 false) 4172ecf2f4SCraig Topper ret <vscale x 4 x i16> %r 4272ecf2f4SCraig Topper} 4372ecf2f4SCraig Topper 4472ecf2f4SCraig Topperdeclare <vscale x 8 x i16> @llvm.abs.nxv8i16(<vscale x 8 x i16>, i1) 4572ecf2f4SCraig Topper 4672ecf2f4SCraig Topperdefine <vscale x 8 x i16> @vabs_nxv8i16(<vscale x 8 x i16> %v) { 4772ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv8i16: 4872ecf2f4SCraig Topper; CHECK: # %bb.0: 49*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 50facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v10, v8, 0 51facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v10 5272ecf2f4SCraig Topper; CHECK-NEXT: ret 5372ecf2f4SCraig Topper %r = call <vscale x 8 x i16> @llvm.abs.nxv8i16(<vscale x 8 x i16> %v, i1 false) 5472ecf2f4SCraig Topper ret <vscale x 8 x i16> %r 5572ecf2f4SCraig Topper} 5672ecf2f4SCraig Topper 5772ecf2f4SCraig Topperdeclare <vscale x 16 x i16> @llvm.abs.nxv16i16(<vscale x 16 x i16>, i1) 5872ecf2f4SCraig Topper 5972ecf2f4SCraig Topperdefine <vscale x 16 x i16> @vabs_nxv16i16(<vscale x 16 x i16> %v) { 6072ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv16i16: 6172ecf2f4SCraig Topper; CHECK: # %bb.0: 62*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 63facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v12, v8, 0 64facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v12 6572ecf2f4SCraig Topper; CHECK-NEXT: ret 6672ecf2f4SCraig Topper %r = call <vscale x 16 x i16> @llvm.abs.nxv16i16(<vscale x 16 x i16> %v, i1 false) 6772ecf2f4SCraig Topper ret <vscale x 16 x i16> %r 6872ecf2f4SCraig Topper} 6972ecf2f4SCraig Topper 7072ecf2f4SCraig Topperdeclare <vscale x 32 x i16> @llvm.abs.nxv32i16(<vscale x 32 x i16>, i1) 7172ecf2f4SCraig Topper 7272ecf2f4SCraig Topperdefine <vscale x 32 x i16> @vabs_nxv32i16(<vscale x 32 x i16> %v) { 7372ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv32i16: 7472ecf2f4SCraig Topper; CHECK: # %bb.0: 75*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 7672ecf2f4SCraig Topper; CHECK-NEXT: vrsub.vi v16, v8, 0 7772ecf2f4SCraig Topper; CHECK-NEXT: vmax.vv v8, v8, v16 7872ecf2f4SCraig Topper; CHECK-NEXT: ret 7972ecf2f4SCraig Topper %r = call <vscale x 32 x i16> @llvm.abs.nxv32i16(<vscale x 32 x i16> %v, i1 false) 8072ecf2f4SCraig Topper ret <vscale x 32 x i16> %r 8172ecf2f4SCraig Topper} 8272ecf2f4SCraig Topper 8372ecf2f4SCraig Topperdeclare <vscale x 1 x i32> @llvm.abs.nxv1i32(<vscale x 1 x i32>, i1) 8472ecf2f4SCraig Topper 8572ecf2f4SCraig Topperdefine <vscale x 1 x i32> @vabs_nxv1i32(<vscale x 1 x i32> %v) { 8672ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv1i32: 8772ecf2f4SCraig Topper; CHECK: # %bb.0: 88*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 89facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v9, v8, 0 90facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v9 9172ecf2f4SCraig Topper; CHECK-NEXT: ret 9272ecf2f4SCraig Topper %r = call <vscale x 1 x i32> @llvm.abs.nxv1i32(<vscale x 1 x i32> %v, i1 false) 9372ecf2f4SCraig Topper ret <vscale x 1 x i32> %r 9472ecf2f4SCraig Topper} 9572ecf2f4SCraig Topper 9672ecf2f4SCraig Topperdeclare <vscale x 2 x i32> @llvm.abs.nxv2i32(<vscale x 2 x i32>, i1) 9772ecf2f4SCraig Topper 9872ecf2f4SCraig Topperdefine <vscale x 2 x i32> @vabs_nxv2i32(<vscale x 2 x i32> %v) { 9972ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv2i32: 10072ecf2f4SCraig Topper; CHECK: # %bb.0: 101*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 102facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v9, v8, 0 103facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v9 10472ecf2f4SCraig Topper; CHECK-NEXT: ret 10572ecf2f4SCraig Topper %r = call <vscale x 2 x i32> @llvm.abs.nxv2i32(<vscale x 2 x i32> %v, i1 false) 10672ecf2f4SCraig Topper ret <vscale x 2 x i32> %r 10772ecf2f4SCraig Topper} 10872ecf2f4SCraig Topper 10972ecf2f4SCraig Topperdeclare <vscale x 4 x i32> @llvm.abs.nxv4i32(<vscale x 4 x i32>, i1) 11072ecf2f4SCraig Topper 11172ecf2f4SCraig Topperdefine <vscale x 4 x i32> @vabs_nxv4i32(<vscale x 4 x i32> %v) { 11272ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv4i32: 11372ecf2f4SCraig Topper; CHECK: # %bb.0: 114*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 115facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v10, v8, 0 116facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v10 11772ecf2f4SCraig Topper; CHECK-NEXT: ret 11872ecf2f4SCraig Topper %r = call <vscale x 4 x i32> @llvm.abs.nxv4i32(<vscale x 4 x i32> %v, i1 false) 11972ecf2f4SCraig Topper ret <vscale x 4 x i32> %r 12072ecf2f4SCraig Topper} 12172ecf2f4SCraig Topper 12272ecf2f4SCraig Topperdeclare <vscale x 8 x i32> @llvm.abs.nxv8i32(<vscale x 8 x i32>, i1) 12372ecf2f4SCraig Topper 12472ecf2f4SCraig Topperdefine <vscale x 8 x i32> @vabs_nxv8i32(<vscale x 8 x i32> %v) { 12572ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv8i32: 12672ecf2f4SCraig Topper; CHECK: # %bb.0: 127*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 128facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v12, v8, 0 129facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v12 13072ecf2f4SCraig Topper; CHECK-NEXT: ret 13172ecf2f4SCraig Topper %r = call <vscale x 8 x i32> @llvm.abs.nxv8i32(<vscale x 8 x i32> %v, i1 false) 13272ecf2f4SCraig Topper ret <vscale x 8 x i32> %r 13372ecf2f4SCraig Topper} 13472ecf2f4SCraig Topper 13572ecf2f4SCraig Topperdeclare <vscale x 16 x i32> @llvm.abs.nxv16i32(<vscale x 16 x i32>, i1) 13672ecf2f4SCraig Topper 13772ecf2f4SCraig Topperdefine <vscale x 16 x i32> @vabs_nxv16i32(<vscale x 16 x i32> %v) { 13872ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv16i32: 13972ecf2f4SCraig Topper; CHECK: # %bb.0: 140*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 14172ecf2f4SCraig Topper; CHECK-NEXT: vrsub.vi v16, v8, 0 14272ecf2f4SCraig Topper; CHECK-NEXT: vmax.vv v8, v8, v16 14372ecf2f4SCraig Topper; CHECK-NEXT: ret 14472ecf2f4SCraig Topper %r = call <vscale x 16 x i32> @llvm.abs.nxv16i32(<vscale x 16 x i32> %v, i1 false) 14572ecf2f4SCraig Topper ret <vscale x 16 x i32> %r 14672ecf2f4SCraig Topper} 14772ecf2f4SCraig Topper 14872ecf2f4SCraig Topperdeclare <vscale x 1 x i64> @llvm.abs.nxv1i64(<vscale x 1 x i64>, i1) 14972ecf2f4SCraig Topper 15072ecf2f4SCraig Topperdefine <vscale x 1 x i64> @vabs_nxv1i64(<vscale x 1 x i64> %v) { 15172ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv1i64: 15272ecf2f4SCraig Topper; CHECK: # %bb.0: 153*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 154facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v9, v8, 0 155facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v9 15672ecf2f4SCraig Topper; CHECK-NEXT: ret 15772ecf2f4SCraig Topper %r = call <vscale x 1 x i64> @llvm.abs.nxv1i64(<vscale x 1 x i64> %v, i1 false) 15872ecf2f4SCraig Topper ret <vscale x 1 x i64> %r 15972ecf2f4SCraig Topper} 16072ecf2f4SCraig Topper 16172ecf2f4SCraig Topperdeclare <vscale x 2 x i64> @llvm.abs.nxv2i64(<vscale x 2 x i64>, i1) 16272ecf2f4SCraig Topper 16372ecf2f4SCraig Topperdefine <vscale x 2 x i64> @vabs_nxv2i64(<vscale x 2 x i64> %v) { 16472ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv2i64: 16572ecf2f4SCraig Topper; CHECK: # %bb.0: 166*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 167facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v10, v8, 0 168facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v10 16972ecf2f4SCraig Topper; CHECK-NEXT: ret 17072ecf2f4SCraig Topper %r = call <vscale x 2 x i64> @llvm.abs.nxv2i64(<vscale x 2 x i64> %v, i1 false) 17172ecf2f4SCraig Topper ret <vscale x 2 x i64> %r 17272ecf2f4SCraig Topper} 17372ecf2f4SCraig Topper 17472ecf2f4SCraig Topperdeclare <vscale x 4 x i64> @llvm.abs.nxv4i64(<vscale x 4 x i64>, i1) 17572ecf2f4SCraig Topper 17672ecf2f4SCraig Topperdefine <vscale x 4 x i64> @vabs_nxv4i64(<vscale x 4 x i64> %v) { 17772ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv4i64: 17872ecf2f4SCraig Topper; CHECK: # %bb.0: 179*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 180facff468SHsiangkai Wang; CHECK-NEXT: vrsub.vi v12, v8, 0 181facff468SHsiangkai Wang; CHECK-NEXT: vmax.vv v8, v8, v12 18272ecf2f4SCraig Topper; CHECK-NEXT: ret 18372ecf2f4SCraig Topper %r = call <vscale x 4 x i64> @llvm.abs.nxv4i64(<vscale x 4 x i64> %v, i1 false) 18472ecf2f4SCraig Topper ret <vscale x 4 x i64> %r 18572ecf2f4SCraig Topper} 18672ecf2f4SCraig Topper 18772ecf2f4SCraig Topperdeclare <vscale x 8 x i64> @llvm.abs.nxv8i64(<vscale x 8 x i64>, i1) 18872ecf2f4SCraig Topper 18972ecf2f4SCraig Topperdefine <vscale x 8 x i64> @vabs_nxv8i64(<vscale x 8 x i64> %v) { 19072ecf2f4SCraig Topper; CHECK-LABEL: vabs_nxv8i64: 19172ecf2f4SCraig Topper; CHECK: # %bb.0: 192*d89d45caSPhilip Reames; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 19372ecf2f4SCraig Topper; CHECK-NEXT: vrsub.vi v16, v8, 0 19472ecf2f4SCraig Topper; CHECK-NEXT: vmax.vv v8, v8, v16 19572ecf2f4SCraig Topper; CHECK-NEXT: ret 19672ecf2f4SCraig Topper %r = call <vscale x 8 x i64> @llvm.abs.nxv8i64(<vscale x 8 x i64> %v, i1 false) 19772ecf2f4SCraig Topper ret <vscale x 8 x i64> %r 19872ecf2f4SCraig Topper} 199