[llvm] 92f1794 - [RISCV] Mark fminnum_vl and fmaxnum_vl as commutable.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 8 10:19:32 PDT 2022
Author: Craig Topper
Date: 2022-07-08T10:19:09-07:00
New Revision: 92f1794d41831dbc9ffc7c6bb4b606e65eb1c8ed
URL: https://github.com/llvm/llvm-project/commit/92f1794d41831dbc9ffc7c6bb4b606e65eb1c8ed
DIFF: https://github.com/llvm/llvm-project/commit/92f1794d41831dbc9ffc7c6bb4b606e65eb1c8ed.diff
LOG: [RISCV] Mark fminnum_vl and fmaxnum_vl as commutable.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmax.ll
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
index 290afb73c3b0..49306bb0f4e2 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
@@ -94,8 +94,8 @@ def riscv_fneg_vl : SDNode<"RISCVISD::FNEG_VL", SDT_RISCVFPUnOp_VL>;
def riscv_fabs_vl : SDNode<"RISCVISD::FABS_VL", SDT_RISCVFPUnOp_VL>;
def riscv_fsqrt_vl : SDNode<"RISCVISD::FSQRT_VL", SDT_RISCVFPUnOp_VL>;
def riscv_fcopysign_vl : SDNode<"RISCVISD::FCOPYSIGN_VL", SDT_RISCVFPBinOp_VL>;
-def riscv_fminnum_vl : SDNode<"RISCVISD::FMINNUM_VL", SDT_RISCVFPBinOp_VL>;
-def riscv_fmaxnum_vl : SDNode<"RISCVISD::FMAXNUM_VL", SDT_RISCVFPBinOp_VL>;
+def riscv_fminnum_vl : SDNode<"RISCVISD::FMINNUM_VL", SDT_RISCVFPBinOp_VL, [SDNPCommutative]>;
+def riscv_fmaxnum_vl : SDNode<"RISCVISD::FMAXNUM_VL", SDT_RISCVFPBinOp_VL, [SDNPCommutative]>;
def SDT_RISCVVecFMA_VL : SDTypeProfile<1, 5, [SDTCisSameAs<0, 1>,
SDTCisSameAs<0, 2>,
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmax.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmax.ll
index 1f298c89601a..54a0adca125f 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmax.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmax.ll
@@ -32,8 +32,7 @@ define <2 x half> @vfmax_v2f16_fv(<2 x half> %a, half %b) {
; CHECK-LABEL: vfmax_v2f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmax.vv v8, v9, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <2 x half> poison, half %b, i32 0
%splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
@@ -69,8 +68,7 @@ define <4 x half> @vfmax_v4f16_fv(<4 x half> %a, half %b) {
; CHECK-LABEL: vfmax_v4f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmax.vv v8, v9, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <4 x half> poison, half %b, i32 0
%splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
@@ -106,8 +104,7 @@ define <8 x half> @vfmax_v8f16_fv(<8 x half> %a, half %b) {
; CHECK-LABEL: vfmax_v8f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmax.vv v8, v9, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <8 x half> poison, half %b, i32 0
%splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
@@ -143,8 +140,7 @@ define <16 x half> @vfmax_v16f16_fv(<16 x half> %a, half %b) {
; CHECK-LABEL: vfmax_v16f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
-; CHECK-NEXT: vfmv.v.f v10, fa0
-; CHECK-NEXT: vfmax.vv v8, v10, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <16 x half> poison, half %b, i32 0
%splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
@@ -180,8 +176,7 @@ define <2 x float> @vfmax_v2f32_fv(<2 x float> %a, float %b) {
; CHECK-LABEL: vfmax_v2f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmax.vv v8, v9, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <2 x float> poison, float %b, i32 0
%splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
@@ -217,8 +212,7 @@ define <4 x float> @vfmax_v4f32_fv(<4 x float> %a, float %b) {
; CHECK-LABEL: vfmax_v4f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmax.vv v8, v9, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <4 x float> poison, float %b, i32 0
%splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
@@ -254,8 +248,7 @@ define <8 x float> @vfmax_v8f32_fv(<8 x float> %a, float %b) {
; CHECK-LABEL: vfmax_v8f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
-; CHECK-NEXT: vfmv.v.f v10, fa0
-; CHECK-NEXT: vfmax.vv v8, v10, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <8 x float> poison, float %b, i32 0
%splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
@@ -291,8 +284,7 @@ define <16 x float> @vfmax_v16f32_fv(<16 x float> %a, float %b) {
; CHECK-LABEL: vfmax_v16f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
-; CHECK-NEXT: vfmv.v.f v12, fa0
-; CHECK-NEXT: vfmax.vv v8, v12, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <16 x float> poison, float %b, i32 0
%splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
@@ -328,8 +320,7 @@ define <2 x double> @vfmax_v2f64_fv(<2 x double> %a, double %b) {
; CHECK-LABEL: vfmax_v2f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmax.vv v8, v9, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <2 x double> poison, double %b, i32 0
%splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
@@ -365,8 +356,7 @@ define <4 x double> @vfmax_v4f64_fv(<4 x double> %a, double %b) {
; CHECK-LABEL: vfmax_v4f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
-; CHECK-NEXT: vfmv.v.f v10, fa0
-; CHECK-NEXT: vfmax.vv v8, v10, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <4 x double> poison, double %b, i32 0
%splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
@@ -402,8 +392,7 @@ define <8 x double> @vfmax_v8f64_fv(<8 x double> %a, double %b) {
; CHECK-LABEL: vfmax_v8f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
-; CHECK-NEXT: vfmv.v.f v12, fa0
-; CHECK-NEXT: vfmax.vv v8, v12, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <8 x double> poison, double %b, i32 0
%splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
@@ -439,8 +428,7 @@ define <16 x double> @vfmax_v16f64_fv(<16 x double> %a, double %b) {
; CHECK-LABEL: vfmax_v16f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, mu
-; CHECK-NEXT: vfmv.v.f v16, fa0
-; CHECK-NEXT: vfmax.vv v8, v16, v8
+; CHECK-NEXT: vfmax.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <16 x double> poison, double %b, i32 0
%splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin.ll
index e8c8d2ea623c..8b1569e3b80b 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin.ll
@@ -32,8 +32,7 @@ define <2 x half> @vfmin_v2f16_fv(<2 x half> %a, half %b) {
; CHECK-LABEL: vfmin_v2f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmin.vv v8, v9, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <2 x half> poison, half %b, i32 0
%splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
@@ -69,8 +68,7 @@ define <4 x half> @vfmin_v4f16_fv(<4 x half> %a, half %b) {
; CHECK-LABEL: vfmin_v4f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmin.vv v8, v9, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <4 x half> poison, half %b, i32 0
%splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
@@ -106,8 +104,7 @@ define <8 x half> @vfmin_v8f16_fv(<8 x half> %a, half %b) {
; CHECK-LABEL: vfmin_v8f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmin.vv v8, v9, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <8 x half> poison, half %b, i32 0
%splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
@@ -143,8 +140,7 @@ define <16 x half> @vfmin_v16f16_fv(<16 x half> %a, half %b) {
; CHECK-LABEL: vfmin_v16f16_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
-; CHECK-NEXT: vfmv.v.f v10, fa0
-; CHECK-NEXT: vfmin.vv v8, v10, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <16 x half> poison, half %b, i32 0
%splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
@@ -180,8 +176,7 @@ define <2 x float> @vfmin_v2f32_fv(<2 x float> %a, float %b) {
; CHECK-LABEL: vfmin_v2f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmin.vv v8, v9, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <2 x float> poison, float %b, i32 0
%splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
@@ -217,8 +212,7 @@ define <4 x float> @vfmin_v4f32_fv(<4 x float> %a, float %b) {
; CHECK-LABEL: vfmin_v4f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmin.vv v8, v9, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <4 x float> poison, float %b, i32 0
%splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
@@ -254,8 +248,7 @@ define <8 x float> @vfmin_v8f32_fv(<8 x float> %a, float %b) {
; CHECK-LABEL: vfmin_v8f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
-; CHECK-NEXT: vfmv.v.f v10, fa0
-; CHECK-NEXT: vfmin.vv v8, v10, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <8 x float> poison, float %b, i32 0
%splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
@@ -291,8 +284,7 @@ define <16 x float> @vfmin_v16f32_fv(<16 x float> %a, float %b) {
; CHECK-LABEL: vfmin_v16f32_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
-; CHECK-NEXT: vfmv.v.f v12, fa0
-; CHECK-NEXT: vfmin.vv v8, v12, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <16 x float> poison, float %b, i32 0
%splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
@@ -328,8 +320,7 @@ define <2 x double> @vfmin_v2f64_fv(<2 x double> %a, double %b) {
; CHECK-LABEL: vfmin_v2f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
-; CHECK-NEXT: vfmv.v.f v9, fa0
-; CHECK-NEXT: vfmin.vv v8, v9, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <2 x double> poison, double %b, i32 0
%splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
@@ -365,8 +356,7 @@ define <4 x double> @vfmin_v4f64_fv(<4 x double> %a, double %b) {
; CHECK-LABEL: vfmin_v4f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
-; CHECK-NEXT: vfmv.v.f v10, fa0
-; CHECK-NEXT: vfmin.vv v8, v10, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <4 x double> poison, double %b, i32 0
%splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
@@ -402,8 +392,7 @@ define <8 x double> @vfmin_v8f64_fv(<8 x double> %a, double %b) {
; CHECK-LABEL: vfmin_v8f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
-; CHECK-NEXT: vfmv.v.f v12, fa0
-; CHECK-NEXT: vfmin.vv v8, v12, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <8 x double> poison, double %b, i32 0
%splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
@@ -439,8 +428,7 @@ define <16 x double> @vfmin_v16f64_fv(<16 x double> %a, double %b) {
; CHECK-LABEL: vfmin_v16f64_fv:
; CHECK: # %bb.0:
; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, mu
-; CHECK-NEXT: vfmv.v.f v16, fa0
-; CHECK-NEXT: vfmin.vv v8, v16, v8
+; CHECK-NEXT: vfmin.vf v8, v8, fa0
; CHECK-NEXT: ret
%head = insertelement <16 x double> poison, double %b, i32 0
%splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer
More information about the llvm-commits
mailing list