[Bug tree-optimization/105165] ICE in gimple_redirect_edge_and_branch, at tree-cfg.cc:6136

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Apr 6 10:43:12 GMT 2022


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
           Assignee|rguenth at gcc dot gnu.org         |unassigned at gcc dot gnu.org
                 CC|                            |rguenth at gcc dot gnu.org,
                   |                            |vmakarov at gcc dot gnu.org

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's complex lowering not being able to deal with the _Complex definition in
the
asm goto.  Why do we allow asm gotos to have outputs?

__complex__ unsigned int foo (__complex__ unsigned int a1, __complex__ unsigned
int a2)
{
  __complex__ unsigned int x;
  __complex__ unsigned int _1;
  __complex__ unsigned int _2;
  __complex__ unsigned int _9;

  <bb 2> [local count: 1073741824]:
  __asm__ goto("" : "=r" x_4 :  :  : "lab" lab);

  <bb 3> [local count: 536870913]:
  a0 = x_4;

  <bb 4> [local count: 1073741824]:
lab:
  _1 = x_4 + a1_7(D);
  _2 = _1 + a2_8(D);
  _9 = _2 + __complex__ (1, 0);
  return _9;

complex lowering isn't prepared for this.  The only thing it could do is
emit a copy on each edge and adjust SSA form accordingly but in the end
that would be expensive.  That said, the "proper" lowering would possibly
rewrite the asm in-place to sth like

  asm goto ("" : "=rR" (x$real), "=rR" (x$imag) : : : lab);


Again - why are outputs allowed for asm goto?  Can we at least disallow
complex typed outputs?


More information about the Gcc-bugs mailing list