[PATCH PR62151]Fix uninitialized register issue caused by distribute_notes in combine pass

Jeff Law law@redhat.com
Fri Sep 5 04:13:00 GMT 2014


On 09/01/14 23:14, Bin.Cheng wrote:
> On Tue, Sep 2, 2014 at 11:40 AM, Jeff Law <law@redhat.com> wrote:
>> On 08/31/14 22:18, Bin.Cheng wrote:
>>>>
>>>>
>>>> Note that i0..i4 need not be consecutive insns, so you'd have to walk the
>>>> chain from the location with the death note to the proposed death note
>>>> site.
>>>> If between those locations there's another set of the same pseudo, then
>>>> drop
>>>> the note.  Since this may be an expensive check it should probably be
>>>> conditionalized on REG_N_SETS (pseudo) > 1
>>>
>>>
>>> Here is the complicated part.  The from_insn is i1, i2/i3 are the
>>> following instructions.  The original logic seems to me is scanning
>>> from i3 for one insn for distribution of REG_DEAD note in from_insn.
>>> Since the last use is in from_insn, it makes no sense to scan from i3
>>> (after from_insn).  What we need to do is scanning from from_insn in
>>> backward trying to find a place for note distribution.  If we run into
>>> a useless set of the note reg, we can just delete that insn or add
>>> REG_UNUSED to it.  It just seems not right to do this on instructions
>>> after from_insn, which causes the wrong code in this specific case.
>>
>> I wasn't suggesting we add a REG_UNUSED or delete anything.  Merely look to
>> see if between the original note's location and new proposed location for
>> the note.  If there's another assignment to the same pseudo in that range of
>> insns, then simply remove the note.  What happens if you do that?
> I will do some experiments on this.  If there is no optimizations
> depending on the REG_DEAD note following combine pass, I suppose there
> is no read effect.
In the case we're talking about, as I understand it, the note no longer 
has any useful meaning.

In fact, I can't convince myself there is any valid place to put the 
note in the general case and trying to do so is really just a waste of 
time.  Or to look at it another way, if we were to conceptually throw 
away all the REG_DEAD notes, then recreate them from scratch after this 
insn combination that there'd be one less REG_DEAD note when they were 
rebuilt.

Jeff



More information about the Gcc-patches mailing list