This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/21803] New: [ia64] gcc produces really odd predicated code
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 May 2005 23:48:23 -0000
- Subject: [Bug target/21803] New: [ia64] gcc produces really odd predicated code
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following is reduced from a Gelato superblock scheduling test case
that produces similar interesting predicated code.
See http://gcc.gelato.org/SuperblockScheduling_2fInvestigation20050401
for the original.
$ cat t.c
extern void exit(int) __attribute__((noreturn));
char *inbuf, *outbuf;
int __attribute__((noreturn))
foo (text_len)
{
char c;
int i;
for (i = 0; i < text_len; i++)
{
c = inbuf[i];
if (c >= 'a' && c <= 'm')
c += 13;
else
c -= 13;
outbuf[i] = c;
}
exit (0);
}
$ ./cc1 -O2 t.c
$ cat t.s
.file "t.c"
.pred.safe_across_calls p1-p5,p16-p63
.text
.align 16
.global foo#
.proc foo#
foo:
.prologue 12, 33
.mmi
.save ar.pfs, r34
alloc r34 = ar.pfs, 1, 4, 1, 0
adds r14 = -1, r32
.save ar.lc, r36
mov r36 = ar.lc
.mmi
addl r18 = @ltoffx(inbuf#), r1
addl r17 = @ltoffx(outbuf#), r1
cmp4.ge p6, p7 = 0, r32
;;
.mmb
addp4 r14 = r14, r0
ld8.mov r18 = [r18], inbuf#
nop 0
.mmi
mov r16 = r0
ld8.mov r17 = [r17], outbuf#
.save rp, r33
mov r33 = b0
.body
.mib
nop 0
nop 0
(p6) br.cond.dpnt .L2
;;
.mii
nop 0
mov ar.lc = r14
nop 0
.L4:
.mmi
ld8 r14 = [r18]
;;
add r14 = r16, r14
nop 0
;;
.mmi
ld1 r14 = [r14]
;;
nop 0
sxt1 r14 = r14
;;
.mii
mov r15 = r14
adds r14 = -97, r14
;;
zxt1 r14 = r14
;;
.mmi
cmp4.ltu p6, p7 = 12, r14
;;
(p7) adds r14 = 13, r15
(p6) adds r14 = -13, r15
;;
.mii
nop 0
(p7) sxt1 r14 = r14
(p6) sxt1 r14 = r14
;;
.mmi
nop 0
(p7) mov r15 = r14
(p6) mov r15 = r14
.mmi
ld8 r14 = [r17]
;;
add r14 = r16, r14
adds r16 = 1, r16
;;
.mib
st1 [r14] = r15
nop 0
br.cloop.sptk.few .L4
.L2:
.mib
nop 0
mov r37 = r0
br.call.sptk.many b0 = exit#
;;
break.f 0
;;
.endp foo#
.common inbuf#,8,8
.common outbuf#,8,8
.ident "GCC: (GNU) 4.1.0 20050528 (experimental)"
Notice this incredibly charming predicated code in there:
.mmi
cmp4.ltu p6, p7 = 12, r14
;;
(p7) adds r14 = 13, r15
(p6) adds r14 = -13, r15
;;
.mii
nop 0
(p7) sxt1 r14 = r14
(p6) sxt1 r14 = r14
;;
.mmi
nop 0
(p7) mov r15 = r14
(p6) mov r15 = r14
--
Summary: [ia64] gcc produces really odd predicated code
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P2
Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: steven at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: ia64
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21803