On Nov 26, 2013, at 3:58 AM, Richard Sandiford <rsand...@linux.vnet.ibm.com> wrote: > Mike Stump <mikest...@comcast.net> writes: >> On Nov 25, 2013, at 12:03 PM, David Edelsohn <dje....@gmail.com> wrote: >>> 3) altivec_resolve_overloaded_builtin, both hunks should be converted >>> the same way, using tree_fits_uhwi_p >>> >>> - && TREE_CODE (arg2) == INTEGER_CST >>> - && TREE_INT_CST_HIGH (arg2) == 0 >>> - && (TREE_INT_CST_LOW (arg2) == 0 || TREE_INT_CST_LOW (arg2) == 1)) >>> + && tree_fits_uhwi_p (arg2) >>> + && wi::ltu_p (arg2, 2)) >> >> Index: gcc/config/rs6000/rs6000-c.c >> =================================================================== >> --- gcc/config/rs6000/rs6000-c.c (revision 205364) >> +++ gcc/config/rs6000/rs6000-c.c (working copy) >> @@ -4208,7 +4208,7 @@ altivec_resolve_overloaded_builtin (loca >> /* If we can use the VSX xxpermdi instruction, use that for extract. >> */ >> mode = TYPE_MODE (arg1_type); >> if ((mode == V2DFmode || mode == V2DImode) && VECTOR_MEM_VSX_P (mode) >> - && TREE_CODE (arg2) == INTEGER_CST >> + && tree_fits_uhwi_p (arg2) >> && wi::ltu_p (arg2, 2)) >> { >> tree call = NULL_TREE; > > Hmm, I think the original was correct here, since there's no reason to rely > on HWIness for an unsigned comparison with 2. It also ought to be more > efficient. > > I'd rather change the other case to have an INTEGER_CST test too.
I agree, here is what I'm including to David for review… Thanks. Index: gcc/config/rs6000/rs6000-c.c =================================================================== --- gcc/config/rs6000/rs6000-c.c (revision 205414) +++ gcc/config/rs6000/rs6000-c.c (working copy) @@ -4208,7 +4208,7 @@ altivec_resolve_overloaded_builtin (loca /* If we can use the VSX xxpermdi instruction, use that for extract. */ mode = TYPE_MODE (arg1_type); if ((mode == V2DFmode || mode == V2DImode) && VECTOR_MEM_VSX_P (mode) - && tree_fits_uhwi_p (arg2) + && TREE_CODE (arg2) == INTEGER_CST && wi::ltu_p (arg2, 2)) { tree call = NULL_TREE; @@ -4293,7 +4293,7 @@ altivec_resolve_overloaded_builtin (loca /* If we can use the VSX xxpermdi instruction, use that for insert. */ mode = TYPE_MODE (arg1_type); if ((mode == V2DFmode || mode == V2DImode) && VECTOR_UNIT_VSX_P (mode) - && tree_fits_uhwi_p (arg2) + && TREE_CODE (arg2) == INTEGER_CST && wi::ltu_p (arg2, 2)) { tree call = NULL_TREE;