Segher Boessenkool <seg...@kernel.crashing.org> writes: > Since times immemorial there has been const_int_rtx for all values from > -64 to 64, but only constm1_rtx..const2_rtx have been available for > convenient use. Change this, so that we can use all values in > {-64,...,64} in RTL easily. This matters, because then we we just say > if (XEXP (x, 1) == const16_rtx) > and things like that, since all const_int in that range are unique. We > already do for -1, 0, 1, 2, but we could for everything. > > 2021-06-01 Segher Boessenkool <seg...@kernel.crashing.org> > * rtl.h (constm64_rtx, ..., constm2_rtx): New. > (const3_rtx, ..., const64_rtx): New. > > doc/ > * rtl.texi (Constants): Document the new names. > --- > Tested on powerpc64-linux {-m32,-m64}, but this of course doesn't mean > all that much until any of the new names are actually used. > > Is this okay for trunk?
No strong objection, but personally I'd rather not add something that is very specific to VOIDmode CONST_INTs. I realise it's very unlikely that we'll ever be able to give CONST_INTs their proper mode (no-one has the kind of time needed to do that), but I don't think we should make the switch actively harder either. How about adding a new inline helper function that tests whether an rtx is a CONST_INT with a given value? Then we could have a __builtin_constant_p shortcut for the [-64, 64] case. That would also avoid hard-coding the range. Thanks, Richard > > > Segher > > > gcc/doc/rtl.texi | 20 +++++---- > gcc/rtl.h | 127 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 2 files changed, 137 insertions(+), 10 deletions(-) > > diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi > index 5af71137a878..5dbfb6028095 100644 > --- a/gcc/doc/rtl.texi > +++ b/gcc/doc/rtl.texi > @@ -1658,19 +1658,21 @@ copies of the top bit. Note however that values are > neither > inherently signed nor inherently unsigned; where necessary, signedness > is determined by the rtl operation instead. > > +@findex constm64_rtx > +@findex constm1_rtx > @findex const0_rtx > @findex const1_rtx > @findex const2_rtx > -@findex constm1_rtx > -There is only one expression object for the integer value zero; it is > +@findex const64_rtx > +There is only one expression object for the integer value zero: it is > the value of the variable @code{const0_rtx}. Likewise, the only > -expression for integer value one is found in @code{const1_rtx}, the only > -expression for integer value two is found in @code{const2_rtx}, and the > -only expression for integer value negative one is found in > -@code{constm1_rtx}. Any attempt to create an expression of code > -@code{const_int} and value zero, one, two or negative one will return > -@code{const0_rtx}, @code{const1_rtx}, @code{const2_rtx} or > -@code{constm1_rtx} as appropriate. > +expression for integer value one is found in @code{const1_rtx}, and more > +generally, the only expression for integer value @var{N} is found in > +@code{const@var{N}_rtx}, and the only expression for integer value negative > +@var{N} is found in @code{constm@var{N}_rtx}, both for any @var{N} from 1 up > +to 64 inclusive. Any attempt to create an expression of code > +@code{const_int} and value in that range will return @code{const0_rtx}, > +@code{const1_rtx}, and so on, as appropriate. > > @findex const_true_rtx > Similarly, there is only one object for the integer whose value is > diff --git a/gcc/rtl.h b/gcc/rtl.h > index 35178b5bfaca..5429b7a3f4ac 100644 > --- a/gcc/rtl.h > +++ b/gcc/rtl.h > @@ -3768,10 +3768,135 @@ extern unsigned int split_all_insns_noflow (void); > #define MAX_SAVED_CONST_INT 64 > extern GTY(()) rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; > > +#define constm64_rtx (const_int_rtx[MAX_SAVED_CONST_INT-64]) > +#define constm63_rtx (const_int_rtx[MAX_SAVED_CONST_INT-63]) > +#define constm62_rtx (const_int_rtx[MAX_SAVED_CONST_INT-62]) > +#define constm61_rtx (const_int_rtx[MAX_SAVED_CONST_INT-61]) > +#define constm60_rtx (const_int_rtx[MAX_SAVED_CONST_INT-60]) > +#define constm59_rtx (const_int_rtx[MAX_SAVED_CONST_INT-59]) > +#define constm58_rtx (const_int_rtx[MAX_SAVED_CONST_INT-58]) > +#define constm57_rtx (const_int_rtx[MAX_SAVED_CONST_INT-57]) > +#define constm56_rtx (const_int_rtx[MAX_SAVED_CONST_INT-56]) > +#define constm55_rtx (const_int_rtx[MAX_SAVED_CONST_INT-55]) > +#define constm54_rtx (const_int_rtx[MAX_SAVED_CONST_INT-54]) > +#define constm53_rtx (const_int_rtx[MAX_SAVED_CONST_INT-53]) > +#define constm52_rtx (const_int_rtx[MAX_SAVED_CONST_INT-52]) > +#define constm51_rtx (const_int_rtx[MAX_SAVED_CONST_INT-51]) > +#define constm50_rtx (const_int_rtx[MAX_SAVED_CONST_INT-50]) > +#define constm49_rtx (const_int_rtx[MAX_SAVED_CONST_INT-49]) > +#define constm48_rtx (const_int_rtx[MAX_SAVED_CONST_INT-48]) > +#define constm47_rtx (const_int_rtx[MAX_SAVED_CONST_INT-47]) > +#define constm46_rtx (const_int_rtx[MAX_SAVED_CONST_INT-46]) > +#define constm45_rtx (const_int_rtx[MAX_SAVED_CONST_INT-45]) > +#define constm44_rtx (const_int_rtx[MAX_SAVED_CONST_INT-44]) > +#define constm43_rtx (const_int_rtx[MAX_SAVED_CONST_INT-43]) > +#define constm42_rtx (const_int_rtx[MAX_SAVED_CONST_INT-42]) > +#define constm41_rtx (const_int_rtx[MAX_SAVED_CONST_INT-41]) > +#define constm40_rtx (const_int_rtx[MAX_SAVED_CONST_INT-40]) > +#define constm39_rtx (const_int_rtx[MAX_SAVED_CONST_INT-39]) > +#define constm38_rtx (const_int_rtx[MAX_SAVED_CONST_INT-38]) > +#define constm37_rtx (const_int_rtx[MAX_SAVED_CONST_INT-37]) > +#define constm36_rtx (const_int_rtx[MAX_SAVED_CONST_INT-36]) > +#define constm35_rtx (const_int_rtx[MAX_SAVED_CONST_INT-35]) > +#define constm34_rtx (const_int_rtx[MAX_SAVED_CONST_INT-34]) > +#define constm33_rtx (const_int_rtx[MAX_SAVED_CONST_INT-33]) > +#define constm32_rtx (const_int_rtx[MAX_SAVED_CONST_INT-32]) > +#define constm31_rtx (const_int_rtx[MAX_SAVED_CONST_INT-31]) > +#define constm30_rtx (const_int_rtx[MAX_SAVED_CONST_INT-30]) > +#define constm29_rtx (const_int_rtx[MAX_SAVED_CONST_INT-29]) > +#define constm28_rtx (const_int_rtx[MAX_SAVED_CONST_INT-28]) > +#define constm27_rtx (const_int_rtx[MAX_SAVED_CONST_INT-27]) > +#define constm26_rtx (const_int_rtx[MAX_SAVED_CONST_INT-26]) > +#define constm25_rtx (const_int_rtx[MAX_SAVED_CONST_INT-25]) > +#define constm24_rtx (const_int_rtx[MAX_SAVED_CONST_INT-24]) > +#define constm23_rtx (const_int_rtx[MAX_SAVED_CONST_INT-23]) > +#define constm22_rtx (const_int_rtx[MAX_SAVED_CONST_INT-22]) > +#define constm21_rtx (const_int_rtx[MAX_SAVED_CONST_INT-21]) > +#define constm20_rtx (const_int_rtx[MAX_SAVED_CONST_INT-20]) > +#define constm19_rtx (const_int_rtx[MAX_SAVED_CONST_INT-19]) > +#define constm18_rtx (const_int_rtx[MAX_SAVED_CONST_INT-18]) > +#define constm17_rtx (const_int_rtx[MAX_SAVED_CONST_INT-17]) > +#define constm16_rtx (const_int_rtx[MAX_SAVED_CONST_INT-16]) > +#define constm15_rtx (const_int_rtx[MAX_SAVED_CONST_INT-15]) > +#define constm14_rtx (const_int_rtx[MAX_SAVED_CONST_INT-14]) > +#define constm13_rtx (const_int_rtx[MAX_SAVED_CONST_INT-13]) > +#define constm12_rtx (const_int_rtx[MAX_SAVED_CONST_INT-12]) > +#define constm11_rtx (const_int_rtx[MAX_SAVED_CONST_INT-11]) > +#define constm10_rtx (const_int_rtx[MAX_SAVED_CONST_INT-10]) > +#define constm9_rtx (const_int_rtx[MAX_SAVED_CONST_INT-9]) > +#define constm8_rtx (const_int_rtx[MAX_SAVED_CONST_INT-8]) > +#define constm7_rtx (const_int_rtx[MAX_SAVED_CONST_INT-7]) > +#define constm6_rtx (const_int_rtx[MAX_SAVED_CONST_INT-6]) > +#define constm5_rtx (const_int_rtx[MAX_SAVED_CONST_INT-5]) > +#define constm4_rtx (const_int_rtx[MAX_SAVED_CONST_INT-4]) > +#define constm3_rtx (const_int_rtx[MAX_SAVED_CONST_INT-3]) > +#define constm2_rtx (const_int_rtx[MAX_SAVED_CONST_INT-2]) > +#define constm1_rtx (const_int_rtx[MAX_SAVED_CONST_INT-1]) > #define const0_rtx (const_int_rtx[MAX_SAVED_CONST_INT]) > #define const1_rtx (const_int_rtx[MAX_SAVED_CONST_INT+1]) > #define const2_rtx (const_int_rtx[MAX_SAVED_CONST_INT+2]) > -#define constm1_rtx (const_int_rtx[MAX_SAVED_CONST_INT-1]) > +#define const3_rtx (const_int_rtx[MAX_SAVED_CONST_INT+3]) > +#define const4_rtx (const_int_rtx[MAX_SAVED_CONST_INT+4]) > +#define const5_rtx (const_int_rtx[MAX_SAVED_CONST_INT+5]) > +#define const6_rtx (const_int_rtx[MAX_SAVED_CONST_INT+6]) > +#define const7_rtx (const_int_rtx[MAX_SAVED_CONST_INT+7]) > +#define const8_rtx (const_int_rtx[MAX_SAVED_CONST_INT+8]) > +#define const9_rtx (const_int_rtx[MAX_SAVED_CONST_INT+9]) > +#define const10_rtx (const_int_rtx[MAX_SAVED_CONST_INT+10]) > +#define const11_rtx (const_int_rtx[MAX_SAVED_CONST_INT+11]) > +#define const12_rtx (const_int_rtx[MAX_SAVED_CONST_INT+12]) > +#define const13_rtx (const_int_rtx[MAX_SAVED_CONST_INT+13]) > +#define const14_rtx (const_int_rtx[MAX_SAVED_CONST_INT+14]) > +#define const15_rtx (const_int_rtx[MAX_SAVED_CONST_INT+15]) > +#define const16_rtx (const_int_rtx[MAX_SAVED_CONST_INT+16]) > +#define const17_rtx (const_int_rtx[MAX_SAVED_CONST_INT+17]) > +#define const18_rtx (const_int_rtx[MAX_SAVED_CONST_INT+18]) > +#define const19_rtx (const_int_rtx[MAX_SAVED_CONST_INT+19]) > +#define const20_rtx (const_int_rtx[MAX_SAVED_CONST_INT+20]) > +#define const21_rtx (const_int_rtx[MAX_SAVED_CONST_INT+21]) > +#define const22_rtx (const_int_rtx[MAX_SAVED_CONST_INT+22]) > +#define const23_rtx (const_int_rtx[MAX_SAVED_CONST_INT+23]) > +#define const24_rtx (const_int_rtx[MAX_SAVED_CONST_INT+24]) > +#define const25_rtx (const_int_rtx[MAX_SAVED_CONST_INT+25]) > +#define const26_rtx (const_int_rtx[MAX_SAVED_CONST_INT+26]) > +#define const27_rtx (const_int_rtx[MAX_SAVED_CONST_INT+27]) > +#define const28_rtx (const_int_rtx[MAX_SAVED_CONST_INT+28]) > +#define const29_rtx (const_int_rtx[MAX_SAVED_CONST_INT+29]) > +#define const30_rtx (const_int_rtx[MAX_SAVED_CONST_INT+30]) > +#define const31_rtx (const_int_rtx[MAX_SAVED_CONST_INT+31]) > +#define const32_rtx (const_int_rtx[MAX_SAVED_CONST_INT+32]) > +#define const33_rtx (const_int_rtx[MAX_SAVED_CONST_INT+33]) > +#define const34_rtx (const_int_rtx[MAX_SAVED_CONST_INT+34]) > +#define const35_rtx (const_int_rtx[MAX_SAVED_CONST_INT+35]) > +#define const36_rtx (const_int_rtx[MAX_SAVED_CONST_INT+36]) > +#define const37_rtx (const_int_rtx[MAX_SAVED_CONST_INT+37]) > +#define const38_rtx (const_int_rtx[MAX_SAVED_CONST_INT+38]) > +#define const39_rtx (const_int_rtx[MAX_SAVED_CONST_INT+39]) > +#define const40_rtx (const_int_rtx[MAX_SAVED_CONST_INT+40]) > +#define const41_rtx (const_int_rtx[MAX_SAVED_CONST_INT+41]) > +#define const42_rtx (const_int_rtx[MAX_SAVED_CONST_INT+42]) > +#define const43_rtx (const_int_rtx[MAX_SAVED_CONST_INT+43]) > +#define const44_rtx (const_int_rtx[MAX_SAVED_CONST_INT+44]) > +#define const45_rtx (const_int_rtx[MAX_SAVED_CONST_INT+45]) > +#define const46_rtx (const_int_rtx[MAX_SAVED_CONST_INT+46]) > +#define const47_rtx (const_int_rtx[MAX_SAVED_CONST_INT+47]) > +#define const48_rtx (const_int_rtx[MAX_SAVED_CONST_INT+48]) > +#define const49_rtx (const_int_rtx[MAX_SAVED_CONST_INT+49]) > +#define const50_rtx (const_int_rtx[MAX_SAVED_CONST_INT+50]) > +#define const51_rtx (const_int_rtx[MAX_SAVED_CONST_INT+51]) > +#define const52_rtx (const_int_rtx[MAX_SAVED_CONST_INT+52]) > +#define const53_rtx (const_int_rtx[MAX_SAVED_CONST_INT+53]) > +#define const54_rtx (const_int_rtx[MAX_SAVED_CONST_INT+54]) > +#define const55_rtx (const_int_rtx[MAX_SAVED_CONST_INT+55]) > +#define const56_rtx (const_int_rtx[MAX_SAVED_CONST_INT+56]) > +#define const57_rtx (const_int_rtx[MAX_SAVED_CONST_INT+57]) > +#define const58_rtx (const_int_rtx[MAX_SAVED_CONST_INT+58]) > +#define const59_rtx (const_int_rtx[MAX_SAVED_CONST_INT+59]) > +#define const60_rtx (const_int_rtx[MAX_SAVED_CONST_INT+60]) > +#define const61_rtx (const_int_rtx[MAX_SAVED_CONST_INT+61]) > +#define const62_rtx (const_int_rtx[MAX_SAVED_CONST_INT+62]) > +#define const63_rtx (const_int_rtx[MAX_SAVED_CONST_INT+63]) > +#define const64_rtx (const_int_rtx[MAX_SAVED_CONST_INT+64]) > extern GTY(()) rtx const_true_rtx; > > extern GTY(()) rtx const_tiny_rtx[4][(int) MAX_MACHINE_MODE];