On Mon, Nov 26, 2018 at 04:20:18PM -0600, Segher Boessenkool wrote: > > --- gcc/config/rs6000/rs6000.c.jj 2018-11-16 21:35:42.497982764 +0100 > > +++ gcc/config/rs6000/rs6000.c 2018-11-26 10:56:28.079516458 +0100 > > @@ -20644,7 +20644,11 @@ print_operand (FILE *file, rtx x, int co > > > > case 'D': > > /* Like 'J' but get to the GT bit only. */ > > - gcc_assert (REG_P (x)); > > + if (!REG_P (x)) > > + { > > + output_operand_lossage ("invalid %%D value"); > > + return; > > + } > > > > /* Bit 1 is GT bit. */ > > i = 4 * (REGNO (x) - CR0_REGNO) + 1; > > 'D' just blows up if you pass it something not a CR field (well, it compiles > into something that doesn't assemble).
I can add || !CR_REGNO_P (REGNO (x)) . > 'J' uses ccr_bit. This actually explodes (a gcc_assert, an ICE). Oops, I thought ccr_bit will just return -1. So, shall we change all the gcc_assert/gcc_unreachable in ccr_bit to (conditional) return -1; and perhaps add gcc_assert in the non-print_operand callers? > > @@ -20900,7 +20904,11 @@ print_operand (FILE *file, rtx x, int co > > > > case 't': > > /* Like 'J' but get to the OVERFLOW/UNORDERED bit. */ > > - gcc_assert (REG_P (x) && GET_MODE (x) == CCmode); > > + if (!REG_P (x) || GET_MODE (x) != CCmode) > > + { > > + output_operand_lossage ("invalid %%t value"); > > + return; > > + } > > > > /* Bit 3 is OV bit. */ > > i = 4 * (REGNO (x) - CR0_REGNO) + 3; > > 't' does not seem easy to blow up, heh. > > Both 'D' and 't', as well as ccr_bit, should use cc_reg_operand I think? > That allows some pseudos as well, but that doesn't matter. It also allows SUBREGs and the code will crash badly if they appear. Testing just REG_P (x) && CR_REGNO_P (REGNO (x)) seems better to me. > > @@ -21059,7 +21067,11 @@ print_operand (FILE *file, rtx x, int co > > names. If we are configured for System V (or the embedded ABI) on > > the PowerPC, do not emit the period, since those systems do not use > > TOCs and the like. */ > > - gcc_assert (GET_CODE (x) == SYMBOL_REF); > > + if (GET_CODE (x) != SYMBOL_REF) > > SYMBOL_REF_P please. Ok. Jakub