On 11/13/2018 10:53 AM, Peter Bergner wrote:
On 11/13/18 9:01 AM, Renlin Li wrote:
I could verify that, your patch fixes all the ICEs I saw with 
arm-linux-gnueabihf toolchain!
There are some differences on the test results, because I compare the latest 
results with something which is old.

I haven't test it on bare-metal toolchain yet. But will do to ensure all 
related issues are fixed.
Hi Renlin,

That's excellent news!  My guess on the testsuite results changes is that
they're probably caused by the combine changes/fixes that went in around
the same time as my patches.

If you want to disable the special copy handling, which should only help
things since it gives RA more freedom, you can apply the patch I mentioned
here:

   https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00379.html

which allows you to turn on and off the optimization with an option.


Jeff and Vlad,

I think with the above results, I think the patch is ready for review.
I'm attaching the latest updated patch below.

Again, this passed bootstrap and regtesting on powerpc64le-linux with
no regressions.  Ok for mainline?

Ok, Peter.


Additional point generation here is not important.  It is more important for IRA.  Therefore more efforts were spent to reduce their numbers and spans in IRA than in LRA.

Thanks for working on the PR.  LRA/reload patches need a few iteration as a rule.  So it is a normal situation.

gcc/
        PR rtl-optimization/87899
        * lra-lives.c (start_living): Update white space in comment.
        (enum point_type): New.
        (sparseset_contains_pseudos_p): New function.
        (update_pseudo_point): Likewise.
        (make_hard_regno_live): Use HARD_REGISTER_NUM_P macro.
        (make_hard_regno_dead): Likewise.  Remove ignore_reg_for_conflicts
        handling.  Move early exit after adding conflicts.
        (mark_pseudo_live): Use HARD_REGISTER_NUM_P macro.  Add early exit
        if regno is already live.  Remove all handling of program points.
        (mark_pseudo_dead): Use HARD_REGISTER_NUM_P macro.  Add early exit
        after adding conflicts.  Remove all handling of program points and
        ignore_reg_for_conflicts.
        (mark_regno_live): Use HARD_REGISTER_NUM_P macro.  Remove return value
        and do not guard call to mark_pseudo_live.
        (mark_regno_dead): Use HARD_REGISTER_NUM_P macro.  Remove return value
        and do not guard call to mark_pseudo_dead.
        (check_pseudos_live_through_calls): Use HARD_REGISTER_NUM_P macro.
        (process_bb_lives): Use HARD_REGISTER_NUM_P and HARD_REGISTER_P macros.
        Use new function update_pseudo_point.  Handle register copies by
        removing the source register from the live set.  Handle INOUT operands.
        Update to the next program point using the unused_set, dead_set and
        start_dying sets.
        (lra_create_live_ranges_1): Use HARD_REGISTER_NUM_P macro.


Reply via email to