RISC-V: Add fault first load C/C++ support
gcc/ChangeLog: * config/riscv/riscv-builtins.cc (riscv_gimple_fold_builtin): New function. * config/riscv/riscv-protos.h (riscv_gimple_fold_builtin): Ditto. (gimple_fold_builtin): Ditto. * config/riscv/riscv-vector-builtins-bases.cc (class read_vl): New class. (class vleff): Ditto. (BASE): Ditto. * config/riscv/riscv-vector-builtins-bases.h: Ditto. * config/riscv/riscv-vector-builtins-functions.def (read_vl): Ditto. (vleff): Ditto. * config/riscv/riscv-vector-builtins-shapes.cc (struct read_vl_def): Ditto. (struct fault_load_def): Ditto. (SHAPE): Ditto. * config/riscv/riscv-vector-builtins-shapes.h: Ditto. * config/riscv/riscv-vector-builtins.cc (rvv_arg_type_info::get_tree_type): Add size_ptr. (gimple_folder::gimple_folder): New class. (gimple_folder::fold): Ditto. (gimple_fold_builtin): New function. (get_read_vl_instance): Ditto. (get_read_vl_decl): Ditto. * config/riscv/riscv-vector-builtins.def (size_ptr): Add size_ptr. * config/riscv/riscv-vector-builtins.h (class gimple_folder): New class. (get_read_vl_instance): New function. (get_read_vl_decl): Ditto. * config/riscv/riscv-vsetvl.cc (fault_first_load_p): Ditto. (read_vl_insn_p): Ditto. (available_occurrence_p): Ditto. (backward_propagate_worthwhile_p): Ditto. (gen_vsetvl_pat): Adapt for vleff support. (get_forward_read_vl_insn): New function. (get_backward_fault_first_load_insn): Ditto. (source_equal_p): Adapt for vleff support. (first_ratio_invalid_for_second_sew_p): Remove. (first_ratio_invalid_for_second_lmul_p): Ditto. (first_lmul_less_than_second_lmul_p): Ditto. (first_ratio_less_than_second_ratio_p): Ditto. (support_relaxed_compatible_p): New function. (vector_insn_info::operator>): Remove. (vector_insn_info::operator>=): Refine. (vector_insn_info::parse_insn): Adapt for vleff support. (vector_insn_info::compatible_p): Ditto. (vector_insn_info::update_fault_first_load_avl): New function. (pass_vsetvl::transfer_after): Adapt for vleff support. (pass_vsetvl::demand_fusion): Ditto. (pass_vsetvl::cleanup_insns): Ditto. * config/riscv/riscv-vsetvl.def (DEF_INCOMPATIBLE_COND): Remove redundant condtions. * config/riscv/riscv-vsetvl.h (struct demands_cond): New function. * config/riscv/riscv.cc (TARGET_GIMPLE_FOLD_BUILTIN): New target hook. * config/riscv/riscv.md: Adapt for vleff support. * config/riscv/t-riscv: Ditto. * config/riscv/vector-iterators.md: New iterator. * config/riscv/vector.md (read_vlsi): New pattern. (read_vldi_zero_extend): Ditto. (@pred_fault_load<mode>): Ditto.
Showing
- gcc/config/riscv/riscv-builtins.cc 31 additions, 0 deletionsgcc/config/riscv/riscv-builtins.cc
- gcc/config/riscv/riscv-protos.h 2 additions, 0 deletionsgcc/config/riscv/riscv-protos.h
- gcc/config/riscv/riscv-vector-builtins-bases.cc 85 additions, 1 deletiongcc/config/riscv/riscv-vector-builtins-bases.cc
- gcc/config/riscv/riscv-vector-builtins-bases.h 2 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins-bases.h
- gcc/config/riscv/riscv-vector-builtins-functions.def 6 additions, 1 deletiongcc/config/riscv/riscv-vector-builtins-functions.def
- gcc/config/riscv/riscv-vector-builtins-shapes.cc 58 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins-shapes.cc
- gcc/config/riscv/riscv-vector-builtins-shapes.h 2 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins-shapes.h
- gcc/config/riscv/riscv-vector-builtins.cc 82 additions, 1 deletiongcc/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 25 additions, 0 deletionsgcc/config/riscv/riscv-vector-builtins.h
- gcc/config/riscv/riscv-vsetvl.cc 203 additions, 120 deletionsgcc/config/riscv/riscv-vsetvl.cc
- gcc/config/riscv/riscv-vsetvl.def 9 additions, 180 deletionsgcc/config/riscv/riscv-vsetvl.def
- gcc/config/riscv/riscv-vsetvl.h 9 additions, 1 deletiongcc/config/riscv/riscv-vsetvl.h
- gcc/config/riscv/riscv.cc 3 additions, 0 deletionsgcc/config/riscv/riscv.cc
- gcc/config/riscv/riscv.md 6 additions, 2 deletionsgcc/config/riscv/riscv.md
- gcc/config/riscv/t-riscv 2 additions, 1 deletiongcc/config/riscv/t-riscv
- gcc/config/riscv/vector-iterators.md 1 addition, 0 deletionsgcc/config/riscv/vector-iterators.md
- gcc/config/riscv/vector.md 48 additions, 5 deletionsgcc/config/riscv/vector.md
Loading
Please register or sign in to comment