xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vp-reverse-float.ll (revision d8d131dfa99762ccdd2116661980b7d0493cd7b5)
190f76844SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
290f76844SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+m,+f,+d,+v -verify-machineinstrs < %s | FileCheck %s
390f76844SCraig Topper
490f76844SCraig Topperdefine <vscale x 1 x double> @test_vp_reverse_nxv1f64_masked(<vscale x 1 x double> %src, <vscale x 1 x i1> %mask, i32 zeroext %evl) {
590f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv1f64_masked:
690f76844SCraig Topper; CHECK:       # %bb.0:
790f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
890f76844SCraig Topper; CHECK-NEXT:    vid.v v9, v0.t
990f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
1090f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v10, v9, a0, v0.t
1190f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v9, v8, v10, v0.t
1290f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v9
1390f76844SCraig Topper; CHECK-NEXT:    ret
1490f76844SCraig Topper  %dst = call <vscale x 1 x double> @llvm.experimental.vp.reverse.nxv1f64(<vscale x 1 x double> %src, <vscale x 1 x i1> %mask, i32 %evl)
1590f76844SCraig Topper  ret <vscale x 1 x double> %dst
1690f76844SCraig Topper}
1790f76844SCraig Topper
1890f76844SCraig Topperdefine <vscale x 1 x double> @test_vp_reverse_nxv1f64(<vscale x 1 x double> %src, i32 zeroext %evl) {
1990f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv1f64:
2090f76844SCraig Topper; CHECK:       # %bb.0:
2190f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
2290f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
2390f76844SCraig Topper; CHECK-NEXT:    vid.v v9
2490f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v10, v9, a1
2590f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v9, v8, v10
2690f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v9
2790f76844SCraig Topper; CHECK-NEXT:    ret
2890f76844SCraig Topper
29*d8d131dfSLuke Lau  %dst = call <vscale x 1 x double> @llvm.experimental.vp.reverse.nxv1f64(<vscale x 1 x double> %src, <vscale x 1 x i1> splat (i1 1), i32 %evl)
3090f76844SCraig Topper  ret <vscale x 1 x double> %dst
3190f76844SCraig Topper}
3290f76844SCraig Topper
3390f76844SCraig Topperdefine <vscale x 2 x float> @test_vp_reverse_nxv2f32_masked(<vscale x 2 x float> %src, <vscale x 2 x i1> %mask, i32 zeroext %evl) {
3490f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv2f32_masked:
3590f76844SCraig Topper; CHECK:       # %bb.0:
3690f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
3790f76844SCraig Topper; CHECK-NEXT:    vid.v v9, v0.t
3890f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
3990f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v10, v9, a0, v0.t
4090f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v9, v8, v10, v0.t
4190f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v9
4290f76844SCraig Topper; CHECK-NEXT:    ret
4390f76844SCraig Topper  %dst = call <vscale x 2 x float> @llvm.experimental.vp.reverse.nxv2f32(<vscale x 2 x float> %src, <vscale x 2 x i1> %mask, i32 %evl)
4490f76844SCraig Topper  ret <vscale x 2 x float> %dst
4590f76844SCraig Topper}
4690f76844SCraig Topper
4790f76844SCraig Topperdefine <vscale x 2 x float> @test_vp_reverse_nxv2f32(<vscale x 2 x float> %src, i32 zeroext %evl) {
4890f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv2f32:
4990f76844SCraig Topper; CHECK:       # %bb.0:
5090f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
5190f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
5290f76844SCraig Topper; CHECK-NEXT:    vid.v v9
5390f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v10, v9, a1
5490f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v9, v8, v10
5590f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v9
5690f76844SCraig Topper; CHECK-NEXT:    ret
5790f76844SCraig Topper
58*d8d131dfSLuke Lau  %dst = call <vscale x 2 x float> @llvm.experimental.vp.reverse.nxv2f32(<vscale x 2 x float> %src, <vscale x 2 x i1> splat (i1 1), i32 %evl)
5990f76844SCraig Topper  ret <vscale x 2 x float> %dst
6090f76844SCraig Topper}
6190f76844SCraig Topper
6290f76844SCraig Topperdefine <vscale x 2 x double> @test_vp_reverse_nxv2f64_masked(<vscale x 2 x double> %src, <vscale x 2 x i1> %mask, i32 zeroext %evl) {
6390f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv2f64_masked:
6490f76844SCraig Topper; CHECK:       # %bb.0:
6590f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6690f76844SCraig Topper; CHECK-NEXT:    vid.v v10, v0.t
6790f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
6890f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v12, v10, a0, v0.t
6990f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v10, v8, v12, v0.t
7090f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v10
7190f76844SCraig Topper; CHECK-NEXT:    ret
7290f76844SCraig Topper  %dst = call <vscale x 2 x double> @llvm.experimental.vp.reverse.nxv2f64(<vscale x 2 x double> %src, <vscale x 2 x i1> %mask, i32 %evl)
7390f76844SCraig Topper  ret <vscale x 2 x double> %dst
7490f76844SCraig Topper}
7590f76844SCraig Topper
7690f76844SCraig Topperdefine <vscale x 2 x double> @test_vp_reverse_nxv2f64(<vscale x 2 x double> %src, i32 zeroext %evl) {
7790f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv2f64:
7890f76844SCraig Topper; CHECK:       # %bb.0:
7990f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
8090f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
8190f76844SCraig Topper; CHECK-NEXT:    vid.v v10
8290f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v12, v10, a1
8390f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v10, v8, v12
8490f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v10
8590f76844SCraig Topper; CHECK-NEXT:    ret
8690f76844SCraig Topper
87*d8d131dfSLuke Lau  %dst = call <vscale x 2 x double> @llvm.experimental.vp.reverse.nxv2f64(<vscale x 2 x double> %src, <vscale x 2 x i1> splat (i1 1), i32 %evl)
8890f76844SCraig Topper  ret <vscale x 2 x double> %dst
8990f76844SCraig Topper}
9090f76844SCraig Topper
9190f76844SCraig Topperdefine <vscale x 4 x float> @test_vp_reverse_nxv4f32_masked(<vscale x 4 x float> %src, <vscale x 4 x i1> %mask, i32 zeroext %evl) {
9290f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv4f32_masked:
9390f76844SCraig Topper; CHECK:       # %bb.0:
9490f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
9590f76844SCraig Topper; CHECK-NEXT:    vid.v v10, v0.t
9690f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
9790f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v12, v10, a0, v0.t
9890f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v10, v8, v12, v0.t
9990f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v10
10090f76844SCraig Topper; CHECK-NEXT:    ret
10190f76844SCraig Topper  %dst = call <vscale x 4 x float> @llvm.experimental.vp.reverse.nxv4f32(<vscale x 4 x float> %src, <vscale x 4 x i1> %mask, i32 %evl)
10290f76844SCraig Topper  ret <vscale x 4 x float> %dst
10390f76844SCraig Topper}
10490f76844SCraig Topper
10590f76844SCraig Topperdefine <vscale x 4 x float> @test_vp_reverse_nxv4f32(<vscale x 4 x float> %src, i32 zeroext %evl) {
10690f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv4f32:
10790f76844SCraig Topper; CHECK:       # %bb.0:
10890f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
10990f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
11090f76844SCraig Topper; CHECK-NEXT:    vid.v v10
11190f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v12, v10, a1
11290f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v10, v8, v12
11390f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v10
11490f76844SCraig Topper; CHECK-NEXT:    ret
11590f76844SCraig Topper
116*d8d131dfSLuke Lau  %dst = call <vscale x 4 x float> @llvm.experimental.vp.reverse.nxv4f32(<vscale x 4 x float> %src, <vscale x 4 x i1> splat (i1 1), i32 %evl)
11790f76844SCraig Topper  ret <vscale x 4 x float> %dst
11890f76844SCraig Topper}
11990f76844SCraig Topper
12090f76844SCraig Topperdefine <vscale x 4 x double> @test_vp_reverse_nxv4f64_masked(<vscale x 4 x double> %src, <vscale x 4 x i1> %mask, i32 zeroext %evl) {
12190f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv4f64_masked:
12290f76844SCraig Topper; CHECK:       # %bb.0:
12390f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
12490f76844SCraig Topper; CHECK-NEXT:    vid.v v12, v0.t
12590f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
12690f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v16, v12, a0, v0.t
12790f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v12, v8, v16, v0.t
12890f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v12
12990f76844SCraig Topper; CHECK-NEXT:    ret
13090f76844SCraig Topper  %dst = call <vscale x 4 x double> @llvm.experimental.vp.reverse.nxv4f64(<vscale x 4 x double> %src, <vscale x 4 x i1> %mask, i32 %evl)
13190f76844SCraig Topper  ret <vscale x 4 x double> %dst
13290f76844SCraig Topper}
13390f76844SCraig Topper
13490f76844SCraig Topperdefine <vscale x 4 x double> @test_vp_reverse_nxv4f64(<vscale x 4 x double> %src, i32 zeroext %evl) {
13590f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv4f64:
13690f76844SCraig Topper; CHECK:       # %bb.0:
13790f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
13890f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
13990f76844SCraig Topper; CHECK-NEXT:    vid.v v12
14090f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v16, v12, a1
14190f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v12, v8, v16
14290f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v12
14390f76844SCraig Topper; CHECK-NEXT:    ret
14490f76844SCraig Topper
145*d8d131dfSLuke Lau  %dst = call <vscale x 4 x double> @llvm.experimental.vp.reverse.nxv4f64(<vscale x 4 x double> %src, <vscale x 4 x i1> splat (i1 1), i32 %evl)
14690f76844SCraig Topper  ret <vscale x 4 x double> %dst
14790f76844SCraig Topper}
14890f76844SCraig Topper
14990f76844SCraig Topperdefine <vscale x 8 x float> @test_vp_reverse_nxv8f32_masked(<vscale x 8 x float> %src, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
15090f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv8f32_masked:
15190f76844SCraig Topper; CHECK:       # %bb.0:
15290f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
15390f76844SCraig Topper; CHECK-NEXT:    vid.v v12, v0.t
15490f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
15590f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v16, v12, a0, v0.t
15690f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v12, v8, v16, v0.t
15790f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v12
15890f76844SCraig Topper; CHECK-NEXT:    ret
15990f76844SCraig Topper  %dst = call <vscale x 8 x float> @llvm.experimental.vp.reverse.nxv8f32(<vscale x 8 x float> %src, <vscale x 8 x i1> %mask, i32 %evl)
16090f76844SCraig Topper  ret <vscale x 8 x float> %dst
16190f76844SCraig Topper}
16290f76844SCraig Topper
16390f76844SCraig Topperdefine <vscale x 8 x float> @test_vp_reverse_nxv8f32(<vscale x 8 x float> %src, i32 zeroext %evl) {
16490f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv8f32:
16590f76844SCraig Topper; CHECK:       # %bb.0:
16690f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
16790f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
16890f76844SCraig Topper; CHECK-NEXT:    vid.v v12
16990f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v16, v12, a1
17090f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v12, v8, v16
17190f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v12
17290f76844SCraig Topper; CHECK-NEXT:    ret
17390f76844SCraig Topper
174*d8d131dfSLuke Lau  %dst = call <vscale x 8 x float> @llvm.experimental.vp.reverse.nxv8f32(<vscale x 8 x float> %src, <vscale x 8 x i1> splat (i1 1), i32 %evl)
17590f76844SCraig Topper  ret <vscale x 8 x float> %dst
17690f76844SCraig Topper}
17790f76844SCraig Topper
17890f76844SCraig Topperdefine <vscale x 8 x double> @test_vp_reverse_nxv8f64_masked(<vscale x 8 x double> %src, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
17990f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv8f64_masked:
18090f76844SCraig Topper; CHECK:       # %bb.0:
18190f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
18290f76844SCraig Topper; CHECK-NEXT:    vid.v v16, v0.t
18390f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
18490f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v24, v16, a0, v0.t
18590f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v16, v8, v24, v0.t
18690f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v16
18790f76844SCraig Topper; CHECK-NEXT:    ret
18890f76844SCraig Topper  %dst = call <vscale x 8 x double> @llvm.experimental.vp.reverse.nxv8f64(<vscale x 8 x double> %src, <vscale x 8 x i1> %mask, i32 %evl)
18990f76844SCraig Topper  ret <vscale x 8 x double> %dst
19090f76844SCraig Topper}
19190f76844SCraig Topper
19290f76844SCraig Topperdefine <vscale x 8 x double> @test_vp_reverse_nxv8f64(<vscale x 8 x double> %src, i32 zeroext %evl) {
19390f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv8f64:
19490f76844SCraig Topper; CHECK:       # %bb.0:
19590f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
19690f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
19790f76844SCraig Topper; CHECK-NEXT:    vid.v v16
19890f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v24, v16, a1
19990f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v16, v8, v24
20090f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v16
20190f76844SCraig Topper; CHECK-NEXT:    ret
20290f76844SCraig Topper
203*d8d131dfSLuke Lau  %dst = call <vscale x 8 x double> @llvm.experimental.vp.reverse.nxv8f64(<vscale x 8 x double> %src, <vscale x 8 x i1> splat (i1 1), i32 %evl)
20490f76844SCraig Topper  ret <vscale x 8 x double> %dst
20590f76844SCraig Topper}
20690f76844SCraig Topper
20790f76844SCraig Topperdefine <vscale x 16 x float> @test_vp_reverse_nxv16f32_masked(<vscale x 16 x float> %src, <vscale x 16 x i1> %mask, i32 zeroext %evl) {
20890f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv16f32_masked:
20990f76844SCraig Topper; CHECK:       # %bb.0:
21090f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
21190f76844SCraig Topper; CHECK-NEXT:    vid.v v16, v0.t
21290f76844SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
21390f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v24, v16, a0, v0.t
21490f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v16, v8, v24, v0.t
21590f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v16
21690f76844SCraig Topper; CHECK-NEXT:    ret
21790f76844SCraig Topper  %dst = call <vscale x 16 x float> @llvm.experimental.vp.reverse.nxv16f32(<vscale x 16 x float> %src, <vscale x 16 x i1> %mask, i32 %evl)
21890f76844SCraig Topper  ret <vscale x 16 x float> %dst
21990f76844SCraig Topper}
22090f76844SCraig Topper
22190f76844SCraig Topperdefine <vscale x 16 x float> @test_vp_reverse_nxv16f32(<vscale x 16 x float> %src, i32 zeroext %evl) {
22290f76844SCraig Topper; CHECK-LABEL: test_vp_reverse_nxv16f32:
22390f76844SCraig Topper; CHECK:       # %bb.0:
22490f76844SCraig Topper; CHECK-NEXT:    addi a1, a0, -1
22590f76844SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
22690f76844SCraig Topper; CHECK-NEXT:    vid.v v16
22790f76844SCraig Topper; CHECK-NEXT:    vrsub.vx v24, v16, a1
22890f76844SCraig Topper; CHECK-NEXT:    vrgather.vv v16, v8, v24
22990f76844SCraig Topper; CHECK-NEXT:    vmv.v.v v8, v16
23090f76844SCraig Topper; CHECK-NEXT:    ret
23190f76844SCraig Topper
232*d8d131dfSLuke Lau  %dst = call <vscale x 16 x float> @llvm.experimental.vp.reverse.nxv16f32(<vscale x 16 x float> %src, <vscale x 16 x i1> splat (i1 1), i32 %evl)
23390f76844SCraig Topper  ret <vscale x 16 x float> %dst
23490f76844SCraig Topper}
23590f76844SCraig Topper
23690f76844SCraig Topper; LMUL = 1
23790f76844SCraig Topperdeclare <vscale x 1 x double> @llvm.experimental.vp.reverse.nxv1f64(<vscale x 1 x double>,<vscale x 1 x i1>,i32)
23890f76844SCraig Topperdeclare <vscale x 2 x float> @llvm.experimental.vp.reverse.nxv2f32(<vscale x 2 x float>,<vscale x 2 x i1>,i32)
23990f76844SCraig Topper
24090f76844SCraig Topper; LMUL = 2
24190f76844SCraig Topperdeclare <vscale x 2 x double> @llvm.experimental.vp.reverse.nxv2f64(<vscale x 2 x double>,<vscale x 2 x i1>,i32)
24290f76844SCraig Topperdeclare <vscale x 4 x float> @llvm.experimental.vp.reverse.nxv4f32(<vscale x 4 x float>,<vscale x 4 x i1>,i32)
24390f76844SCraig Topper
24490f76844SCraig Topper; LMUL = 4
24590f76844SCraig Topperdeclare <vscale x 4 x double> @llvm.experimental.vp.reverse.nxv4f64(<vscale x 4 x double>,<vscale x 4 x i1>,i32)
24690f76844SCraig Topperdeclare <vscale x 8 x float> @llvm.experimental.vp.reverse.nxv8f32(<vscale x 8 x float>,<vscale x 8 x i1>,i32)
24790f76844SCraig Topper
24890f76844SCraig Topper; LMUL = 8
24990f76844SCraig Topperdeclare <vscale x 8 x double> @llvm.experimental.vp.reverse.nxv8f64(<vscale x 8 x double>,<vscale x 8 x i1>,i32)
25090f76844SCraig Topperdeclare <vscale x 16 x float> @llvm.experimental.vp.reverse.nxv16f32(<vscale x 16 x float>,<vscale x 16 x i1>,i32)
251