-
- Downloads
RISC-V: Add scalar move support and fix VSETVL bugs
gcc/ChangeLog: * config/riscv/constraints.md (Wb1): New constraint. * config/riscv/predicates.md (vector_least_significant_set_mask_operand): New predicate. (vector_broadcast_mask_operand): Ditto. * config/riscv/riscv-protos.h (enum vlmul_type): Adjust. (gen_scalar_move_mask): New function. * config/riscv/riscv-v.cc (gen_scalar_move_mask): Ditto. * config/riscv/riscv-vector-builtins-bases.cc (class vmv): New class. (class vmv_s): Ditto. (BASE): Ditto. * config/riscv/riscv-vector-builtins-bases.h: Ditto. * config/riscv/riscv-vector-builtins-functions.def (vmv_x): Ditto. (vmv_s): Ditto. (vfmv_f): Ditto. (vfmv_s): Ditto. * config/riscv/riscv-vector-builtins-shapes.cc (struct scalar_move_def): Ditto. (SHAPE): Ditto. * config/riscv/riscv-vector-builtins-shapes.h: Ditto. * config/riscv/riscv-vector-builtins.cc (function_expander::mask_mode): Ditto. (function_expander::use_exact_insn): New function. (function_expander::use_contiguous_load_insn): New function. (function_expander::use_contiguous_store_insn): New function. (function_expander::use_ternop_insn): New function. (function_expander::use_widen_ternop_insn): New function. (function_expander::use_scalar_move_insn): New function. * config/riscv/riscv-vector-builtins.def (s): New operand suffix. * config/riscv/riscv-vector-builtins.h (function_expander::add_scalar_move_mask_operand): New class. * config/riscv/riscv-vsetvl.cc (ignore_vlmul_insn_p): New function. (scalar_move_insn_p): Ditto. (has_vsetvl_killed_avl_p): Ditto. (anticipatable_occurrence_p): Ditto. (insert_vsetvl): Ditto. (get_vl_vtype_info): Ditto. (calculate_sew): Ditto. (calculate_vlmul): Ditto. (incompatible_avl_p): Ditto. (different_sew_p): Ditto. (different_lmul_p): Ditto. (different_ratio_p): Ditto. (different_tail_policy_p): Ditto. (different_mask_policy_p): Ditto. (possible_zero_avl_p): Ditto. (first_ratio_invalid_for_second_sew_p): Ditto. (first_ratio_invalid_for_second_lmul_p): Ditto. (second_ratio_invalid_for_first_sew_p): Ditto. (second_ratio_invalid_for_first_lmul_p): Ditto. (second_sew_less_than_first_sew_p): Ditto. (first_sew_less_than_second_sew_p): Ditto. (compare_lmul): Ditto. (second_lmul_less_than_first_lmul_p): Ditto. (first_lmul_less_than_second_lmul_p): Ditto. (first_ratio_less_than_second_ratio_p): Ditto. (second_ratio_less_than_first_ratio_p): Ditto. (DEF_INCOMPATIBLE_COND): Ditto. (greatest_sew): Ditto. (first_sew): Ditto. (second_sew): Ditto. (first_vlmul): Ditto. (second_vlmul): Ditto. (first_ratio): Ditto. (second_ratio): Ditto. (vlmul_for_first_sew_second_ratio): Ditto. (ratio_for_second_sew_first_vlmul): Ditto. (DEF_SEW_LMUL_FUSE_RULE): Ditto. (always_unavailable): Ditto. (avl_unavailable_p): Ditto. (sew_unavailable_p): Ditto. (lmul_unavailable_p): Ditto. (ge_sew_unavailable_p): Ditto. (ge_sew_lmul_unavailable_p): Ditto. (ge_sew_ratio_unavailable_p): Ditto. (DEF_UNAVAILABLE_COND): Ditto. (same_sew_lmul_demand_p): Ditto. (propagate_avl_across_demands_p): Ditto. (reg_available_p): Ditto. (avl_info::has_non_zero_avl): Ditto. (vl_vtype_info::has_non_zero_avl): Ditto. (vector_insn_info::operator>=): Refactor. (vector_insn_info::parse_insn): Adjust for scalar move. (vector_insn_info::demand_vl_vtype): Remove. (vector_insn_info::compatible_p): New function. (vector_insn_info::compatible_avl_p): Ditto. (vector_insn_info::compatible_vtype_p): Ditto. (vector_insn_info::available_p): Ditto. (vector_insn_info::merge): Ditto. (vector_insn_info::fuse_avl): Ditto. (vector_insn_info::fuse_sew_lmul): Ditto. (vector_insn_info::fuse_tail_policy): Ditto. (vector_insn_info::fuse_mask_policy): Ditto. (vector_insn_info::dump): Ditto. (vector_infos_manager::release): Ditto. (pass_vsetvl::compute_local_backward_infos): Adjust for scalar move support. (pass_vsetvl::get_backward_fusion_type): Adjust for scalar move support. (pass_vsetvl::hard_empty_block_p): Ditto. (pass_vsetvl::backward_demand_fusion): Ditto. (pass_vsetvl::forward_demand_fusion): Ditto. (pass_vsetvl::refine_vsetvls): Ditto. (pass_vsetvl::cleanup_vsetvls): Ditto. (pass_vsetvl::commit_vsetvls): Ditto. (pass_vsetvl::propagate_avl): Ditto. * config/riscv/riscv-vsetvl.h (enum demand_status): New class. (struct demands_pair): Ditto. (struct demands_cond): Ditto. (struct demands_fuse_rule): Ditto. * config/riscv/vector-iterators.md: New iterator. * config/riscv/vector.md (@pred_broadcast<mode>): New pattern. (*pred_broadcast<mode>): Ditto. (*pred_broadcast<mode>_extended_scalar): Ditto. (@pred_extract_first<mode>): Ditto. (*pred_extract_first<mode>): Ditto. (@pred_extract_first_trunc<mode>): Ditto. * config/riscv/riscv-vsetvl.def: New file. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vsetvl/vsetvlmax-10.c: Adjust test. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-18.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-9.c: Ditto.
Showing
- gcc/config/riscv/constraints.md 6 additions, 0 deletionsgcc/config/riscv/constraints.md
- gcc/config/riscv/predicates.md 16 additions, 4 deletionsgcc/config/riscv/predicates.md
- gcc/config/riscv/riscv-protos.h 2 additions, 0 deletionsgcc/config/riscv/riscv-protos.h
- gcc/config/riscv/riscv-v.cc 11 additions, 0 deletionsgcc/config/riscv/riscv-v.cc
- gcc/config/riscv/riscv-vector-builtins-bases.cc 34 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins-bases.cc
- gcc/config/riscv/riscv-vector-builtins-bases.h 4 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins-bases.h
- gcc/config/riscv/riscv-vector-builtins-functions.def 17 additions, 1 deletiongcc/config/riscv/riscv-vector-builtins-functions.def
- gcc/config/riscv/riscv-vector-builtins-shapes.cc 17 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins-shapes.cc
- gcc/config/riscv/riscv-vector-builtins-shapes.h 1 addition, 0 deletionsgcc/config/riscv/riscv-vector-builtins-shapes.h
- gcc/config/riscv/riscv-vector-builtins.cc 71 additions, 16 deletionsgcc/config/riscv/riscv-vector-builtins.cc
- gcc/config/riscv/riscv-vector-builtins.def 1 addition, 0 deletionsgcc/config/riscv/riscv-vector-builtins.def
- gcc/config/riscv/riscv-vector-builtins.h 10 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins.h
- gcc/config/riscv/riscv-vsetvl.cc 713 additions, 218 deletionsgcc/config/riscv/riscv-vsetvl.cc
- gcc/config/riscv/riscv-vsetvl.def 684 additions, 0 deletionsgcc/config/riscv/riscv-vsetvl.def
- gcc/config/riscv/riscv-vsetvl.h 80 additions, 6 deletionsgcc/config/riscv/riscv-vsetvl.h
- gcc/config/riscv/vector-iterators.md 22 additions, 22 deletionsgcc/config/riscv/vector-iterators.md
- gcc/config/riscv/vector.md 215 additions, 28 deletionsgcc/config/riscv/vector.md
- gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-10.c 1 addition, 1 deletiongcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-10.c
- gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-11.c 1 addition, 1 deletiongcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-11.c
- gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-12.c 1 addition, 1 deletiongcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-12.c
Loading
Please register or sign in to comment