Maximum depth of logical expression evaluation ranger will look through
when evaluating outgoing edge ranges.
+@item relation-block-limit
+Maximum number of relations the oracle will register in a basic block.
+
@item openacc-kernels
Specify mode of OpenACC `kernels' constructs handling.
With @option{--param=openacc-kernels=decompose}, OpenACC `kernels'
Maximum depth of logical expression evaluation ranger will look through when
evaluating outgoing edge ranges.
+-param=relation-block-limit=
+Common Joined UInteger Var(param_relation_block_limit) Init(200) IntegerRange(0, 9999) Param Optimization
+Maximum number of relations the oracle will register in a basic block.
+
-param=rpo-vn-max-loop-depth=
Common Joined UInteger Var(param_rpo_vn_max_loop_depth) Init(7) IntegerRange(2, 65536) Param Optimization
Maximum depth of a loop nest to fully value-number optimistically.
else
{
relation_chain *ptr = set_one_relation (bb, k, op1, op2);
- register_transitives (bb, *ptr);
+ if (ptr)
+ register_transitives (bb, *ptr);
}
}
// Register relation K between OP! and OP2 in block BB.
// This creates the record and searches for existing records in the dominator
-// tree to merge with.
+// tree to merge with. Return the record, or NULL if no record was created.
relation_chain *
dom_oracle::set_one_relation (basic_block bb, relation_kind k, tree op1,
}
else
{
+ if (m_relations[bbi].m_num_relations >= param_relation_block_limit)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, " Not registered due to bb being full\n");
+ return NULL;
+ }
+ m_relations[bbi].m_num_relations++;
// Check for an existing relation further up the DOM chain.
// By including dominating relations, The first one found in any search
// will be the aggregate of all the previous ones.
value_relation nr (relation.kind (), r1, r2);
if (nr.apply_transitive (*ptr))
{
- set_one_relation (root_bb, nr.kind (), nr.op1 (), nr.op2 ());
+ if (!set_one_relation (root_bb, nr.kind (), nr.op1 (), nr.op2 ()))
+ return;
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, " Registering transitive relation ");