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~

Reply via email to