This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Patch to add builtin strcat/strncat/strspn/strcspn
- To: jakub at redhat dot com
- Subject: Re: Patch to add builtin strcat/strncat/strspn/strcspn
- From: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>
- Date: Thu, 30 Nov 2000 08:51:53 -0500 (EST)
- Cc: gcc-patches at gcc dot gnu dot org
> From: Jakub Jelinek <jakub@redhat.com>
>
> strcpsn (s1, "a") could be also transformed into strlenM insn if the targets
> have it (the pattern can have non-zero eoschar).
Okay thanks. I'd like that to be handled separately.
> > +static rtx
> > +expand_builtin_strcat (arglist, target, mode)
> ...
> > + tree dst = TREE_VALUE (arglist),
> > + src = TREE_VALUE (TREE_CHAIN (arglist)),
> > + slen = c_strlen (src);
> > +
> > + /* If the string length is zero, return the dst parameter. */
> > + if (slen && compare_tree_int (slen, 0) == 0)
>
> Either you should check here for TREE_CODE (slen) == INTEGER_CST, or
> alternatively use p = c_getstr (src) instead of c_strlen and check for
> p[0] == '\0'.
>
> > +static rtx
> > +expand_builtin_strncat (arglist, target, mode)
> ...
> > + slen = c_strlen (src),
> > + fn = built_in_decls[BUILT_IN_STRCAT];
> > +
> > + /* If the requested length is zero, or the src parameter string
> > + length is zero, return the dst parameter. */
> > + if ((TREE_CODE (len) == INTEGER_CST && compare_tree_int (len, 0) == 0)
> > + || (slen && compare_tree_int (slen, 0) == 0))
>
> Likewise.
Ok, I'll fix that.
> IMHO the following two expand_exprs are not necessary, if TREE_CODE (len)
> and TREE_CODE (slen) are INTEGER_CSTs, how can they have side-effects?
>
> > + expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
> > + expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
> > + return expand_expr (dst, target, mode, EXPAND_NORMAL);
> Jakub
The if condition is ||, not &&. So either parameter (but not
necessarily both) could be INTEGER_CST. E.g.:
If (strlen(src) == 0 || len == 0)
{
expand both
return dst
}
That way, if either one happens to NOT be constant (we don't care
which) it'll do the right thing WRT side effects.
--Kaveh
--
Kaveh R. Ghazi Engagement Manager / Project Services
ghazi@caip.rutgers.edu Qwest Internet Solutions