[Bug tree-optimization/17549] [4.0 Regression] 10% increase in codesize with C code compared to GCC 3.3
steven at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Thu Feb 10 01:53:00 GMT 2005
------- Additional Comments From steven at gcc dot gnu dot org 2005-02-09 23:35 -------
The entire diff of .optimized dumps and .s output for twolf on AMD64 is really
small, in fact the asm output is different for only one file:
config1.c.t65.optimized | 120
++++++++++++++++++++++++++++++----------------
configure.c.t65.optimized | 78 +++++++++++++++++++----------
outpins.c.t65.optimized | 6 +-
outpins.s | 36 ++++++-------
qsorte.c.t65.optimized | 3 -
qsortg.c.t65.optimized | 3 -
qsortgdx.c.t65.optimized | 3 -
qsortx.c.t65.optimized | 3 -
readcell.c.t65.optimized | 3 -
readseg.c.t65.optimized | 6 +-
ucgxp.c.t65.optimized | 3 -
uloop.c.t65.optimized | 6 +-
12 files changed, 174 insertions(+), 96 deletions(-)
The file with the assembler difference is outpins.c. The relevant diff is
below. There is nothing in the diff that explains the ~4% slowdown I see in
my SPEC benchmarks (3 runs, so the slowdown is consistent). The same
instructions are there, just ordered differently and using different
registers. So I'm not sure how to proceed...
diff -u base/outpins.c.t65.optimized hacked/outpins.c.t65.optimized
--- base/outpins.c.t65.optimized 2005-02-10 00:19:20.950581229 +0100
+++ patched/outpins.c.t65.optimized 2005-02-10 00:16:19.436444879 +0100
@@ -99,8 +99,9 @@
pairArray.39 = pairArray;
carray.40 = carray;
D.3698 = *((struct cellbox * *) ((long unsigned int) *(*((int * *) D.3712 +
pairArray.39 - 8B) + 4B) * 8) + carray.40);
+ end.81 = D.3698->cxcenter + (int) D.3698->tileptr->left;
temp.59 = *(carray.40 + (struct cellbox * *) ((long unsigned int)
*(*(pairArray.39 + (int * *) D.3712) + 4B) * 8));
- end = MAX_EXPR <D.3698->cxcenter + (int) D.3698->tileptr->left,
temp.59->cxcenter + (int) temp.59->tileptr->left>;
+ end = MAX_EXPR <end.81, temp.59->cxcenter + (int) temp.59->tileptr->left>;
<L4>:;
return end;
@@ -228,9 +229,10 @@
D.3668 = *((int * *) D.3664 + pairArray.36 - 8B);
carray.37 = carray;
D.3646 = *((struct cellbox * *) ((long unsigned int) *(D.3668 + (int *)
((long unsigned int) *D.3668 * 4)) * 8) + carray.37);
+ end.121 = D.3646->cxcenter + (int) D.3646->tileptr->right;
D.3676 = *(pairArray.36 + (int * *) D.3664);
temp.99 = *(carray.37 + (struct cellbox * *) ((long unsigned int) *(D.3676
+ (int *) ((long unsigned int) *D.3676 * 4)) * 8));
- end = MIN_EXPR <D.3646->cxcenter + (int) D.3646->tileptr->right,
temp.99->cxcenter + (int) temp.99->tileptr->right>;
+ end = MIN_EXPR <end.121, temp.99->cxcenter + (int)
temp.99->tileptr->right>;
<L4>:;
return end;
diff -u base/outpins.s hacked/outpins.s
--- base/outpins.s 2005-02-10 00:19:21.064543028 +0100
+++ patched/outpins.s 2005-02-10 00:16:19.551406289 +0100
@@ -18,18 +18,18 @@
movq -8(%rdx,%rcx), %rax
movslq 4(%rax),%rax
movq (%rsi,%rax,8), %rdi
+ movq 40(%rdi), %rax
+ movswl (%rax),%r8d
movq (%rcx,%rdx), %rax
+ addl 12(%rdi), %r8d
movslq 4(%rax),%rax
movq (%rsi,%rax,8), %rdx
- movq 40(%rdi), %rax
- movswl (%rax),%ecx
movq 40(%rdx), %rax
- addl 12(%rdi), %ecx
movswl (%rax),%eax
addl 12(%rdx), %eax
- cmpl %eax, %ecx
- cmovl %eax, %ecx
- movl %ecx, %eax
+ cmpl %eax, %r8d
+ cmovl %eax, %r8d
+ movl %r8d, %eax
ret
.p2align 4,,7
.L11:
@@ -40,9 +40,9 @@
movq carray(%rip), %rax
movq (%rax,%rdx,8), %rdx
movq 40(%rdx), %rax
- movswl (%rax),%ecx
- addl 12(%rdx), %ecx
- movl %ecx, %eax
+ movswl (%rax),%r8d
+ addl 12(%rdx), %r8d
+ movl %r8d, %eax
ret
.p2align 4,,7
.L12:
@@ -72,18 +72,18 @@
movslq (%rcx),%rax
movslq (%rcx,%rax,4),%rax
movq (%rdi,%rax,8), %rcx
+ movq 40(%rcx), %rax
+ movswl 2(%rax),%r8d
movslq (%rdx),%rax
+ addl 12(%rcx), %r8d
movslq (%rdx,%rax,4),%rax
movq (%rdi,%rax,8), %rdx
- movq 40(%rcx), %rax
- movswl 2(%rax),%esi
movq 40(%rdx), %rax
- addl 12(%rcx), %esi
movswl 2(%rax),%eax
addl 12(%rdx), %eax
- cmpl %eax, %esi
- cmovg %eax, %esi
- movl %esi, %eax
+ cmpl %eax, %r8d
+ cmovg %eax, %r8d
+ movl %r8d, %eax
ret
.p2align 4,,7
.L22:
@@ -95,9 +95,9 @@
movq carray(%rip), %rax
movq (%rax,%rdx,8), %rdx
movq 40(%rdx), %rax
- movswl 2(%rax),%esi
- addl 12(%rdx), %esi
- movl %esi, %eax
+ movswl 2(%rax),%r8d
+ addl 12(%rdx), %r8d
+ movl %r8d, %eax
ret
.p2align 4,,7
.L23:
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17549
More information about the Gcc-bugs
mailing list