Should "can_create_pseudo_p" check "lra_in_progress"?

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Should "can_create_pseudo_p" check "lra_in_progress"?

Andrew Stubbs-4
I just tracked down a "reload" bug and was very surprised to find that
can_create_pseudo_p doesn't return false during register allocation when
using LRA.

It's still defined like this:

#define can_create_pseudo_p() (!reload_in_progress && !reload_completed)

Is it deliberate that it doesn't check lra_in_progress?

Thanks

Andrew
Reply | Threaded
Open this post in threaded view
|

Re: Should "can_create_pseudo_p" check "lra_in_progress"?

Jeff Law
On 10/5/18 7:04 AM, Andrew Stubbs wrote:
> I just tracked down a "reload" bug and was very surprised to find that
> can_create_pseudo_p doesn't return false during register allocation when
> using LRA.
>
> It's still defined like this:
>
> #define can_create_pseudo_p() (!reload_in_progress && !reload_completed)
>
> Is it deliberate that it doesn't check lra_in_progress?
I think its deliberate.  IRA and I believe LRA can create pseudos while
they are running.  Vlad would know for certain.

Jeff
Reply | Threaded
Open this post in threaded view
|

Re: Should "can_create_pseudo_p" check "lra_in_progress"?

Vladimir Makarov
On 10/05/2018 01:19 PM, Jeff Law wrote:

> On 10/5/18 7:04 AM, Andrew Stubbs wrote:
>> I just tracked down a "reload" bug and was very surprised to find that
>> can_create_pseudo_p doesn't return false during register allocation when
>> using LRA.
>>
>> It's still defined like this:
>>
>> #define can_create_pseudo_p() (!reload_in_progress && !reload_completed)
>>
>> Is it deliberate that it doesn't check lra_in_progress?
> I think its deliberate.  IRA and I believe LRA can create pseudos while
> they are running.  Vlad would know for certain.
>
Yes, Jeff is right.  LRA works differently from reload.  Reload keeps
all decisions and RTL transformations (which are done at the very end of
reload) in internal data structures and never create pseudos.  LRA
reflects its decisions and the transformations in RTL for this it
creates new RTL insns and pseudos during all its work.