This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/24209] New: strange instruction selected for an annuled slot on sparc
- From: "dann at godzilla dot ics dot uci dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 5 Oct 2005 05:12:37 -0000
- Subject: [Bug rtl-optimization/24209] New: strange instruction selected for an annuled slot on sparc
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
4.1 selects a strange instruction to put in the delay slot of a bl,a
instruction because in the non-taken case the same instruction will be executed
anyway...
-O2 code for 4.1
PointToRowCol:
save %sp, -112, %sp
sethi %hi(term), %g1
ld [%g1+%lo(term)], %l2
add %l2, 136, %l1
ld [%l1+572], %l3
ld [%l1+772], %l0
sub %i0, %l3, %o0
call .div, 0
ld [%l0+20], %o1
sethi %hi(firstValidRow), %g1
ld [%g1+%lo(firstValidRow)], %i0
cmp %o0, %i0
bl,a .LL118
ldsb [%l2+1823], %g1 ;; this instruction
sethi %hi(lastValidRow), %g1
ld [%g1+%lo(lastValidRow)], %g1
cmp %o0, %g1
bg .LL116
mov %o0, %i0
.LL105:
ldsb [%l2+1823], %g1 ;; this will be executed on the
;; non-taken path
.LL118:
cmp %g1, 0
bne .LL110
mov 0, %o0
ld [%l0+32], %o0
.LL110:
add %o0, %l3, %o0
ld [%l0+16], %o1
call .div, 0
sub %i1, %o0, %o0
cmp %o0, 0
bl .LL113
mov 0, %g2
ld [%l1+888], %g1
add %g1, 1, %g1
cmp %o0, %g1
bg .LL117
mov %o0, %g2
.LL113:
st %i0, [%i2]
st %g2, [%i3]
jmp %i7+8
restore
.LL117:
st %i0, [%i2]
mov %g1, %g2
st %g2, [%i3]
jmp %i7+8
restore
.LL116:
b .LL105
mov %g1, %i0
The 4.0 code is:
PointToRowCol:
save %sp, -112, %sp
sethi %hi(term), %g1
ld [%g1+%lo(term)], %l2
add %l2, 136, %l1
ld [%l1+572], %l3
sub %i0, %l3, %o0
ld [%l1+772], %i0
call .div, 0
ld [%i0+20], %o1
sethi %hi(firstValidRow), %g1
ld [%g1+%lo(firstValidRow)], %g1
cmp %o0, %g1
bl .LL42
mov %o0, %l0
sethi %hi(lastValidRow), %g1
ld [%g1+%lo(lastValidRow)], %g1
cmp %o0, %g1
bg,a .LL32
mov %g1, %l0
.LL32:
ldsb [%l2+1823], %g1
cmp %g1, 0
bne .LL36
mov 0, %o0
ld [%i0+32], %o0
.LL36:
add %o0, %l3, %o0
ld [%i0+16], %o1
call .div, 0
sub %i1, %o0, %o0
cmp %o0, 0
bl,a .LL43
st %l0, [%i2]
ld [%l1+888], %g1
add %g1, 1, %g1
cmp %o0, %g1
bg,a .LL39
mov %g1, %o0
.LL39:
st %l0, [%i2]
st %o0, [%i3]
jmp %i7+8
restore
.LL42:
b .LL32
mov %g1, %l0
.LL43:
mov 0, %o0
st %o0, [%i3]
jmp %i7+8
(the 4.0 code a few bytes smaller)
I'll attach the preprocessed code.
--
Summary: strange instruction selected for an annuled slot on
sparc
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dann at godzilla dot ics dot uci dot edu
GCC target triplet: sparc-sun-solaris2.8
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24209