[Bug tree-optimization/45256] Missed arithmetic simplification at tree level
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256 --- Comment #4 from Andrew Pinski --- With IVOPTs we get: # ivtmp.13_97 = PHI _34 = MEM[(const __be32 *)_28 + -4B + ivtmp.13_97 * 4]; _36 = MEM[(const __be32 *)_27 + -4B + ivtmp.13_97 * 4]; if (_34 != _36) goto ; [5.50%] else goto ; [94.50%] [local count: 217424209]: _22 = (int) ivtmp.13_97; _40 = _22 * 32; xb_37 = _34 ^ _36; iftmp.1_53 = __fswab32 (xb_37); __asm__("clz %0, %1" : "=r" ret_54 : "r" iftmp.1_53 : "cc"); ret_56 = 32 - ret_54; _57 = _40 - ret_56; MEM[(struct ipv6_saddr_score *) + 32B].matchlen = _57; if (_57 != 0) goto ; [0.00%] else goto ; [100.00%] So there is no extra add one any more. BUT with -fno-ivopts I still see the add one.
[Bug tree-optimization/45256] Missed arithmetic simplification at tree level
--- Comment #2 from ibolton at gcc dot gnu dot org 2010-09-07 13:05 --- (In reply to comment #1) Created an attachment (id=21454) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21454action=view) [edit] Testcase OK. I can see this happening on trunk, when compiled as follows: arm-none-linux-gnueabi/obj/gcc3/gcc/cc1 -O2 pr45256.i -fdump-tree-all -fdump-rtl-all. The 148t.optimized dump shows exactly what has been posted above, where effectively 32 is both added and then subtracted. The 183r.dce dump still shows this extra work happening and the 184r.combine dump shows that it has been optimised away. It should be possible to do this optimisation at the tree-level, so this bug is confirmed. Should I check whether this happens for 4.4 and 4.5 too? -- ibolton at gcc dot gnu dot org changed: What|Removed |Added Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords||missed-optimization Known to fail||4.6.0 Last reconfirmed|-00-00 00:00:00 |2010-09-07 13:05:49 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256
[Bug tree-optimization/45256] Missed arithmetic simplification at tree level
--- Comment #3 from pinskia at gcc dot gnu dot org 2010-09-07 18:41 --- ret_59 = (i_53 + 1) * 32 - (32 - ret_56) So this looks like a re-association issue. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256
[Bug tree-optimization/45256] Missed arithmetic simplification at tree level
--- Comment #1 from bernds at gcc dot gnu dot org 2010-08-11 15:19 --- Created an attachment (id=21454) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21454action=view) Testcase -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256