aboutsummaryrefslogtreecommitdiff
path: root/gcc/doc/tm.texi.in
diff options
context:
space:
mode:
authorKewen Lin <linkw@gcc.gnu.org>2019-09-14 09:01:21 +0000
committerKewen Lin <linkw@gcc.gnu.org>2019-09-14 09:01:21 +0000
commit603a4ad49978d2a967a1996ac626531200553715 (patch)
tree4cee5f4426954435348cd0b29cd6f982a463318a /gcc/doc/tm.texi.in
parentf3898644854c846c3d28d6b2300bf40283d88c94 (diff)
downloadgcc-603a4ad49978d2a967a1996ac626531200553715.zip
gcc-603a4ad49978d2a967a1996ac626531200553715.tar.gz
gcc-603a4ad49978d2a967a1996ac626531200553715.tar.bz2
Consider doloop IV in IVOPTs
For the targets supporting low-overhead loops, IVOPTs has to take care of the loops which will probably be transformed in RTL doloop optimization, to try to make selected IV candidate set optimal. The process of doloop support includes: 1) Analyze the current loop will be transformed to doloop or not, find and mark its compare type IV use as doloop use (iv_group field doloop_p), and set flag doloop_use_p of ivopts_data to notify subsequent processings on doloop. See analyze_and_mark_doloop_use and its callees for the details. The target hook predict_doloop_p can be used for target specific checks. 2) Add one doloop dedicated IV cand {(may_be_zero ? 1 : (niter + 1)), +, -1}, set flag doloop_p of iv_cand, step cost is set as zero and no extra cost like biv. For cost determination between doloop IV cand and IV use, the target hooks doloop_cost_for_generic and doloop_cost_for_address are provided to add on extra costs for generic type and address type IV use. Zero cost is assigned to the pair between doloop IV cand and doloop IV use, and bound zero is set for IV elimination. 3) With the cost setting in step 2), the current cost model based IV selection algorithm will process as usual, pick up doloop dedicated IV if profitable. gcc/ChangeLog 2019-09-14 Kewen Lin <linkw@gcc.gnu.org> PR middle-end/80791 * config/rs6000/rs6000.c (TARGET_HAVE_COUNT_REG_DECR_P): New macro. (TARGET_DOLOOP_COST_FOR_GENERIC): Likewise. (TARGET_DOLOOP_COST_FOR_ADDRESS): Likewise. * target.def (have_count_reg_decr_p): New hook. (doloop_cost_for_generic): Likewise. (doloop_cost_for_address): Likewise. * doc/tm.texi.in (TARGET_HAVE_COUNT_REG_DECR_P): Likewise. (TARGET_DOLOOP_COST_FOR_GENERIC): Likewise. (TARGET_DOLOOP_COST_FOR_ADDRESS): Likewise. * doc/tm.texi: Regenerate. * tree-ssa-loop-ivopts.c (comp_cost::operator+=): Consider infinite cost addend. (record_group): Init doloop_p. (add_candidate_1): Add optional argument doloop, change the handlings accordingly. (add_candidate): Likewise. (generic_predict_doloop_p): Update attribute. (force_expr_to_var_cost): Add costing for expressions COND_EXPR/LT_EXPR/ LE_EXPR/GT_EXPR/GE_EXPR/EQ_EXPR/NE_EXPR/UNORDERED_EXPR/ORDERED_EXPR/ UNLT_EXPR/UNLE_EXPR/UNGT_EXPR/UNGE_EXPR/UNEQ_EXPR/LTGT_EXPR/MAX_EXPR/ MIN_EXPR. (get_computation_cost): Update for doloop IV cand extra cost. (determine_group_iv_cost_cond): Update for doloop IV cand. (determine_iv_cost): Likewise. (ivopts_estimate_reg_pressure): Likewise. (may_eliminate_iv): Update handlings for doloop IV cand. (add_iv_candidate_for_doloop): New function. (find_iv_candidates): Call function add_iv_candidate_for_doloop. (iv_ca_set_no_cp): Update for doloop IV cand. (iv_ca_set_cp): Likewise. (iv_ca_dump): Dump register cost. (find_doloop_use): New function. (analyze_and_mark_doloop_use): Likewise. (tree_ssa_iv_optimize_loop): Call function analyze_and_mark_doloop_use. gcc/testsuite/ChangeLog 2019-09-14 Kewen Lin <linkw@gcc.gnu.org> PR middle-end/80791 * gcc.dg/tree-ssa/ivopts-3.c: Adjust for doloop change. * gcc.dg/tree-ssa/ivopts-lt.c: Likewise. * gcc.dg/tree-ssa/pr32044.c: Likewise. From-SVN: r275713
Diffstat (limited to 'gcc/doc/tm.texi.in')
-rw-r--r--gcc/doc/tm.texi.in6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 91a2d2b..0b77dd8 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -7950,6 +7950,12 @@ to by @var{ce_info}.
@hook TARGET_PREDICT_DOLOOP_P
+@hook TARGET_HAVE_COUNT_REG_DECR_P
+
+@hook TARGET_DOLOOP_COST_FOR_GENERIC
+
+@hook TARGET_DOLOOP_COST_FOR_ADDRESS
+
@hook TARGET_CAN_USE_DOLOOP_P
@hook TARGET_INVALID_WITHIN_DOLOOP