[Bug middle-end/78809] New: Inline strcmp with small constant strings
wilco at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Dec 14 14:10:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78809
Bug ID: 78809
Summary: Inline strcmp with small constant strings
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: wilco at gcc dot gnu.org
Target Milestone: ---
GCC currently doesn't optimize str(n)cmp of small constant strings (besides the
empty string). Such cases can be inlined to avoid the overhead of calling
strcmp - benchmarking shows that this is ~2-3x faster. GLIBC does this
optimization for strings up to size 3 in the headers, however it is better to
implement this in GCC.
int t1(const char *s) { return __builtin_strcmp (s, "a"); }
int t2(const char *s) { return strcmp (s, "a"); }
Currently generates for AArch64 with -O2:
t1:
adrp x1, .LC2
add x1, x1, :lo12:.LC2
b strcmp
t2:
ldrb w2, [x0]
mov w1, 97
subs w1, w1, w2
bne .L17
ldrb w1, [x0, 1]
neg w1, w1
.L17:
neg w0, w1
ret
GCC should be able to generate:
t2:
ldrb w2, [x0]
subs w1, w2, 97
bne .L17
ldrb w1, [x0, 1]
.L17:
ret
More information about the Gcc-bugs
mailing list