This is the mail archive of the
`gcc@gcc.gnu.org`
mailing list for the GCC project.

Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|

Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |

Other format: | [Raw text] |

*From*: Richard Biener <rguenther at suse dot de>*To*: Andrew Pinski <pinskia at gmail dot com>*Cc*: GCC Mailing List <gcc at gcc dot gnu dot org>*Date*: Fri, 07 Nov 2014 08:24:42 +0100*Subject*: Re: Match-and-simplify and COND_EXPR*Authentication-results*: sourceware.org; auth=none*References*: <CA+=Sn1=ZrkDn8FS-5qFvh-ndF2isFD9xBQmE_gLvA6qAVmE02w at mail dot gmail dot com> <alpine dot LSU dot 2 dot 11 dot 1411061126240 dot 27850 at zhemvz dot fhfr dot qr> <alpine dot LSU dot 2 dot 11 dot 1411061138230 dot 27850 at zhemvz dot fhfr dot qr> <CA+=Sn1=3tTc54x87WFQM3+GZeUF9UK35zbWVdY2ymcfqNEMC6A at mail dot gmail dot com>

On November 7, 2014 5:03:19 AM CET, Andrew Pinski <pinskia@gmail.com> wrote: >On Thu, Nov 6, 2014 at 2:40 AM, Richard Biener <rguenther@suse.de> >wrote: >> On Thu, 6 Nov 2014, Richard Biener wrote: >> >>> On Wed, 5 Nov 2014, Andrew Pinski wrote: >>> >>> > Hi, >>> > I was trying to hook up tree-ssa-phiopt to match-and-simplify >using >>> > either gimple_build (or rather using gimple_simplify depending on >if >>> > we want to produce cond_expr for conditional move). I ran into a >>> > problem. >>> > With the pattern below: >>> > /* a ? 0 : 1 -> a if 0 and 1 are integral types. */ >>> > (simplify >>> > (cond_expr @0 integer_zerop integer_onep) >>> > (if (INTEGRAL_TYPE_P (type)) >>> > (convert @0))) >>> >>> Ok, so you are capturing a GENERIC expr here but nothing knows that. >>> It would work if you'd do (ugh) >>> >>> (for op (lt le eq ne ge gt) >>> (simplify >>> (cond_expr (op @0 @1) integer_zerop integer_onep) >>> (if (INTEGRAL_TYPE_P (type)) >>> (convert (op @0 @1))))) >>> (simplify >>> (cond_expr SSA_NAME@0 integer_zerop integer_onep) >>> (if (INTEGRAL_TYPE_P (type)) >>> (convert @0)))) >>> >>> as a workaround. To make your version work will require (quite) >>> some special-casing in the code generator or maybe the resimplify >>> helper. Let me see if I can cook up a "simple" fix. >> >> Sth like below (for the real fix this has to be replicated in >> all gimple_resimplifyN functions). I'm missing a testcase >> where the pattern would apply (and not be already folded by fold), >> so I didn't check if it actually works. > >You do need to check if seq is NULL though as gimple_build depends on >seq not being NULL. But otherwise yes this works for me. > >> >> Bah, of course we should fix COND_EXPRs to not embed a GENERIC >> expr... > >Yes totally agree. For my changes to tree-ssa-phiopt, I no longer >embed it. Though we need to change loop ifconvert still. Istr expansion or code quality does not like us to cse the condition of two cobd_exprs either. After all I had a patch set at some point doing that conversion (though as well for gimple_conds). Richard. >Thanks, >Andrew > >> >> Richard. >> >> Index: gcc/gimple-match-head.c >> =================================================================== >> --- gcc/gimple-match-head.c (revision 217035) >> +++ gcc/gimple-match-head.c (working copy) >> @@ -90,6 +90,13 @@ gimple_resimplify1 (gimple_seq *seq, >> code_helper *res_code, tree type, tree *res_ops, >> tree (*valueize)(tree)) >> { >> + /* ??? Stupid tcc_comparison GENERIC trees in COND_EXPRs. */ >> + if (COMPARISON_CLASS_P (res_ops[0])) >> + res_ops[0] = gimple_build (seq, >> + TREE_CODE (res_ops[0]), TREE_TYPE >(res_ops[0]), >> + TREE_OPERAND (res_ops[0], 0), >> + TREE_OPERAND (res_ops[0], 1)); >> + >> if (constant_for_folding (res_ops[0])) >> { >> tree tem = NULL_TREE; >>

**Follow-Ups**:**Re: Match-and-simplify and COND_EXPR***From:*pinskia

**References**:**Match-and-simplify and COND_EXPR***From:*Andrew Pinski

**Re: Match-and-simplify and COND_EXPR***From:*Richard Biener

**Re: Match-and-simplify and COND_EXPR***From:*Richard Biener

**Re: Match-and-simplify and COND_EXPR***From:*Andrew Pinski

Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|

Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |