[Bug middle-end/107385] [asm goto] "=r" vs "+r" for outputs along indirect edges

pinskia at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Oct 24 18:59:17 GMT 2022


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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2022-10-24

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Expand is doing:

(insn 3 24 9 6 (set (reg/v:SI 82 [ <retval> ])
        (const_int 6 [0x6])) "/app/example.cpp":4:7 -1
     (nil))
(insn 9 3 14 6 (set (reg/v:SI 82 [ <retval> ])
        (reg:SI 83 [ x ])) "/app/example.cpp":3:5 -1
     (nil))


>From this IR:
  <bb 2> [local count: 1073741824]:
  __asm__ goto("//" : "=r" x_2 :  :  : "bar" <L3>);
  goto <bb 4>; [35.00%]

  <bb 3> [local count: 697932184]:
<L3>:

  <bb 4> [local count: 1073741824]:
  # x_1 = PHI <x_2(3), 6(2)>
bar:

Note 6 does not need to be a constant here, it could be anything.
I suspect when the inline-asm goto is being expanded, it adds the assignment to
reg 82 on all edges going out of the inline-asm but then messing up because
there is some extra code due to the phi node.


More information about the Gcc-bugs mailing list