It appears that the *arm_extendqisi pattern never match anything for reasons I can't find. This means that on ARMv4 and ARMv5, this code:
int foo(signed char *x) { return *x; } produces: ldrb r0, [r0, #4] mov r0, r0, asl #24 mov r0, r0, asr #24 mov pc, lr instead of the expected: ldrsb r0, [r0, #4] mov pc, lr -- Summary: *arm_extendqisi appears to never be matched Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: target AssignedTo: rearnsha at arm dot com ReportedBy: nico at cam dot org CC: gcc-bugs at gcc dot gnu dot org GCC target triplet: arm-unknown-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20010