On 11/06/2014 08:44 AM, Zhenqiang Chen wrote: > Hi, > > The patch add runtime check to fix s390 build fail > (https://gcc.gnu.org/ml/gcc-patches/2014-11/msg00050.html). > > And there is additional code to workaround s390 cstorecc4 issue. > > Bootstrap and no make check regression on X86-64. > Build s390-linux-gnu and s390x-linux-gnu. > > I do not have env to run full s390 tests. Would anyone in the TO list help > to run the s390 tests? > > Thanks! > -Zhenqiang > > ChangeLog: > 2014-11-06 Zhenqiang Chen <zhenqiang.c...@arm.com> > > * ifcvt.c (noce_emit_cmove, noce_get_alt_condition, > noce_get_condition): > Allow CC mode if HAVE_cbranchcc4. > (noce_emit_store_flag): Change CC REG as cond_complex. > > diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c > index f4002f9..7f7b7c1 100644 > --- a/gcc/ifcvt.c > +++ b/gcc/ifcvt.c > @@ -849,7 +849,10 @@ noce_emit_store_flag (struct noce_if_info *if_info, rtx > x, int reversep, > enum rtx_code code; > > cond_complex = (! general_operand (XEXP (cond, 0), VOIDmode) > - || ! general_operand (XEXP (cond, 1), VOIDmode)); > + || ! general_operand (XEXP (cond, 1), VOIDmode) > + /* For s390, CC REG is general_operand. But cstorecc4 > only > + handles CCZ1, which can not handle others like CCU. > */ > + || GET_MODE_CLASS (GET_MODE (XEXP (cond, 0))) == MODE_CC); >
I'd like to know more about this. This seems like a mistake in the backend. > +#ifdef HAVE_cbranchcc4 > + if (GET_MODE_CLASS (GET_MODE (cmp_a)) != MODE_CC > + || cmp_b != const0_rtx > + || !(HAVE_cbranchcc4)) > +#endif Please add #ifndef HAVE_cbranchcc4 # define HAVE_cbranchcc4 #endif at the top of ifcvt.c along with all of the others. Then use normal C tests instead of preprocessor tests. > + int allow_cc_mode = false; > +#ifdef HAVE_cbranchcc4 > + allow_cc_mode = HAVE_cbranchcc4; > +#endif E.g. this becomes bool allow_cc_mode = HAVE_cbranchcc4; r~