This is the mail archive of the
mailing list for the GCC project.
Updating the CFG after function modifcation
- From: Matt Davis <mattdavis9 at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Sat, 16 Jul 2011 14:31:26 +1000
- Subject: Updating the CFG after function modifcation
I have an IPA pass (implemented as a plugin) which executes after all IPA
passes. My pass transforms functions by adding code and also modifying the
function prototypes. I have had this work on a per-function basis, via a
GIMPLE_PASS, which calls update_ssa verify_ssa and cleanup_cfg after each
function is processed. However, I have recently moved my plugin to execute
after all IPA passes, so I can iterate over the cfg of the program. The first
iteration is an analysis, and the second iteration does the transformations.
Unfortunately, I keep getting errors now, primarily a segfault in
"compute_call_stmt_bb_frequency" in the processing of the main(). The segfault
occurs because the argument 'bb' is NULL and later dereferenced. (NOTE: I do
not modify the prototype of main).
The e->call_stmt that the null basic block references is from a statement I have
removed via gsi_remove during my transformation pass. I need to clean up the
cfg somehow, after I remove the statement. My gimple pass, with this same
functionality worked fine. Something tells me that my plugin should be in a
different position. I also tried calling cleanup_tree_cfg() after my
transformation pass, still no luck
Any suggestions would be welcomed. Thanks for even reading this far.