Hi Jeff, Jakub Change related to simplify-rtx, could you please take a look?
Thank You, Kishan On 17/09/26 12:05 pm, Kishan Parmar wrote: > Hello All, > > Changes from V1: > - Fix comment for aop<mode>3 expander. > > Below patch is bootstrapped and regtested on powerpc64le-linux with no > regressions. > > Commit r17-3977-gfb21f1686938d6 introduced aop_optab (any_or_plus) to > allow backends control over choices of PLUS vs. IOR during expansion. > However, this caused a code-generation regression on rs6000 where > bitfield stores (like those in testcase gcc.target/powerpc/20050603-3.c) > were expanded using PLUS instead of logical IOR, preventing optimization > into rlwimi. Additionally, this commit introduced an ICE on bootstrap > during the cse1 pass after adding aop<mode>3 expander in rs6000.md > because simplify-rtx was missing case label for the new AOP RTX code. > > This patch resolves both issues by: > 1) Defining the direct aop<mode>3 expander for rs6000 to always emit > logical IOR, restoring the expected code-generation and fixing the > regression. > 2) Adding the case label for AOP in simplify_binary_operation_1 to > safely prevent the compiler crash. > > No new testcase is added since the existing testcase > gcc.target/powerpc/20050603-3.c will work for this. > > 2026-09-17 Kishan Parmar <[email protected]> > > gcc/ChangeLog: > PR target/127399 > * config/rs6000/rs6000.md (aop<mode>3): New define_expand to specify > logical IOR for any_or_plus (AOP) operations on SDI modes. > * simplify-rtx.cc (simplify_binary_operation_1): Add case AOP to > safely handle and simplify the new AOP RTX binary code. > --- > gcc/config/rs6000/rs6000.md | 12 ++++++++++++ > gcc/simplify-rtx.cc | 5 +++++ > 2 files changed, 17 insertions(+) > > diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md > index ddfed3b63bc..ed672b6da02 100644 > --- a/gcc/config/rs6000/rs6000.md > +++ b/gcc/config/rs6000/rs6000.md > @@ -4047,6 +4047,18 @@ > operands[2] = force_reg (<MODE>mode, operands[2]); > }) > > +;; aop (any_or_plus). Use IOR on PowerPC. > +(define_expand "aop<mode>3" > + [(set (match_operand:SDI 0 "gpc_reg_operand") > + (ior:SDI (match_operand:SDI 1 "gpc_reg_operand") > + (match_operand:SDI 2 "reg_or_cint_operand")))] > + "" > + { > + emit_insn (gen_ior<mode>3 (operands[0], operands[1], operands[2])); > + DONE; > + } > +) > + > (define_split > [(set (match_operand:GPR 0 "gpc_reg_operand") > (iorxor:GPR (match_operand:GPR 1 "gpc_reg_operand") > diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc > index 38c8abfe3e7..c248fbe7253 100644 > --- a/gcc/simplify-rtx.cc > +++ b/gcc/simplify-rtx.cc > @@ -5629,6 +5629,11 @@ simplify_ashift: > } > return 0; > > + case AOP: > + if (trueop1 == CONST0_RTX (mode)) > + return op0; > + return 0; > + > default: > gcc_unreachable (); > }
