Referencing a register in different modes
Jeff Law
jeffreyalaw@gmail.com
Thu Aug 8 13:57:43 GMT 2024
On 8/8/24 6:26 AM, Stefan Schulze Frielinghaus wrote:
> On Thu, Aug 08, 2024 at 06:03:13AM -0600, Jeff Law wrote:
>>
>>
>> On 8/8/24 5:15 AM, Stefan Schulze Frielinghaus via Gcc wrote:
>>
>>>
>>> However `(reg:DI 61 [ MEM[(const union T *)p_2(D)] ])` referencing the
>>> same pseudo in a different mode is not substituted in insn 6 which
>>> leads in the following to an error. The insn is emitted in
>>> s390_expand_insv() during
>> There can only be a single instance of a given pseudo, if you have multiple
>> instances, that's the bug.
>
> Yeah I was fearing this might be the culprit.
It doesn't come up much, but I've stumbled across it a few times through
the years. It comes up less often than sharing nodes that aren't
supposed to be shared though.
You know we probably could build a checker for this. Walk the IL (prior
to register allocation) and for every pseudo referenced, see if it
compares equal to regno_reg_rtx[regnum], if not ICE. Probably could be
embedded in one of the existing RTL checking phases with minimal cost.
jeff
More information about the Gcc
mailing list