[Bug rtl-optimization/71793] Volatile local variable passed by value is (wrongly?) optimised away, but the containing loop is not
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jul 7 10:21:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71793
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-07-07
Component|c++ |rtl-optimization
Ever confirmed|0 |1
Known to fail| |5.4.0, 6.1.0
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
As y is not used stores to it are eliminated in main(). I can confirm that
RTL optimizers somehow remove the volatile load from x from the inline copy
of g() which is because RTL expansion expands x as register copy for some
reason.
;; x.11_3 ={v} x;
(insn 19 18 0 (set (reg:QI 87 [ x.11_3 ])
(mem/v/c:QI (plus:DI (reg/f:DI 82 virtual-stack-vars)
(const_int -2 [0xfffffffffffffffe])) [0 x+0 S1 A16])) t.C:36 -1
(nil))
;; x ={v} x.11_3;
(insn 20 19 0 (set (reg/v:QI 94 [ x ])
(reg:QI 87 [ x.11_3 ])) -1
(nil))
;; Generating RTL for gimple basic block 5
;; x.7_10 ={v} x;
(insn 22 21 0 (set (reg:QI 90 [ x.7_10 ])
(reg/v:QI 94 [ x ])) t.C:18 -1
(nil))
;; ivtmp_36 = ivtmp_22 + 18446744073709551615;
(insn 23 22 0 (parallel [
(set (reg:DI 92 [ ivtmp_22 ])
(plus:DI (reg:DI 92 [ ivtmp_22 ])
(const_int -1 [0xffffffffffffffff])))
(clobber (reg:CC 17 flags))
]) -1
(nil))
More information about the Gcc-bugs
mailing list