On 05/18/12 03:48, Chung-Lin Tang wrote: > @@ -2401,6 +2401,7 @@ scan_trace (dw_trace_info *trace) > { > /* Propagate across fallthru edges. */ > dwarf2out_flush_queued_reg_saves (); > + def_cfa_1 (&this_cfa); > maybe_record_trace_start (insn, NULL); > break; > } > @@ -2455,6 +2456,18 @@ scan_trace (dw_trace_info *trace) > cur_cfa = &this_cfa; > continue; > } > + else > + { > + /* If ELT is a annulled branch-taken instruction (i.e. > executed > + only when branch is not taken), the args_size and CFA > should > + not change through the jump. */ > + create_trace_edges (control); > + > + /* Update and continue with the trace. */ > + add_cfi_insn = insn; > + scan_insn_after (elt); > + continue; > + }
I think the def_cfa_1 is misplaced. It should be immediately before that last continue. That mirrors the sort of flow you get via the other paths through the loop. r~