[Bug testsuite/80416] FAIL: g++.dg/torture/pr79671.C -O2 execution test

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 13 10:57:00 GMT 2017


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.


More information about the Gcc-bugs mailing list