[Bug tree-optimization/33291] a+=2; a+=2 not simplified to a+=4; with -O3 (ok with gcc-4.2.1)
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Sep 3 12:02:00 GMT 2007
------- Comment #2 from rguenth at gcc dot gnu dot org 2007-09-03 12:01 -------
The problem is that forwprop doesn't propagate addr_exprs to memory reference
stmts in early optimization anymore (due to the volatile issues) and
value numbering cannot deal with the different (but same) load/store addresses:
D.2605_34 = &this_2(D)->D.2527;
# VUSE <tab_57, SMT.9_59, SMT.11_63>
D.2606_35 = this_2(D)->D.2527.a;
...
# tab_77 = VDEF <tab_57>
# SMT.11_78 = VDEF <SMT.11_63>
D.2605_34->a = D.2609_38;
(also aliasing computes different answers here, for whatever reason). With
scheduling an extra forwprop pass before FRE the second _load_ of a is
eliminated, but DSE still cannot figure the dead store:
# VUSE <tab_57, SMT.9_59, SMT.11_63>
D.2606_35 = this_2(D)->D.2527.a;
D.2607_36 = (unsigned int) D.2606_35;
D.2608_37 = D.2607_36 + 2;
D.2609_38 = (int) D.2608_37;
# tab_77 = VDEF <tab_57>
# SMT.9_93 = VDEF <SMT.9_59>
# SMT.11_78 = VDEF <SMT.11_63>
this_2(D)->D.2527.a = D.2609_38;
D.2612_41 = (unsigned int) D.2609_38;
D.2613_42 = D.2612_41 + 2;
D.2614_43 = (int) D.2613_42;
# tab_79 = VDEF <tab_77>
# SMT.9_94 = VDEF <SMT.9_93>
# SMT.11_80 = VDEF <SMT.11_78>
this_2(D)->D.2527.a = D.2614_43;
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rguenth at gcc dot gnu dot
| |org
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Keywords| |alias, missed-optimization
Last reconfirmed|0000-00-00 00:00:00 |2007-09-03 12:01:47
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33291
More information about the Gcc-bugs
mailing list