Summary: | &a[b] - &a[c] is not folded to b - c | ||
---|---|---|---|
Product: | gcc | Reporter: | Andrew Pinski <pinskia> |
Component: | middle-end | Assignee: | Richard Biener <rguenth> |
Status: | RESOLVED FIXED | ||
Severity: | enhancement | CC: | gcc-bugs |
Priority: | P2 | Keywords: | missed-optimization, patch, TREE |
Version: | 4.1.0 | ||
Target Milestone: | 4.1.0 | ||
URL: | http://gcc.gnu.org/ml/gcc-patches/2005-04/msg02499.html | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: | 2005-04-23 21:05:50 | |
Bug Depends on: | |||
Bug Blocks: | 19986, 19987, 19807 |
Description
Andrew Pinski
2005-04-18 03:06:10 UTC
This should improve mgrid and IV selection. The code in comment #0 should produce no multiply/divides/shifts but does currently (again with the C++ front-end). Take the following code: typedef __SIZE_TYPE__ size_t; size_t a[100]; size_t f(size_t b, size_t c) { return (&a[b] - &a[c])*sizeof(*a); } We get the good code but only after combine so this blocks both the generic one and the RTL based missed fold optimizators and we can add the TREE keyword too for the above testcase. Yup, the dumps from the c++ front end is: ;; Function size_t f(size_t, size_t) (_Z1fjj) size_t f(size_t, size_t) (b, c) { <bb 0>: return (size_t) (((int) &a[b] - (int) &a[c]) /[ex] 4); } and the C front-end dump is: ;; Function f (f) f (b, c) { <bb 0>: return (size_t) (b - c); } Zdenek was complaining about this in: <http://gcc.gnu.org/ml/gcc-patches/2005-04/msg02411.html>. Subject: Bug 21082 CVSROOT: /cvs/gcc Module name: gcc Changes by: rguenth@gcc.gnu.org 2005-04-23 21:34:42 Modified files: gcc : ChangeLog fold-const.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/tree-ssa: pr21082.C Log message: 2005-04-23 Richard Guenther <rguenth@gcc.gnu.org> PR middle-end/21082 * fold-const.c: Fold &a[i]-&a[j] to i-j. * g++.dg/tree-ssa/pr21082.C: New testcase. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.8430&r2=2.8431 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fold-const.c.diff?cvsroot=gcc&r1=1.569&r2=1.570 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.5388&r2=1.5389 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/tree-ssa/pr21082.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 Fixed. |