Andreas Schwab <sch...@suse.de> writes:
> Richard Sandiford <rdsandif...@googlemail.com> writes:
>
>> REG_BR_PROB notes are stored as:
>>
>>   (expr_list:REG_BR_PROB (const_int <prob>) <chain>)
>>
>> but a full const_int rtx seems a bit heavweight when all we want is
>> a plain "int".  This patch uses:
>>
>>   (int_list:REG_BR_PROB <prob> <chain>)
>>
>> instead.
>
> I think you left out the handling of INT_LIST in eliminate_regs_1.  This
> lets me finish the build:

Sorry for the breakage.  I think we need to handle INT_LIST in the same way
as INSN_LIST though, and eliminate in XEXP (x, 1).

How about the attached?  Testing in progress...

Thanks,
Richard


gcc/
        * cse.c (count_reg_usage): Handle INT_LIST.
        * lra-eliminations.c (lra_eliminate_regs_1): Likewise.
        * reginfo.c (reg_scan_mark_refs): Likewise.
        * reload1.c (eliminate_regs_1): Likewise.

Index: gcc/cse.c
===================================================================
--- gcc/cse.c   2013-09-24 18:29:49.308378918 +0100
+++ gcc/cse.c   2013-09-24 18:29:49.460380403 +0100
@@ -6739,6 +6739,7 @@ count_reg_usage (rtx x, int *counts, rtx
       return;
 
     case INSN_LIST:
+    case INT_LIST:
       gcc_unreachable ();
 
     default:
Index: gcc/lra-eliminations.c
===================================================================
--- gcc/lra-eliminations.c      2013-09-24 18:29:49.308378918 +0100
+++ gcc/lra-eliminations.c      2013-09-24 18:29:49.461380412 +0100
@@ -471,6 +471,7 @@ lra_eliminate_regs_1 (rtx x, enum machin
       /* ... fall through ...  */
 
     case INSN_LIST:
+    case INT_LIST:
       /* Now do eliminations in the rest of the chain. If this was
         an EXPR_LIST, this might result in allocating more memory than is
         strictly needed, but it simplifies the code.  */
Index: gcc/reginfo.c
===================================================================
--- gcc/reginfo.c       2013-09-24 18:29:49.309378928 +0100
+++ gcc/reginfo.c       2013-09-24 18:29:49.462380422 +0100
@@ -1075,6 +1075,7 @@ reg_scan_mark_refs (rtx x, rtx insn)
       break;
 
     case INSN_LIST:
+    case INT_LIST:
       if (XEXP (x, 1))
        reg_scan_mark_refs (XEXP (x, 1), insn);
       break;
Index: gcc/reload1.c
===================================================================
--- gcc/reload1.c       2013-09-24 18:29:49.311378947 +0100
+++ gcc/reload1.c       2013-09-24 18:29:49.463380432 +0100
@@ -2776,6 +2776,7 @@ eliminate_regs_1 (rtx x, enum machine_mo
       /* ... fall through ...  */
 
     case INSN_LIST:
+    case INT_LIST:
       /* Now do eliminations in the rest of the chain.  If this was
         an EXPR_LIST, this might result in allocating more memory than is
         strictly needed, but it simplifies the code.  */

Reply via email to