On 1/20/22 17:13, Robin Dapp wrote: > Hi, > > this patch splits the CCSmode into an integer and a floating point > variant. This allows ifcvt to consider floating point compares which > would be rejected before because they could not be reversed. > > Bootstrapped and regtested on s390x. > > Is it OK? > > Regards > Robin > > -- > > gcc/ChangeLog: > > * config/s390/predicates.md: Add CCSINTmode and CCSFPmode. > * config/s390/s390-modes.def (UNORDERED): Likewise. > (CC_MODE): Likewise. > * config/s390/s390.cc (s390_cc_modes_compatible): Likewise. > (s390_match_ccmode_set): Likewise. > (s390_select_ccmode): Likewise. > (s390_branch_condition_mask): Likewise. > (s390_reverse_condition): Likewise. > * config/s390/s390.h (REVERSIBLE_CC_MODE): Likewise. > * config/s390/s390.md: Likewise. > * config/s390/subst.md: Likewise.
> diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md > index 33194d3f3d6..ec47416cc1b 100644 > --- a/gcc/config/s390/predicates.md > +++ b/gcc/config/s390/predicates.md > @@ -325,7 +325,8 @@ > case E_CCURmode: > return GET_CODE (op) == LTU; > > - case E_CCSmode: > + case E_CCSINTmode: > + case E_CCSFPmode: > return GET_CODE (op) == UNGT; Can we get an UNGT for CCSINTmode here? Shouldn't this be just GT? > > case E_CCSRmode: > @@ -370,7 +371,8 @@ > case E_CCURmode: > return GET_CODE (op) == GEU; > > - case E_CCSmode: > + case E_CCSINTmode: > + case E_CCSFPmode: > return GET_CODE (op) == LE; > > case E_CCSRmode: > diff --git a/gcc/config/s390/s390-modes.def b/gcc/config/s390/s390-modes.def > index b419907960e..eafe1e12938 100644 > --- a/gcc/config/s390/s390-modes.def > +++ b/gcc/config/s390/s390-modes.def > @@ -48,12 +48,12 @@ CCUR: EQ GTU LTU NE > (CLGF/R) > > Signed compares > > -CCS: EQ LT GT UNORDERED (LTGFR, LTGR, LTR, > ICM/Y, > - LTDBR, LTDR, LTEBR, > LTER, > +CCSINT: EQ LT GT UNORDERED (LTGFR, LTGR, LTR, > ICM/Y, CC3 for signed integer compares should not occur. So perhaps '-' instead of UNORDERED? > CG/R, C/R/Y, CGHI, > CHI, > - CDB/R, CD/R, CEB/R, > CE/R, > - ADB/R, AEB/R, SDB/R, > SEB/R, > SRAG, SRA, SRDA) > +CCSFP: EQ LT GT UNORDERED (CDB/R, CD/R, CEB/R, > CE/R, > + LTDBR, LTDR, LTEBR, > LTER, > + ADB/R, AEB/R, SDB/R, > SEB/R) > CCSR: EQ GT LT UNORDERED (CGF/R, CH/Y) > CCSFPS: EQ LT GT UNORDERED (KEB/R, KDB/R, KXBR, > KDTR, > KXTR, WFK) ... > @@ -2139,7 +2148,8 @@ s390_branch_condition_mask (rtx code) > } > break; > > - case E_CCSmode: > + case E_CCSINTmode: > + case E_CCSFPmode: > case E_CCSFPSmode: > switch (GET_CODE (code)) > { We will need a new switch statement for CCSINT without all the FP only comparison operators. Andreas