This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/58742] New: pointer arithmetic simplification
- From: "glisse at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 15 Oct 2013 21:47:49 +0000
- Subject: [Bug tree-optimization/58742] New: pointer arithmetic simplification
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58742
Bug ID: 58742
Summary: pointer arithmetic simplification
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: glisse at gcc dot gnu.org
int* f(int*b,int*e){
return b+(e-b);
}
gives the following .optimized dump:
e.0_2 = (long int) e_1(D);
b.1_4 = (long int) b_3(D);
_5 = e.0_2 - b.1_4;
_6 = _5 /[ex] 4;
_7 = (long unsigned int) _6;
_8 = _7 * 4;
_9 = b_3(D) + _8;
return _9;
I believe the desired result is obvious enough...
At the asm level, this gives:
subq %rdi, %rsi
movq %rsi, %rax
andq $-4, %rax
addq %rdi, %rax
which seems to indicate that the exactness of the division was somehow lost
(otherwise the andq would disappear, and sub+add could then be simplified).