Hello,
My pass is now generating a correct CFG structure (statements are in the
right place and edges between bbs are ok), however in the end due TODO,
it fails.
Here's the pass definition:
,----
| struct tree_opt_pass pass_clusterswt =
| {
| "clusterswt", /* name */
| gate_clusterswt, /* gate */
| tree_clusterswt, /* execute */
| NULL, /* sub */
| NULL, /* next */
| 0, /* static_pass_number */
| TV_TREE_CLUSTERSWT, /* tv_id */
| PROP_ssa, /* properties_required */
| 0, /* properties_provided */
| 0, /* properties_destroyed */
| 0, /* todo_flags_start */
| TODO_dump_func
| | TODO_verify_all
| | TODO_rebuild_frequencies
| | TODO_update_ssa_any
| | TODO_cleanup_cfg, /* todo_flags_finish */
| 0 /* letter */
| };
`----
After my pass I ran:
dump_function_to_file(current_function_decl, stderr, TDF_DETAILS);
So I get in stderr:
,----
| g (nD.1176)
| {
| <bb 2>:
| Invalid sum of outgoing probabilities 0.0%
| goto <bb 6>;
|
| Invalid sum of incoming frequencies 0, should be 4600
| <L0>:;
| f (&"1"[0]);
| goto <bb 5>;
|
| Invalid sum of incoming frequencies 0, should be 5400
| <L1>:;
| f (&"default"[0]);
|
| <bb 5>:
| return;
|
| <bb 6>:
| Invalid sum of outgoing probabilities 0.0%
| if (n_1(D) == 1)
| goto <bb 3> (<L0>);
| else
| goto <bb 4> (<L1>);
|
| }
|
|
| test1.c: In function 'g':
| test1.c:7: error: dominator of 3 should be 6, not 2
| test1.c:7: error: dominator of 4 should be 6, not 2
| test1.c:7: error: dominator of 5 should be 6, not 2
| test1.c:7: error: dominator of 6 status unknown
| test1.c:7: internal compiler error: Segmentation fault
`----
The frequencies should be updated by the TODO so I am not worried.
How can I automatically update dominators? Or do I have to do it for
each new basic_block I create with recompute_dominator?
Cheers,
--
PMatos