On Tue, 2007-09-25 at 15:13 +0800, 吴曦 wrote: > propagate_one_insn), I don't understand why GCC fails the computation > of liveness if there is no optimization flag :-(.
There is probably something else happening with -O that is recomputing some liveness or CFG info. For instance, the flow2 pass will call split_all_insns and cleanup_cfg, but only with -O. You could try selectively disabling other optimization passes to determine which one is necessary in order for your code to work. Actually, looking closer, I see several of them call update_life_info. regrename for instance has two update_life_info calls. Another possibility here is to try calling recompute_reg_usage instead of doing it yourself. Or maybe calling just update_life_info directly, if you need different flags set. FYI This stuff is all different on mainline since the dataflow merge. I'm assuming you are using gcc-4.2.x. -- Jim Wilson, GNU Tools Support, http://www.specifix.com