[Bug target/53988] New: [SH] tst Rm,Rn not used for QI/HImode
olegendo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 17 00:02:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53988
Bug #: 53988
Summary: [SH] tst Rm,Rn not used for QI/HImode
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: olegendo@gcc.gnu.org
Target: sh*-*-*
The following functions:
int test_00 (unsigned char* a, unsigned char* b, int c, int d)
{
if (*a & *b)
return c;
return d;
}
int test_01 (char* a, char* b, int c, int d)
{
if (*a & *b)
return c;
return d;
}
get compiled to:
mov.b @r4,r1 ! 10 *extendqisi2_compact_snd
mov.b @r5,r0 ! 11 *extendqisi2_compact_snd
and r1,r0 ! 12 *andsi_compact/4
tst #255,r0 ! 15 tstqi_t_zero
bf .L9 ! 16 branch_false
mov r7,r6 ! 7 movsi_ie/2
.L9:
rts ! 49 *return_i
mov r6,r0 ! 24 movsi_ie/2
which should actually result in:
mov.b @r4,r1
mov.b @r5,r2
tst r1,r2
bf .L9
mov r7,r6
.L9:
rts
mov r6,r0
The same happens for QImode and HImode.
More information about the Gcc-bugs
mailing list