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: [PATCH]: update to df for mainline.


Daniel Berlin wrote:
>> The first store is dead if A is a single register and the partial access 
>> is smaller and not using strict_low_part.  The second store is 
>> documented to have undefined effects on the rest of the register in that 
>> case.
>>
>>> If there is a set of test that we can apply when setting the df_ref
>>> _partial flag to ignore the cases where it really is to the entire word,
>>> we will add this in the next flip of the patch.
>> There's some code in flow.c's mark_set_1 which may be usable.
> 
> Are you referring to the part that checks to see whether the outer mode
> size is less than the inner mode size?
> Otherwise, I don't see it. :)
> 
Ignore that.

So actually, I discussed this with Ian Taylor online, and we had the
following conversation:

<iant> Yes, he is saying the same thing that I am
<DannyB> iant: so you are saying that a subreg store to a pseudo is not
partial because the other bits are now undefined
<DannyB> if so, is this *always* true of subreg stores to pseudos
<iant> yes, if the subreg is not inside STRICT_LOW_PART
<DannyB> okay, cause when i implement this and it turns out someone else
disagrees, i'm gonna yell at you :)
<iant> Well, actually, no
<iant> If the value is going to require multiple hard registers, then
you can set a SUBREG and have it be only a partial store
<iant> See operand_subword
<iant> So I think the real distinction is between using SUBREG to
indicate one register of a multi-register value, and using SUBREG to
indicate part of a single register
<iant> And I guess that distinction applies to both pseudo registers and
hard registers
<iant> The more I think about it, the uglier it gets


Based on all of this, it's not actually clear to me that anyone really
knows all the distinctions that we need to make.

However, if someone wants to list the distinctions that would currently
make them happy (IE distinctions like stores to subregs on pseudos not
inside strict_low_part are not partial sets), i'll go implement them. :)

Based on this discussion, I also have a hard time believing any part
outside of flow (or possibly including flow) actually gets subregs right
all the time, since nobody can seem to articulate the entire complete
set of dataflow distinctions that must be made for them. :)

But i digress .. :)



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