This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Repost: RFA [4.1]: improvement to if-conversion and cross-jumping (PR20070)


Ulrich Weigand wrote:



Those are the top-most insns of the match.  As I understand it, the [xy]_local_live
bitmaps now correspond to the live information at the points immediately preceding
those two insns.



When the last insn of the match has been processed, bits 1 and 2 should be set for both blocks, and hence the bitmaps intersect.



How come? Before those two insns, register 1 in block X is *not* live,
and same for register 2 in block Y.


Oops, I got confused when you brougt up resolve_input_conflict. Since the
registers are not live at the start, they are not inputs; they are used only locally.
Hence there is no input conflict, either.


Earlier you wrote:

> in try_crossjump_to_edge:
>
> 1299 for (i = 0; i < info.cur.local_count; i++)
> 1300 if (info.local_rvalue[i])
> 1301 emit_insn_before (gen_move_insn (info.x_local[i], info.y_local[i]),
> 1302 y_active);
>
> where
>
> (gdb) print info.cur.local_count
> $2 = 2
> (gdb) call debug_rtx (info.x_local[0])
> (reg/f:SI 1 %r1 [83])
> (gdb) call debug_rtx (info.y_local[0])
> (reg/f:SI 2 %r2 [70])
> (gdb) call debug_rtx (info.x_local[1])
> (reg:SI 2 %r2 [86])
> (gdb) call debug_rtx (info.y_local[1])
> (reg:SI 1 %r1 [73])


You have to look at info.local_rvalue for what registers are actually inputs.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]