> On Jun 30, 2021, at 1:59 PM, Richard Biener <rguent...@suse.de> wrote: > > On June 30, 2021 8:07:43 PM GMT+02:00, Qing Zhao <qing.z...@oracle.com> wrote: >> >> >>> On Jun 30, 2021, at 12:36 PM, Richard Biener <rguent...@suse.de> >> wrote: >>> >>> On June 30, 2021 7:20:18 PM GMT+02:00, Andrew Pinski >> <pins...@gmail.com> wrote: >>>> On Wed, Jun 30, 2021 at 8:47 AM Qing Zhao via Gcc-patches >>>> <gcc-patches@gcc.gnu.org> wrote: >>>>> >>>>> I came up with a very simple testing case that can repeat the same >>>> issue: >>>>> >>>>> [qinzhao@localhost gcc]$ cat t.c >>>>> extern void bar (int); >>>>> void foo (int a) >>>>> { >>>>> int i; >>>>> for (i = 0; i < a; i++) { >>>>> if (__extension__({int size2; >>>>> size2 = 4; >>>>> size2 > 5;})) >>>>> bar (a); >>>>> } >>>>> } >>>> >>>> You should show the full dump, >>>> What we have is the following: >>>> >>>> >>>> >>>> size2_3 = PHI <size2_1(D), size2_13> >>>> <bb 3> : >>>> >>>> size2_12 = .DEFERRED_INIT (size2_3, 2); >>>> size2_13 = 4; >>>> >>>> So CCP decides to propagate 4 into the PHI and then decides >> size2_1(D) >>>> is undefined so size2_3 is then considered 4 and propagates it into >>>> the .DEFERRED_INIT. >>> >>> Which means the DEFERED_INIT is inserted at the wrong place. >> >> Then, where is the correct place for “.DEFERRED_INIT(size2,2)? >> >> The variable “size2” is a block scope variable which is declared inside >> the “if” condition: > > But that's obviously not how it behaves > During into SSA phase since we're inserting a PHI for it - and we're > inserting it because of the use in the DEFERED_INIT call. I suppose you need > to fiddle with the SSA rewrite and avoid treating the use as a use but only > for the purpose of inserting PHIs...
Please see my other email on the new small testing case without -ftrivial-auto-var-init. The same issue in SSA with that testing case even without -ftrivial-auto-var-init. It looks like an existing bug to me in SSA. Let me know if I still miss anything Qing > > You might be able to construct a testcase which has a use before the real > init where then the optimistic CCP propagation will defeat the DEFERED_INIT > otherwise. > > I'd need to play with the actual patch to find a good solution to this > problem. > > Richard. >