[PATCH,RFC] CSE path following on basic blocks
Steven Bosscher
stevenb.gcc@gmail.com
Tue Nov 28 18:44:00 GMT 2006
On 11/28/06, Eric Botcazou <ebotcazou@libertysurf.fr> wrote:
> I agree that, in the cfglayout implementation, following one edge and not the
> other is kind of strange, so it would indeed make sense to turn f_c_f_j into
> the predicate for pure locality. But the change should be clearly stated in
> the code and then cse_find_path not invoked if f_c_f_j if false.
Yes, that was a good point. I'll make that change too.
> > Well, we know that prev == bb_head, and a basic block with a NULL
> > bb_head can't occur. The rest is just what the code was before.
>
> Then the gcc_assert seems pretty useless there too.
No, actually it is a bug. That code was supposed to look for the
previous insn, and I made it look for BB_HEAD. So you've discovered a
real bug in that change. Thanks for that :-)
> > The old code does think it computes an upper bound, but if you remove
> > the 500 from CSE as it is on the trunk, it will also ICE, usually on
> > small functions (e.g. I had a test case with max_qty == 3, and we
> > allocated 6 qtys). I don't know where the extra qty's come from yet.
>
> OK, thanks for the clarification. The compiler doesn't really write past the
> end of qty_table, right? I was somewhat confused by this assertion in your
> comment, because sanity checks are supposed to prevent that.
If max_qty is *not* set to 500 for small functions, and checking is
disabled, then cse *does* write past the end of qty_table. This
showed up for me as memory corruption that glibc complains about.
With checking enabled, you'd trivver the assert in make_new_qty.
If max_qty = MAX(2*nsets,500) then we don't write past the end of qty_table.
> > No, I will not do this for the current patch (but I will look into it
> > later because I need to fix this anyway if I'm going to save/restore
> > the hash table at the end of each basic block).
>
> Then why multiply by MAX_RECOG_OPERANDS? Why not just keep the almost 15-year
> old trick?
Because I don't understand why we would write past the end of
qty_table. It leaves me with a feeling that, given the right test
case, we could even trigger that problem if we use the 15 year old
trick.
But maybe I'm being too conservative. It's a known shortcoming in
most aerospace engineers ;-)
Gr.
Steven
More information about the Gcc-patches
mailing list