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