On Mon, Dec 5, 2022 at 4:08 AM HAO CHEN GUI <guih...@linux.ibm.com> wrote: > > Hi, > It gets an assertion failure when targers don't support cbranchcc4 or > predicate check fails in prepare_cmp_insn. prepare_cmp_insn is a help > function to generate compare rtx, so it should not assume that cbranchcc4 > is existing or all sub-CC modes are supported on one target. I think it > should return the NULL rtx when cbranchcc4 is not supported or predicate check > fails, as its callers already check if the return value is null or not for CC > mode. This patch just does the change. > > Bootstrapped and tested on powerpc64-linux BE/LE and x86 with no > regressions. > Is this okay for trunk? Any recommendations? Thanks a lot.
I wonder if you have a testcase you can add showing this change is worthwhile and fixes a bug? OK. Thanks, Richard. > > ChangeLog > 2022-12-05 Haochen Gui <guih...@linux.ibm.com> > > gcc/ > * optabs.cc (prepare_cmp_insn): Return a NULL rtx other than assertion > failure when targets don't have cbranch optab or predicate check > fails. > > patch.diff > diff --git a/gcc/optabs.cc b/gcc/optabs.cc > index 165f8d1fa22..f6d3242479b 100644 > --- a/gcc/optabs.cc > +++ b/gcc/optabs.cc > @@ -4484,10 +4484,14 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx_code > comparison, rtx size, > { > enum insn_code icode = optab_handler (cbranch_optab, CCmode); > test = gen_rtx_fmt_ee (comparison, VOIDmode, x, y); > - gcc_assert (icode != CODE_FOR_nothing > - && insn_operand_matches (icode, 0, test)); > - *ptest = test; > - return; > + if (icode != CODE_FOR_nothing > + && insn_operand_matches (icode, 0, test)) > + { > + *ptest = test; > + return; > + } > + else > + goto fail; > } > > mclass = GET_MODE_CLASS (mode);