diff options
author | Vladimir N. Makarov <vmakarov@redhat.com> | 2023-02-10 11:12:37 -0500 |
---|---|---|
committer | Vladimir N. Makarov <vmakarov@redhat.com> | 2023-02-10 11:45:33 -0500 |
commit | 3c5154d0f0d2185b518465b264ca17fb7c60c1e8 (patch) | |
tree | 204368be9cb8000a5e0cd55fceb3625a71bbd384 | |
parent | 6493b7af37e473a89c67afab474330f931dd8447 (diff) | |
download | gcc-3c5154d0f0d2185b518465b264ca17fb7c60c1e8.zip gcc-3c5154d0f0d2185b518465b264ca17fb7c60c1e8.tar.gz gcc-3c5154d0f0d2185b518465b264ca17fb7c60c1e8.tar.bz2 |
RA: Use simple LRA for huge functions
The PR108500 test contains a huge function and RA spends a lot of time
to compile the test with -O0. The patch decreases compilation time
considerably for huge functions. Compilation time for the PR test
decreases from 1235s to 709s on Intel i7-13600K.
PR tree-optimization/108500
gcc/ChangeLog:
* params.opt (ira-simple-lra-insn-threshold): Add new param.
* ira.cc (ira): Use the param to switch on simple LRA.
-rw-r--r-- | gcc/ira.cc | 14 | ||||
-rw-r--r-- | gcc/params.opt | 4 |
2 files changed, 13 insertions, 5 deletions
@@ -5624,12 +5624,16 @@ ira (FILE *f) if (DF_REG_DEF_COUNT (i) || DF_REG_USE_COUNT (i)) num_used_regs++; - /* If there are too many pseudos and/or basic blocks (e.g. 10K - pseudos and 10K blocks or 100K pseudos and 1K blocks), we will - use simplified and faster algorithms in LRA. */ + /* If there are too many pseudos and/or basic blocks (e.g. 10K pseudos and + 10K blocks or 100K pseudos and 1K blocks) or we have too many function + insns, we will use simplified and faster algorithms in LRA. */ lra_simple_p - = ira_use_lra_p - && num_used_regs >= (1U << 26) / last_basic_block_for_fn (cfun); + = (ira_use_lra_p + && (num_used_regs >= (1U << 26) / last_basic_block_for_fn (cfun) + /* max uid is a good evaluation of the number of insns as most + optimizations are done on tree-SSA level. */ + || ((uint64_t) get_max_uid () + > (uint64_t) param_ira_simple_lra_insn_threshold * 1000))); if (lra_simple_p) { diff --git a/gcc/params.opt b/gcc/params.opt index 8a128c3..c7913d9 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -302,6 +302,10 @@ The number of registers in each class kept unused by loop invariant motion. Common Joined UInteger Var(param_ira_max_conflict_table_size) Init(1000) Param Optimization Max size of conflict table in MB. +-param=ira-simple-lra-insn-threshold= +Common Joined UInteger Var(param_ira_simple_lra_insn_threshold) Init(1000) Param Optimization +Approximate function insn number in 1K units triggering simple local RA. + -param=ira-max-loops-num= Common Joined UInteger Var(param_ira_max_loops_num) Init(100) Param Optimization Max loops number for regional RA. |