https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80416
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-04-13 Component|rtl-optimization |testsuite Ever confirmed|0 |1 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- What DSE1 does is ok. After DSE1 we have (insn 11 2 13 2 (set (mem/j/c:SI (reg/f:DI 328 sfp) [0 y+0 S4 A128]) (const_int 0 [0])) "/space/rguenther/src/svn/gcc-7-branch/gcc/testsuite/g++.dg/torture/pr79671.C":14 5 {movsi_internal} (nil)) (insn 13 11 14 2 (set (reg:DI 347 [ q ]) (asm_operands/v:DI ("") ("=r") 0 [ (reg/f:DI 328 sfp) ] [ (asm_input:DI ("r") /space/rguenther/src/svn/gcc-7-branch/gcc/testsuite/g++.dg/torture/pr79671.C:16) ] [] /space/rguenther/src/svn/gcc-7-branch/gcc/testsuite/g++.dg/torture/pr79671.C:16)) "/space/rguenther/src/svn/gcc-7-branch/gcc/testsuite/g++.dg/torture/pr79671.C":16 -1 (nil)) (insn 14 13 18 2 (set (reg:SI 341 [ <retval> ]) (mem:SI (reg:DI 347 [ q ]) [2 q_3->i+0 S4 A32])) "/space/rguenther/src/svn/gcc-7-branch/gcc/testsuite/g++.dg/torture/pr79671.C":17 5 {movsi_internal} (expr_list:REG_DEAD (reg:DI 347 [ q ]) (nil))) (insn 18 14 19 2 (set (reg/i:SI 8 r8) (reg:SI 341 [ <retval> ])) "/space/rguenther/src/svn/gcc-7-branch/gcc/testsuite/g++.dg/torture/pr79671.C":18 5 {movsi_internal} (expr_list:REG_DEAD (reg:SI 341 [ <retval> ]) (nil))) but RA breaks it. I think asm volatile ("" : "=r" (q) : "r" (q)); in the testcase is bogus. asm volatile ("" : "+r" (q) : "r" (q)); works. The idea of the asm is to do nothing but allocate both input and output to the same register... I probably failed to express this.