http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52898
Bug #: 52898 Summary: SH Target: Inefficient comparison of DImode and immediate constant Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: olege...@gcc.gnu.org Target: sh*-*-* The following ... int test (long long a) { return a == 40; } compiled with -O2, -O3, -Os: mov #0,r2 cmp/eq r2,r4 bf/s .L38 mov #40,r3 cmp/eq r3,r5 .L38: rts movt r0 would be better as: mov #40,r3 tst r4,r4 ! use tst to compare against zero bf .L38 ! use zero-displacement branch cmp/eq r3,r5 .L38: rts movt r0 Using built-in specs. COLLECT_GCC=sh-elf-gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/sh-elf/4.8.0/lto-wrapper Target: sh-elf Configured with: ../gcc-trunk/configure --target=sh-elf --prefix=/usr/local --enable-languages=c,c++ --enable-multilib --disable-libssp --disable-nls --disable-werror --enable-lto --with-newlib --with-gnu-as --with-gnu-ld --with-system-zlib Thread model: single gcc version 4.8.0 20120406 (experimental) (GCC)