diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2023-08-23 10:32:30 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-08-23 10:37:39 +0800 |
commit | 29487eb237b893c673e9ecc6409b175e22792f13 (patch) | |
tree | 0efada40145a0d599087d77f5590ac782e97d7ba | |
parent | 5f3c8075f230309c4417b0e5256283d010ac99d2 (diff) | |
download | gcc-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.cc | 10 | ||||
-rw-r--r-- | gcc/config/riscv/riscv-vsetvl.def | 2 |
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, |