Ping. Thanks, Kyrill
2013-08-14 Kyrylo Tkachov <kyrylo.tkac...@arm.com> PR tree-optimization/58088 * fold-const.c (mask_with_trailing_zeros): New function. (fold_binary_loc): Make sure we don't recurse infinitely when the X in (X & C1) | C2 is a tree of the form (Y * K1) & K2. Use mask_with_trailing_zeros where appropriate. 2013-08-14 Kyrylo Tkachov <kyrylo.tkac...@arm.com> PR tree-optimization/58088 * gcc.c-torture/compile/pr58088.c: New test. > -----Original Message----- > From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches- > ow...@gcc.gnu.org] On Behalf Of Kyrylo Tkachov > Sent: 07 August 2013 14:22 > To: gcc-patches > Cc: 'Richard Biener'; pola...@redhat.com > Subject: [PATCH][tree-optimization] Fix PR58088 > > Hi all, > > In PR58088 the constant folder goes into an infinite recursion and runs > out of > stack space because of two conflicting optimisations: > (X * C1) & C2 plays dirty when nested inside an IOR expression like so: > ((X * > C1) & C2) | C4. One can undo the other leading to an infinite recursion. > > Thanks to Marek for finding the IOR case. > > This patch fixes that by checking in the IOR case that the change to C2 > will > not conflict with the AND case transformation. Example testcases in the > PR on > bugzilla. > > This issue is present in 4.8.1 as well as trunk. However, I think 4.8 > uses a > different API for double_int, so this patch will need to be reworked for > 4.8. > > In the meantime, > Ok for trunk? > > Bootstrapped on x86_64-linux-gnu and tested arm-none-eabi on qemu. > > > Thanks, > Kyrill > > 2013-08-07 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > * gcc/fold-const.c (mask_with_trailing_zeros): New function. > (fold_binary_loc): Make sure we don't recurse infinitely > when the X in (X & C1) | C2 is a tree of the form (Y * K1) & K2. > Use mask_with_trailing_zeros where appropriate. > > > 2013-08-07 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > * gcc.c-torture/compile/pr58088.c: New test.