[size] Replace memset by memclr when 2nd parameter is zero
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro GCC |
Confirmed
|
Undecided
|
Unassigned |
Bug Description
When 2nd parameter of memcpy is zero, GCC can replace it by memclr. Code size can be reduced.
/* Test case mem.c*/
#include <string.h>
void foo1(int* array, int length)
{
memset (array, 0, length);
}
void foo2(int* array, int length)
{
memclr (array, length);
}
$arm-none-
foo1:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
mov r2, r1
movs r1, #0
b memset
foo2:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
b memclr
tags: | added: size task |
Changed in gcc-linaro: | |
status: | New → Confirmed |
The test is a bit contrived, but it's still probably worthwhile to make the load #0 common.
I can't find any function called memclr - do you mean bzero?