[Bug target/83768] New: ARM: wrong optimization
sorganov at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jan 10 15:00:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83768
Bug ID: 83768
Summary: ARM: wrong optimization
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: sorganov at gmail dot com
Target Milestone: ---
GCC 5.4.0 optimizes the following code to empty function, when in fact the code
does clear 'count' bytes starting from 'buf' (it looks strange as it's a
simplified version of real code). Note that GCC 6.3.0 produces correct code for
the case.
$ cat clean.c
void clean(unsigned char* buf, int count)
{
int linear = 0;
do {
count -= linear;
while(linear--)
*buf++ = 0;
linear = count;
} while(linear > 0);
}
Could you please tell if/when this has been already fixed in 5.4.x versions,
and is there any particular optimization I can turn off as a work-around for
GCC 5.4.0?
$ /opt/arm-linux-5.4/bin/arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=/opt/arm-linux-5.4/bin/arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-linux-5.4/libexec/gcc/arm-linux-gnueabi/5.4.0/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/gcc-5.4.0/configure --prefix=/opt/arm-linux-5.4
--target=arm-linux-gnueabi --disable-multilib --disable-nls --enable-shared
--enable-threads --enable-tls --disable-decimal-float --disable-libmudflap
--disable-libquadmath --disable-libsanitizer --disable-libssp
--disable-multilib --with-float=hard --with-gnu-as --with-gnu-ld
--without-cloog --without-isl
--with-sysroot=/opt/arm-linux-5.4/arm-linux-gnueabi/sysroot
--enable-languages=c,c++ --enable-__cxa_atexit --enable-static --enable-shared
--enable-threads --enable-long-long --disable-lto --disable-libgomp
Thread model: posix
gcc version 5.4.0 (GCC)
$ /opt/arm-linux-5.4/bin/arm-linux-gnueabi-gcc -O2 -c clean.c -o clean.o
-save-temps && cat clean.s
.cpu arm10tdmi
.eabi_attribute 28, 1
.fpu vfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 2
.eabi_attribute 34, 0
.eabi_attribute 18, 4
.arm
.syntax divided
.file "clean.c"
.text
.align 2
.global clean
.type clean, %function
clean:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
bx lr
.size clean, .-clean
.ident "GCC: (GNU) 5.4.0"
.section .note.GNU-stack,"",%progbits
$
More information about the Gcc-bugs
mailing list