This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Updating the CFG after function modifcation


Hello,
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.

-Matt


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]