aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>2023-08-23 10:32:30 +0800
committerPan Li <pan2.li@intel.com>2023-08-23 10:37:39 +0800
commit29487eb237b893c673e9ecc6409b175e22792f13 (patch)
tree0efada40145a0d599087d77f5590ac782e97d7ba
parent5f3c8075f230309c4417b0e5256283d010ac99d2 (diff)
downloadgcc-29487eb237b893c673e9ecc6409b175e22792f13.zip
gcc-29487eb237b893c673e9ecc6409b175e22792f13.tar.gz
gcc-29487eb237b893c673e9ecc6409b175e22792f13.tar.bz2
RISC-V: Fix VTYPE fuse rule bug
This bug is exposed after refactor patch. Separate it and commited. gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (ge_sew_ratio_unavailable_p): Fix fuse rule bug. * config/riscv/riscv-vsetvl.def (DEF_SEW_LMUL_FUSE_RULE): Ditto.
-rw-r--r--gcc/config/riscv/riscv-vsetvl.cc10
-rw-r--r--gcc/config/riscv/riscv-vsetvl.def2
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc
index 819a391..ec1aaa4 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -1423,8 +1423,14 @@ static bool
ge_sew_ratio_unavailable_p (const vector_insn_info &info1,
const vector_insn_info &info2)
{
- if (!info2.demand_p (DEMAND_LMUL) && info2.demand_p (DEMAND_GE_SEW))
- return info1.get_sew () < info2.get_sew ();
+ if (!info2.demand_p (DEMAND_LMUL))
+ {
+ if (info2.demand_p (DEMAND_GE_SEW))
+ return info1.get_sew () < info2.get_sew ();
+ /* Demand GE_SEW should be available for non-demand SEW. */
+ else if (!info2.demand_p (DEMAND_SEW))
+ return false;
+ }
return true;
}
diff --git a/gcc/config/riscv/riscv-vsetvl.def b/gcc/config/riscv/riscv-vsetvl.def
index 7a73149..7289c01 100644
--- a/gcc/config/riscv/riscv-vsetvl.def
+++ b/gcc/config/riscv/riscv-vsetvl.def
@@ -319,7 +319,7 @@ DEF_SEW_LMUL_FUSE_RULE (/*SEW*/ DEMAND_TRUE, /*LMUL*/ DEMAND_FALSE,
/*RATIO*/ DEMAND_TRUE, /*GE_SEW*/ DEMAND_FALSE,
/*NEW_DEMAND_SEW*/ true,
/*NEW_DEMAND_LMUL*/ false,
- /*NEW_DEMAND_RATIO*/ false,
+ /*NEW_DEMAND_RATIO*/ true,
/*NEW_DEMAND_GE_SEW*/ true, first_sew,
vlmul_for_first_sew_second_ratio, second_ratio)
DEF_SEW_LMUL_FUSE_RULE (/*SEW*/ DEMAND_TRUE, /*LMUL*/ DEMAND_FALSE,