On Thu, Nov 14, 2019 at 05:40:10PM -0500, Michael Meissner wrote: > --- gcc/config/rs6000/rs6000.c (revision 278173) > +++ gcc/config/rs6000/rs6000.c (working copy) > @@ -5552,7 +5552,7 @@ static int > num_insns_constant_gpr (HOST_WIDE_INT value) > { > /* signed constant loadable with addi */ > - if (((unsigned HOST_WIDE_INT) value + 0x8000) < 0x10000) > + if (SIGNED_16BIT_OFFSET_P (value)) > return 1;
Hrm, so the SIGNED_nBIT_OFFSET_P should not be called "offset", if we use them for other numbers as well. > -;; GPR store GPR load GPR move GPR li GPR lis GPR # > -;; FPR store FPR load FPR move AVX store AVX store AVX > load > -;; AVX load VSX move P9 0 P9 -1 AVX 0/-1 VSX 0 > -;; VSX -1 P9 const AVX const From SPR To SPR > SPR<->SPR > -;; VSX->GPR GPR->VSX > +;; GPR store GPR load GPR move GPR li GPR lis GPR > pli > +;; GPR # FPR store FPR load FPR move AVX store AVX > store > +;; AVX load AVX load VSX move P9 0 P9 -1 AVX > 0/-1 > +;; VSX 0 VSX -1 P9 const AVX const From SPR To > SPR > +;; SPR<->SPR VSX->GPR GPR->VSX I cannot make heads or tails of it this way. Please just add the "pli", don't rearrange everything else. There do not have to be exactly six per line. The only reason to have some order here is to make it easier to read, not to make it *harder*! So for this first line let's have three GPR moves, and then have four load immediates. Then in the future if we need to edit it again, make the edited part make some sense, etc. > ; Some DImode loads are best done as a load of -1 followed by a mask > -; instruction. > +; instruction. On systems that support the PADDI (PLI) instruction, > +; num_insns_constant returns 1, so these splitter would not be used for > things > +; that be loaded with PLI. That comment doesn't add much at all? This splitter isn't used for constants we can load in one insn, that's right. That happily works just fine if we have prefixed insns as well. Okay for trunk with those things fixed. Thanks! Segher