"Kewen.Lin" <li...@linux.ibm.com> writes: > 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 Thanks! Yes, only 'dest' is ok. > >> + 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. :) Yeap, thanks for your careful review!
BR, Jeff(Jiufu) > > BR, > Kewen