Hi! > + > + /* Use paddi for the low 32 bits. */ > + if (ud2 != 0 && ud1 != 0 && can_use_paddi) > + emit_move_insn (dest, gen_rtx_PLUS (DImode, dest, > + GEN_INT ((ud2 << 16) | ud1))); > + > + /* Use oris, ori for low 32 bits. */ > + if (ud2 != 0 && (ud1 == 0 || !can_use_paddi)) > + emit_move_insn (ud1 != 0 ? dest : dest,
Nit: "ud1 != 0 ? dest : dest" => dest > + gen_rtx_IOR (DImode, dest, GEN_INT (ud2 << 16))); > + if (ud1 != 0 && (ud2 == 0 || !can_use_paddi)) > + emit_move_insn (dest, gen_rtx_IOR (DImode, dest, GEN_INT (ud1))); > + } > + } > else > { > temp = !can_create_pseudo_p () ? dest : gen_reg_rtx (DImode); > diff --git a/gcc/testsuite/gcc.target/powerpc/pr106550.c > b/gcc/testsuite/gcc.target/powerpc/pr106550.c > new file mode 100644 > index 00000000000..d023fac4676 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr106550.c > @@ -0,0 +1,14 @@ > +/* PR target/106550 */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10" } */ > +/* { dg-require-effective-target power10_ok } */ > + > +void > +foo (unsigned long long *a) > +{ > + *a++ = 0x020805006106003; /* pli+pli+rldimi */ > + *a++ = 0x2351847027482577;/* pli+pli+rldimi */ > +} > + > +/* { dg-final { scan-assembler-times {\mpli\M} 4 } } */ > +/* { dg-final { scan-assembler-times {\mrldimi\M} 2 } } */ > + > diff --git a/gcc/testsuite/gcc.target/powerpc/pr106550_1.c > b/gcc/testsuite/gcc.target/powerpc/pr106550_1.c > new file mode 100644 > index 00000000000..48f76ca3da9 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr106550_1.c > @@ -0,0 +1,22 @@ > +/* PR target/106550 */ > +/* { dg-require-effective-target power10_ok } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -fdisable-rtl-split1" } */ > +/* force the constant splitter run after RA: -fdisable-rtl-split1. */ > + > +void > +foo (unsigned long long *a) > +{ > + /* Test oris/ori is used where paddi does not work with 'r0'. */ > + register long long d asm("r0") = 0x1245abcef9240dec; /* pli+sldi+oris+ori > */ > + long long n; > + asm("cntlzd %0, %1" : "=r"(n) : "r"(d)); > + *a++ = n; > + > + *a++ = 0x235a8470a7480000ULL; /* pli+sldi+oris*/ > + *a++ = 0x23a184700000b677ULL; /* pli+sldi+ori*/ Nit: I guess you want one space at the separated end of these two comment lines since the comment lines at the other places have. :) BR, Kewen