diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vadd-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vadd-vp.ll index 3f89d62501b8..bd29f51a9391 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vadd-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vadd-vp.ll @@ -128,6 +128,20 @@ define <4 x i8> @vadd_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl ret <4 x i8> %v } +define <4 x i8> @vadd_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) { +; CHECK-LABEL: vadd_vx_v4i8_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu +; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement <4 x i8> undef, i8 %b, i32 0 + %vb = shufflevector <4 x i8> %elt.head, <4 x i8> undef, <4 x i32> zeroinitializer + %v = call <4 x i8> @llvm.vp.add.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> %m, i32 %evl) + ret <4 x i8> %v +} + define <4 x i8> @vadd_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) { ; CHECK-LABEL: vadd_vx_v4i8_unmasked: ; CHECK: # %bb.0: @@ -407,17 +421,17 @@ define <256 x i8> @vadd_vi_v258i8(<256 x i8> %va, <256 x i1> %m, i32 zeroext %ev ; CHECK-NEXT: addi a3, a1, -128 ; CHECK-NEXT: vmv1r.v v24, v0 ; CHECK-NEXT: li a0, 0 -; CHECK-NEXT: bltu a1, a3, .LBB31_2 +; CHECK-NEXT: bltu a1, a3, .LBB32_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: mv a0, a3 -; CHECK-NEXT: .LBB31_2: +; CHECK-NEXT: .LBB32_2: ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, mu ; CHECK-NEXT: vmv1r.v v0, v25 ; CHECK-NEXT: vadd.vi v16, v16, -1, v0.t -; CHECK-NEXT: bltu a1, a2, .LBB31_4 +; CHECK-NEXT: bltu a1, a2, .LBB32_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: li a1, 128 -; CHECK-NEXT: .LBB31_4: +; CHECK-NEXT: .LBB32_4: ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu ; CHECK-NEXT: vmv1r.v v0, v24 ; CHECK-NEXT: vadd.vi v8, v8, -1, v0.t @@ -433,17 +447,17 @@ define <256 x i8> @vadd_vi_v258i8_unmasked(<256 x i8> %va, i32 zeroext %evl) { ; CHECK: # %bb.0: ; CHECK-NEXT: addi a1, a0, -128 ; CHECK-NEXT: li a2, 0 -; CHECK-NEXT: bltu a0, a1, .LBB32_2 +; CHECK-NEXT: bltu a0, a1, .LBB33_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: mv a2, a1 -; CHECK-NEXT: .LBB32_2: +; CHECK-NEXT: .LBB33_2: ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, mu ; CHECK-NEXT: li a1, 128 ; CHECK-NEXT: vadd.vi v16, v16, -1 -; CHECK-NEXT: bltu a0, a1, .LBB32_4 +; CHECK-NEXT: bltu a0, a1, .LBB33_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: li a0, 128 -; CHECK-NEXT: .LBB32_4: +; CHECK-NEXT: .LBB33_4: ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, mu ; CHECK-NEXT: vadd.vi v8, v8, -1 ; CHECK-NEXT: ret @@ -1528,17 +1542,17 @@ define <32 x i64> @vadd_vx_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl ; RV32-NEXT: vsetvli zero, a2, e32, m8, ta, mu ; RV32-NEXT: addi a2, a0, -16 ; RV32-NEXT: vmv.v.i v24, -1 -; RV32-NEXT: bltu a0, a2, .LBB107_2 +; RV32-NEXT: bltu a0, a2, .LBB108_2 ; RV32-NEXT: # %bb.1: ; RV32-NEXT: mv a1, a2 -; RV32-NEXT: .LBB107_2: +; RV32-NEXT: .LBB108_2: ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu ; RV32-NEXT: li a1, 16 ; RV32-NEXT: vadd.vv v16, v16, v24, v0.t -; RV32-NEXT: bltu a0, a1, .LBB107_4 +; RV32-NEXT: bltu a0, a1, .LBB108_4 ; RV32-NEXT: # %bb.3: ; RV32-NEXT: li a0, 16 -; RV32-NEXT: .LBB107_4: +; RV32-NEXT: .LBB108_4: ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v1 ; RV32-NEXT: vadd.vv v8, v8, v24, v0.t @@ -1551,17 +1565,17 @@ define <32 x i64> @vadd_vx_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, mu ; RV64-NEXT: addi a2, a0, -16 ; RV64-NEXT: vslidedown.vi v0, v0, 2 -; RV64-NEXT: bltu a0, a2, .LBB107_2 +; RV64-NEXT: bltu a0, a2, .LBB108_2 ; RV64-NEXT: # %bb.1: ; RV64-NEXT: mv a1, a2 -; RV64-NEXT: .LBB107_2: +; RV64-NEXT: .LBB108_2: ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, mu ; RV64-NEXT: li a1, 16 ; RV64-NEXT: vadd.vi v16, v16, -1, v0.t -; RV64-NEXT: bltu a0, a1, .LBB107_4 +; RV64-NEXT: bltu a0, a1, .LBB108_4 ; RV64-NEXT: # %bb.3: ; RV64-NEXT: li a0, 16 -; RV64-NEXT: .LBB107_4: +; RV64-NEXT: .LBB108_4: ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, mu ; RV64-NEXT: vmv1r.v v0, v24 ; RV64-NEXT: vadd.vi v8, v8, -1, v0.t @@ -1580,17 +1594,17 @@ define <32 x i64> @vadd_vi_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) { ; RV32-NEXT: vsetvli zero, a2, e32, m8, ta, mu ; RV32-NEXT: addi a2, a0, -16 ; RV32-NEXT: vmv.v.i v24, -1 -; RV32-NEXT: bltu a0, a2, .LBB108_2 +; RV32-NEXT: bltu a0, a2, .LBB109_2 ; RV32-NEXT: # %bb.1: ; RV32-NEXT: mv a1, a2 -; RV32-NEXT: .LBB108_2: +; RV32-NEXT: .LBB109_2: ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu ; RV32-NEXT: li a1, 16 ; RV32-NEXT: vadd.vv v16, v16, v24 -; RV32-NEXT: bltu a0, a1, .LBB108_4 +; RV32-NEXT: bltu a0, a1, .LBB109_4 ; RV32-NEXT: # %bb.3: ; RV32-NEXT: li a0, 16 -; RV32-NEXT: .LBB108_4: +; RV32-NEXT: .LBB109_4: ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, mu ; RV32-NEXT: vadd.vv v8, v8, v24 ; RV32-NEXT: ret @@ -1599,17 +1613,17 @@ define <32 x i64> @vadd_vi_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) { ; RV64: # %bb.0: ; RV64-NEXT: addi a1, a0, -16 ; RV64-NEXT: li a2, 0 -; RV64-NEXT: bltu a0, a1, .LBB108_2 +; RV64-NEXT: bltu a0, a1, .LBB109_2 ; RV64-NEXT: # %bb.1: ; RV64-NEXT: mv a2, a1 -; RV64-NEXT: .LBB108_2: +; RV64-NEXT: .LBB109_2: ; RV64-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV64-NEXT: li a1, 16 ; RV64-NEXT: vadd.vi v16, v16, -1 -; RV64-NEXT: bltu a0, a1, .LBB108_4 +; RV64-NEXT: bltu a0, a1, .LBB109_4 ; RV64-NEXT: # %bb.3: ; RV64-NEXT: li a0, 16 -; RV64-NEXT: .LBB108_4: +; RV64-NEXT: .LBB109_4: ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, mu ; RV64-NEXT: vadd.vi v8, v8, -1 ; RV64-NEXT: ret diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vand-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vand-vp.ll index ea41aba5e5d7..419a9d4b5b1b 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vand-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vand-vp.ll @@ -52,6 +52,20 @@ define <2 x i8> @vand_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl ret <2 x i8> %v } +define <2 x i8> @vand_vx_v2i8_commute(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) { +; CHECK-LABEL: vand_vx_v2i8_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu +; CHECK-NEXT: vand.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement <2 x i8> undef, i8 %b, i32 0 + %vb = shufflevector <2 x i8> %elt.head, <2 x i8> undef, <2 x i32> zeroinitializer + %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> %m, i32 %evl) + ret <2 x i8> %v +} + define <2 x i8> @vand_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) { ; CHECK-LABEL: vand_vx_v2i8_unmasked: ; CHECK: # %bb.0: @@ -66,6 +80,20 @@ define <2 x i8> @vand_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) { ret <2 x i8> %v } +define <2 x i8> @vand_vx_v2i8_unmasked_commute(<2 x i8> %va, i8 %b, i32 zeroext %evl) { +; CHECK-LABEL: vand_vx_v2i8_unmasked_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu +; CHECK-NEXT: vand.vx v8, v8, a0 +; CHECK-NEXT: ret + %elt.head = insertelement <2 x i8> undef, i8 %b, i32 0 + %vb = shufflevector <2 x i8> %elt.head, <2 x i8> undef, <2 x i32> zeroinitializer + %head = insertelement <2 x i1> undef, i1 true, i32 0 + %m = shufflevector <2 x i1> %head, <2 x i1> undef, <2 x i32> zeroinitializer + %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> %m, i32 %evl) + ret <2 x i8> %v +} + define <2 x i8> @vand_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) { ; CHECK-LABEL: vand_vi_v2i8: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfadd-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfadd-vp.ll index c368a2f8bc40..215daf4f92f5 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfadd-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfadd-vp.ll @@ -252,6 +252,20 @@ define <2 x float> @vfadd_vf_v2f32(<2 x float> %va, float %b, <2 x i1> %m, i32 z ret <2 x float> %v } +define <2 x float> @vfadd_vf_v2f32_commute(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) { +; CHECK-LABEL: vfadd_vf_v2f32_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu +; CHECK-NEXT: vfmv.v.f v9, fa0 +; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu +; CHECK-NEXT: vfadd.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement <2 x float> undef, float %b, i32 0 + %vb = shufflevector <2 x float> %elt.head, <2 x float> undef, <2 x i32> zeroinitializer + %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %vb, <2 x float> %va, <2 x i1> %m, i32 %evl) + ret <2 x float> %v +} + define <2 x float> @vfadd_vf_v2f32_unmasked(<2 x float> %va, float %b, i32 zeroext %evl) { ; CHECK-LABEL: vfadd_vf_v2f32_unmasked: ; CHECK: # %bb.0: @@ -266,6 +280,20 @@ define <2 x float> @vfadd_vf_v2f32_unmasked(<2 x float> %va, float %b, i32 zeroe ret <2 x float> %v } +define <2 x float> @vfadd_vf_v2f32_unmasked_commute(<2 x float> %va, float %b, i32 zeroext %evl) { +; CHECK-LABEL: vfadd_vf_v2f32_unmasked_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu +; CHECK-NEXT: vfadd.vf v8, v8, fa0 +; CHECK-NEXT: ret + %elt.head = insertelement <2 x float> undef, float %b, i32 0 + %vb = shufflevector <2 x float> %elt.head, <2 x float> undef, <2 x i32> zeroinitializer + %head = insertelement <2 x i1> undef, i1 true, i32 0 + %m = shufflevector <2 x i1> %head, <2 x i1> undef, <2 x i32> zeroinitializer + %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %vb, <2 x float> %va, <2 x i1> %m, i32 %evl) + ret <2 x float> %v +} + declare <4 x float> @llvm.vp.fadd.v4f32(<4 x float>, <4 x float>, <4 x i1>, i32) define <4 x float> @vfadd_vv_v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 zeroext %evl) { diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmul-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmul-vp.ll index 6907f6ae6168..976d12eab3d7 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmul-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmul-vp.ll @@ -352,6 +352,20 @@ define <8 x i16> @vmul_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext ret <8 x i16> %v } +define <8 x i16> @vmul_vx_v8i16_commute(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) { +; CHECK-LABEL: vmul_vx_v8i16_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu +; CHECK-NEXT: vmul.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement <8 x i16> undef, i16 %b, i32 0 + %vb = shufflevector <8 x i16> %elt.head, <8 x i16> undef, <8 x i32> zeroinitializer + %v = call <8 x i16> @llvm.vp.mul.v8i16(<8 x i16> %vb, <8 x i16> %va, <8 x i1> %m, i32 %evl) + ret <8 x i16> %v +} + define <8 x i16> @vmul_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) { ; CHECK-LABEL: vmul_vx_v8i16_unmasked: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vor-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vor-vp.ll index f623f11a56e2..b1807c1b29de 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vor-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vor-vp.ll @@ -128,6 +128,20 @@ define <4 x i8> @vor_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) ret <4 x i8> %v } +define <4 x i8> @vor_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) { +; CHECK-LABEL: vor_vx_v4i8_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu +; CHECK-NEXT: vor.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement <4 x i8> undef, i8 %b, i32 0 + %vb = shufflevector <4 x i8> %elt.head, <4 x i8> undef, <4 x i32> zeroinitializer + %v = call <4 x i8> @llvm.vp.or.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> %m, i32 %evl) + ret <4 x i8> %v +} + define <4 x i8> @vor_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) { ; CHECK-LABEL: vor_vx_v4i8_unmasked: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vxor-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vxor-vp.ll index 4edd829aeb1e..207f12ff3822 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vxor-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vxor-vp.ll @@ -52,6 +52,20 @@ define <2 x i8> @vxor_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl ret <2 x i8> %v } +define <2 x i8> @vxor_vx_v2i8_commute(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) { +; CHECK-LABEL: vxor_vx_v2i8_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu +; CHECK-NEXT: vxor.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement <2 x i8> undef, i8 %b, i32 0 + %vb = shufflevector <2 x i8> %elt.head, <2 x i8> undef, <2 x i32> zeroinitializer + %v = call <2 x i8> @llvm.vp.xor.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> %m, i32 %evl) + ret <2 x i8> %v +} + define <2 x i8> @vxor_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) { ; CHECK-LABEL: vxor_vx_v2i8_unmasked: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/vadd-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vadd-vp.ll index 13c41718676f..4206edadadb8 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vadd-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vadd-vp.ll @@ -54,6 +54,20 @@ define @vadd_vx_nxv1i8( %va, i8 %b, %v } +define @vadd_vx_nxv1i8_commute( %va, i8 %b, %m, i32 zeroext %evl) { +; CHECK-LABEL: vadd_vx_nxv1i8_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a2, zero, e8, mf8, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu +; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement undef, i8 %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %v = call @llvm.vp.add.nxv1i8( %vb, %va, %m, i32 %evl) + ret %v +} + define @vadd_vx_nxv1i8_unmasked( %va, i8 %b, i32 zeroext %evl) { ; CHECK-LABEL: vadd_vx_nxv1i8_unmasked: ; CHECK: # %bb.0: @@ -636,20 +650,20 @@ define @vadd_vi_nxv128i8( %va, @vadd_vi_nxv128i8_unmasked( %va, i ; CHECK-NEXT: csrr a1, vlenb ; CHECK-NEXT: slli a1, a1, 3 ; CHECK-NEXT: mv a2, a0 -; CHECK-NEXT: bltu a0, a1, .LBB50_2 +; CHECK-NEXT: bltu a0, a1, .LBB51_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: mv a2, a1 -; CHECK-NEXT: .LBB50_2: +; CHECK-NEXT: .LBB51_2: ; CHECK-NEXT: li a3, 0 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, mu ; CHECK-NEXT: sub a1, a0, a1 ; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: bltu a0, a1, .LBB50_4 +; CHECK-NEXT: bltu a0, a1, .LBB51_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: mv a3, a1 -; CHECK-NEXT: .LBB50_4: +; CHECK-NEXT: .LBB51_4: ; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, mu ; CHECK-NEXT: vadd.vi v16, v16, -1 ; CHECK-NEXT: ret @@ -1540,16 +1554,16 @@ define @vadd_vi_nxv32i32( %va, @vadd_vi_nxv32i32_unmasked( %va, i ; CHECK-NEXT: slli a1, a1, 1 ; CHECK-NEXT: sub a3, a0, a1 ; CHECK-NEXT: vslidedown.vx v0, v24, a4 -; CHECK-NEXT: bltu a0, a3, .LBB118_2 +; CHECK-NEXT: bltu a0, a3, .LBB119_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: mv a2, a3 -; CHECK-NEXT: .LBB118_2: +; CHECK-NEXT: .LBB119_2: ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, mu ; CHECK-NEXT: vadd.vi v16, v16, -1, v0.t -; CHECK-NEXT: bltu a0, a1, .LBB118_4 +; CHECK-NEXT: bltu a0, a1, .LBB119_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: mv a0, a1 -; CHECK-NEXT: .LBB118_4: +; CHECK-NEXT: .LBB119_4: ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu ; CHECK-NEXT: vmv1r.v v0, v24 ; CHECK-NEXT: vadd.vi v8, v8, -1, v0.t @@ -1614,16 +1628,16 @@ define @vadd_vi_nxv32i32_evl_nx8( %va, @vand_vx_nxv32i16( %va, i16 %b, %v } +define @vand_vx_nxv32i16_commute( %va, i16 %b, %m, i32 zeroext %evl) { +; CHECK-LABEL: vand_vx_nxv32i16_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a2, zero, e16, m8, ta, mu +; CHECK-NEXT: vmv.v.x v16, a0 +; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu +; CHECK-NEXT: vand.vv v8, v16, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement undef, i16 %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %v = call @llvm.vp.and.nxv32i16( %vb, %va, %m, i32 %evl) + ret %v +} + define @vand_vx_nxv32i16_unmasked( %va, i16 %b, i32 zeroext %evl) { ; CHECK-LABEL: vand_vx_nxv32i16_unmasked: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/vfadd-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vfadd-vp.ll index 7e0291b6156a..019a72b02be7 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vfadd-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfadd-vp.ll @@ -42,6 +42,20 @@ define @vfadd_vf_nxv1f16( %va, half %b, < ret %v } +define @vfadd_vf_nxv1f16_commute( %va, half %b, %m, i32 zeroext %evl) { +; CHECK-LABEL: vfadd_vf_nxv1f16_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; CHECK-NEXT: vfmv.v.f v9, fa0 +; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu +; CHECK-NEXT: vfadd.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement undef, half %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %v = call @llvm.vp.fadd.nxv1f16( %vb, %va, %m, i32 %evl) + ret %v +} + define @vfadd_vf_nxv1f16_unmasked( %va, half %b, i32 zeroext %evl) { ; CHECK-LABEL: vfadd_vf_nxv1f16_unmasked: ; CHECK: # %bb.0: @@ -58,6 +72,22 @@ define @vfadd_vf_nxv1f16_unmasked( %va, h ret %v } +define @vfadd_vf_nxv1f16_unmasked_commute( %va, half %b, i32 zeroext %evl) { +; CHECK-LABEL: vfadd_vf_nxv1f16_unmasked_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; CHECK-NEXT: vfmv.v.f v9, fa0 +; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu +; CHECK-NEXT: vfadd.vv v8, v9, v8 +; CHECK-NEXT: ret + %elt.head = insertelement undef, half %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %head = insertelement undef, i1 true, i32 0 + %m = shufflevector %head, undef, zeroinitializer + %v = call @llvm.vp.fadd.nxv1f16( %vb, %va, %m, i32 %evl) + ret %v +} + declare @llvm.vp.fadd.nxv2f16(, , , i32) define @vfadd_vv_nxv2f16( %va, %b, %m, i32 zeroext %evl) { diff --git a/llvm/test/CodeGen/RISCV/rvv/vmul-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vmul-vp.ll index bcf43854f94e..ecf33e3c2ca2 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vmul-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vmul-vp.ll @@ -954,6 +954,20 @@ define @vmul_vx_nxv16i32( %va, i32 %b, %v } +define @vmul_vx_nxv16i32_commute( %va, i32 %b, %m, i32 zeroext %evl) { +; CHECK-LABEL: vmul_vx_nxv16i32_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a2, zero, e32, m8, ta, mu +; CHECK-NEXT: vmv.v.x v16, a0 +; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu +; CHECK-NEXT: vmul.vv v8, v16, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement undef, i32 %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %v = call @llvm.vp.mul.nxv16i32( %vb, %va, %m, i32 %evl) + ret %v +} + define @vmul_vx_nxv16i32_unmasked( %va, i32 %b, i32 zeroext %evl) { ; CHECK-LABEL: vmul_vx_nxv16i32_unmasked: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/vor-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vor-vp.ll index 5c08d547204d..469d0489c5d8 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vor-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vor-vp.ll @@ -1118,6 +1118,20 @@ define @vor_vx_nxv2i32( %va, i32 %b, %v } +define @vor_vx_nxv2i32_commute( %va, i32 %b, %m, i32 zeroext %evl) { +; CHECK-LABEL: vor_vx_nxv2i32_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu +; CHECK-NEXT: vor.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement undef, i32 %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %v = call @llvm.vp.or.nxv2i32( %vb, %va, %m, i32 %evl) + ret %v +} + define @vor_vx_nxv2i32_unmasked( %va, i32 %b, i32 zeroext %evl) { ; CHECK-LABEL: vor_vx_nxv2i32_unmasked: ; CHECK: # %bb.0: @@ -1132,6 +1146,20 @@ define @vor_vx_nxv2i32_unmasked( %va, i32 % ret %v } +define @vor_vx_nxv2i32_unmasked_commute( %va, i32 %b, i32 zeroext %evl) { +; CHECK-LABEL: vor_vx_nxv2i32_unmasked_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu +; CHECK-NEXT: vor.vx v8, v8, a0 +; CHECK-NEXT: ret + %elt.head = insertelement undef, i32 %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %head = insertelement undef, i1 true, i32 0 + %m = shufflevector %head, undef, zeroinitializer + %v = call @llvm.vp.or.nxv2i32( %vb, %va, %m, i32 %evl) + ret %v +} + define @vor_vi_nxv2i32( %va, %m, i32 zeroext %evl) { ; CHECK-LABEL: vor_vi_nxv2i32: ; CHECK: # %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/vxor-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vxor-vp.ll index 7d7d67d673bd..975c4e926fbd 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vxor-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vxor-vp.ll @@ -870,6 +870,20 @@ define @vxor_vx_nxv1i16( %va, i16 %b, %v } +define @vxor_vx_nxv1i16_commute( %va, i16 %b, %m, i32 zeroext %evl) { +; CHECK-LABEL: vxor_vx_nxv1i16_commute: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a2, zero, e16, mf4, ta, mu +; CHECK-NEXT: vmv.v.x v9, a0 +; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu +; CHECK-NEXT: vxor.vv v8, v9, v8, v0.t +; CHECK-NEXT: ret + %elt.head = insertelement undef, i16 %b, i32 0 + %vb = shufflevector %elt.head, undef, zeroinitializer + %v = call @llvm.vp.xor.nxv1i16( %vb, %va, %m, i32 %evl) + ret %v +} + define @vxor_vx_nxv1i16_unmasked( %va, i16 %b, i32 zeroext %evl) { ; CHECK-LABEL: vxor_vx_nxv1i16_unmasked: ; CHECK: # %bb.0: