[Bug target/57536] New: Inconsistent behavior of strlen inline and unroll
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jun 5 18:42:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57536
Bug ID: 57536
Summary: Inconsistent behavior of strlen inline and unroll
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: uros at gcc dot gnu.org
Target: i386
There is
/* X86_TUNE_UNROLL_STRLEN */
m_486 | m_PENT | m_PPRO | m_ATOM | m_CORE_ALL | m_K6 | m_AMD_MULTIPLE |
m_GENERIC,
ix86_expand_strlen has
if (TARGET_UNROLL_STRLEN && eoschar == const0_rtx && optimize > 1
&& !TARGET_INLINE_ALL_STRINGOPS
&& !optimize_insn_for_size_p ()
&& (!CONST_INT_P (align) || INTVAL (align) < 4))
return false;
The decision depends on both TARGET_UNROLL_STRLEN and
TARGET_INLINE_ALL_STRINGOPS. If both TARGET_UNROLL_STRLEN
and TARGET_INLINE_ALL_STRINGOPS are false, strlen is
inlined:
[hjl@gnu-6 gcc]$ cat x.i
int strlen (const char *);
int
foo (const char *s)
{
return strlen (s);
}
[hjl@gnu-6 gcc]$ gcc -S -m32 -O2 x.i -mno-inline-all-stringops -mtune=i386
[hjl@gnu-6 gcc]$ cat x.s
.file "x.i"
.text
.p2align 2,,3
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
pushl %edi
.cfi_def_cfa_offset 8
.cfi_offset 7, -8
movl 8(%esp), %edi
xorl %eax, %eax
movl $-1, %ecx
repnz scasb
notl %ecx
leal -1(%ecx), %eax
popl %edi
.cfi_restore 7
.cfi_def_cfa_offset 4
ret
[hjl@gnu-6 gcc]$ gcc -S -m32 -O2 x.i -mno-inline-all-stringops -mtune=i486
[hjl@gnu-6 gcc]$ cat x.s
.file "x.i"
.text
.p2align 4,,15
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
jmp strlen
More information about the Gcc-bugs
mailing list