https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105158

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
            Summary|ftree-ccp drops DWARF const |ftree-ccp (CFG cleanup)
                   |value attribute at          |drops DWARF const value
                   |-Og/-O1/-O2/-O3             |attribute at
                   |                            |-Og/-O1/-O2/-O3
           Severity|normal                      |enhancement
   Last reconfirmed|                            |2022-04-05

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is that the definition we put the debug stmt into is in

<bb 2> :
[t.c:4:5] # DEBUG BEGIN_STMT
[t.c:4:16] # DEBUG l_174 => 0
[t.c:4:27] # DEBUG l_188 => 0
[t.c:4:38] # DEBUG l_191 => 0
[t.c:4:49] # DEBUG l_240 => 1
[t.c:5:5] # DEBUG BEGIN_STMT
[t.c:6:5] # DEBUG BEGIN_STMT
[t.c:6:20] # DEBUG l_169 => 0
[t.c:6:25] if (0 != 0)
  goto <bb 3>; [INV]
else
  goto <bb 5>; [INV]

<bb 5> :

<bb 6> :
[t.c:6:11] # DEBUG l_171 => 0
[t.c:7:5] # DEBUG BEGIN_STMT
[t.c:7:5] goto <bb 8>; [INV]

<bb 8> :
# l_169_3 = PHI <[t.c:6:20] 0(6), [t.c:7:30] l_169_19(7)>
# DEBUG l_169 => l_169_3
[t.c:7:18] # DEBUG BEGIN_STMT
[t.c:7:18] if (l_169_3 <= 9)
  goto <bb 7>; [INV]
else
  goto <bb 9>; [INV]

and when CFG cleanup merges all the forwarders it finds no location to
put the debug stmt to - it tries to move the debug stmts to the
successor but that doesn't have a single predecessor so that's not a
valid thing to do.  Moving to the predecessor would be valid if that
has a single successor though but that's not implemented.  In this
case the predecessor is block 2 at the point in question and it has
a single successor plus the last stmt in it doesn't end the BB.

Reply via email to