builtins.c (expand_builtin_strlen): Evaluate the lengths of string literals at compile-time.

* builtins.c (expand_builtin_strlen):  Evaluate the lengths of
	string literals at compile-time.

From-SVN: r65585
This commit is contained in:
Roger Sayle 2003-04-14 20:23:27 +00:00 committed by Roger Sayle
parent 15d4fd9863
commit 712b7a052f
2 changed files with 14 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2003-04-14 Roger Sayle <roger@eyesopen.com>
* builtins.c (expand_builtin_strlen): Evaluate the lengths of
string literals at compile-time.
2003-04-14 Roger Sayle <roger@eyesopen.com> 2003-04-14 Roger Sayle <roger@eyesopen.com>
* fold-const.c (fold): Transform (c1 - x) cmp c2, where cmp is a * fold-const.c (fold): Transform (c1 - x) cmp c2, where cmp is a

View File

@ -1935,14 +1935,18 @@ expand_builtin_strlen (exp, target)
else else
{ {
rtx pat; rtx pat;
tree src = TREE_VALUE (arglist); tree len, src = TREE_VALUE (arglist);
int align
= get_pointer_alignment (src, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
rtx result, src_reg, char_rtx, before_strlen; rtx result, src_reg, char_rtx, before_strlen;
enum machine_mode insn_mode = value_mode, char_mode; enum machine_mode insn_mode = value_mode, char_mode;
enum insn_code icode = CODE_FOR_nothing; enum insn_code icode = CODE_FOR_nothing;
int align;
/* If the length can be computed at compile-time, return it. */
len = c_strlen (src);
if (len)
return expand_expr (len, target, value_mode, EXPAND_NORMAL);
align = get_pointer_alignment (src, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
/* If SRC is not a pointer type, don't do this operation inline. */ /* If SRC is not a pointer type, don't do this operation inline. */
if (align == 0) if (align == 0)