[patch] fix regrename pass to ensure renamings produce valid insns
Jeff Law
law@redhat.com
Fri Nov 6 19:51:00 GMT 2015
On 11/06/2015 03:48 AM, Bernd Schmidt wrote:
> On 06/17/2015 07:11 PM, Sandra Loosemore wrote:
>
>> Index: gcc/regrename.c
>> ===================================================================
>> --- gcc/regrename.c (revision 224532)
>> +++ gcc/regrename.c (working copy)
>> @@ -942,19 +942,22 @@ regrename_do_replace (struct du_head *he
>> int reg_ptr = REG_POINTER (*chain->loc);
>>
>> if (DEBUG_INSN_P (chain->insn) && REGNO (*chain->loc) !=
>> base_regno)
>> - INSN_VAR_LOCATION_LOC (chain->insn) = gen_rtx_UNKNOWN_VAR_LOC ();
>> + validate_change (chain->insn, &(INSN_VAR_LOCATION_LOC
>> (chain->insn)),
>> + gen_rtx_UNKNOWN_VAR_LOC (), true);
>> else
>> {
>> - *chain->loc = gen_raw_REG (GET_MODE (*chain->loc), reg);
>> + validate_change (chain->insn, chain->loc,
>> + gen_raw_REG (GET_MODE (*chain->loc), reg), true);
>> if (regno >= FIRST_PSEUDO_REGISTER)
>> ORIGINAL_REGNO (*chain->loc) = regno;
>> REG_ATTRS (*chain->loc) = attr;
>
> With a patch I'm working on that uses the renamer more often, I found
> that this is causing compare-debug failures. Validating changes to
> debug_insns (the INSN_VAR_LOCATION_LOC in particular) can apparently fail.
>
> The following fix was bootstrapped and tested with -frename-registers
> enabled at -O1 on x86_64-linux. Ok?
Essentially we're keeping the validate_change that Sandra & Chung added
on the real insns to address the problem on the nios2 port. The patch
just drops the DEBUG_INSN changes from the change group.
For the DEBUG_INSNS in the chain, we update those independently after we
apply the change group.
I think the change is fine for the trunk, though I'm still curious about
how the code as-is resulted in a comparison failure.
jeff
More information about the Gcc-patches
mailing list