number of queries is algorithmically limited to the number of
stores on all paths from the load to the function entry.
+@item max-pre-hoist-insert-iterations
+The maximum number of iterations doing insertion during code
+hoisting which is done as part of the partial redundancy elimination
+insertion phase.
+
@item ira-max-loops-num
IRA uses regional register allocation by default. If a function
contains more loops than the number given by this parameter, only at most
Common Joined UInteger Var(param_max_predicted_iterations) Init(100) IntegerRange(0, 65536) Param Optimization
The maximum number of loop iterations we predict statically.
+-param=max-pre-hoist-insert-iterations=
+Common Joined UInteger Var(param_max_pre_hoist_insert_iterations) Init(3) Param Optimization
+The maximum number of insert iterations done for PRE code hoisting.
+
-param=max-reload-search-insns=
Common Joined UInteger Var(param_max_reload_search_insns) Init(100) Param Optimization
The maximum number of instructions to search backward when looking for equivalent reload.
changed = false;
/* Insert expressions for hoisting. Do a backward walk here since
- inserting into BLOCK exposes new opportunities in its predecessors. */
- if (flag_code_hoisting)
+ inserting into BLOCK exposes new opportunities in its predecessors.
+ Since PRE and hoist insertions can cause back-to-back iteration
+ limit that on the hoist side. */
+ if (flag_code_hoisting
+ && num_iterations <= param_max_pre_hoist_insert_iterations)
for (int idx = rpo_num - 1; idx >= 0; --idx)
{
basic_block block = BASIC_BLOCK_FOR_FN (cfun, rpo[idx]);