http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51244
--- Comment #59 from Laurent Aflonsi <laurent.alfonsi at st dot com> ---
I have a functional regression due to this improvement when we are compiling
the enclosed example in -O2.
$ sh-superh-elf-gcc -O2 pr51244-20-main.c pr51244-20.c
$ sh-superh-elf-run a.out
FAIL
Thus, the code is transformed from :
_get_request:
mov.l @(12,r4),r1
tst r1,r1
bt .L2
mov.l @(4,r4),r2
tst r2,r2
mov #-1,r2
negc r2,r2
.L3:
tst r2,r2
bt/s .L11
mov #-100,r0
mov #1,r2
[...]
to :
_get_request:
mov.l @(12,r4),r1
tst r1,r1
bt .L2
mov.l @(4,r4),r2
tst r2,r2
mov #-1,r2
negc r2,r2
.L3:
bf/s .L11
mov #-100,r0
mov #1,r2
[...]
With the inputs encoded in the main function, we are supposed to follow the
simpliest flow (no jump), but when this optimization is enabled, we are jumping
to L11 to to the bt -> bf transfrmation.
Could you please look at it ?
Thanks
Laurent