---------- Forwarded message ---------- From: 袁立威 <[EMAIL PROTECTED]> Date: Wed, Apr 16, 2008 at 6:03 PM Subject: Re: A live analysis problem on gcc4.2.3 To: Eric Botcazou <[EMAIL PROTECTED]>
Yes, I'm talking about propagate one insn in flow.c. How I map live in and live out, please see the code below. I'm sorry that I don't quite understand what do you mean by "given that flow.c doesn't use these but operates on a struct propagate_block_info instead?" FOR_EACH_BB (cur_bb) { bb_live_in = cur_bb->il.rtl->global_live_at_start; bb_live_out = cur_bb->il.rtl->global_live_at_end; bitmap_copy (insn_live_out, bb_live_out); bitmap_copy (insn_live_in, insn_live_out); pbi = init_propagate_block_info (cur_bb, insn_live_in, NULL, NULL, flags); for (insn = BB_END (cur_bb); ; insn = prev) { fprintf(file, "current insn:\n"); print_rtl_single(file, insn); fprintf(file, "before propagate, insn live in:\n"); debug_bitmap_file (file, insn_live_in); fprintf(file, "before propagate, insn live out:\n"); debug_bitmap_file (file, insn_live_out); prev = propagate_one_insn (pbi, insn); assert ( pbi->reg_live==insn_live_in ); fprintf(file, "after propagate, insn live in:\n"); debug_bitmap_file (file, insn_live_in); fprintf(file, "after propagate, insn live out:\n"); debug_bitmap_file (file, insn_live_out); if (insn == BB_HEAD (cur_bb)) break; bitmap_copy (insn_live_out, insn_live_in); } if (!bitmap_equal_p (insn_live_in, bb_live_in)){ fprintf(file, "Not equal!!\n"); fprintf(file, "insn live in:\n"); debug_bitmap_file(file, insn_live_in); fprintf(file, "bb live in:\n"); debug_bitmap_file(file, bb_live_in); assert(0); } free_propagate_block_info (pbi); } On Wed, Apr 16, 2008 at 5:32 PM, Eric Botcazou <[EMAIL PROTECTED]> wrote: > > I use propagate_one_insn to get the current insn's live in. But it > > seems wrong when propagate. > > Before propagate one insn, there is no reg111 in live out and current > > insn def the reg111, how can reg111 > > > > appear in live in after propagate??? > > > > My flag to propagate is: > > flags = PROP_DEATH_NOTES; > > flags &= ~(PROP_SCAN_DEAD_CODE | PROP_SCAN_DEAD_STORES > > > > | PROP_KILL_DEAD_CODE); > > > > This is the dump: > > > > current insn: > > (insn/f 43 42 44 2 (set (reg/f:DI 111 r35) > > (reg/f:DI 12 r12)) -1 (nil) > > (nil)) > > Are you talking about flow.c:propagate_one_insn? If so, how do you map > "live in" and "live out" exactly, given that flow.c doesn't use these > but operates on a struct propagate_block_info instead? > > -- > Eric Botcazou >