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:
parent
15d4fd9863
commit
712b7a052f
@ -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
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user