[Bug target/63534] [5 Regression] Bootstrap failure on x86_64/i686-linux
evstupac at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Oct 21 16:21:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63534
--- Comment #33 from Stupachenko Evgeny <evstupac at gmail dot com> ---
Created attachment 33769
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33769&action=edit
patch includes 3 patches fixing darwin bootstrap
It looks like data constant LC0 generated from pushtf not treated as GOT
dependent or treated as unchanged (assuming it depends on unchanged ebx) at
darwin reload pass.
RELOAD PASS:
(insn/f 106 8 2 2 (parallel [
(set (reg:SI 0 ax [98])
(unspec:SI [
(const_int 0 [0])
] UNSPEC_SET_GOT))
(clobber (reg:CC 17 flags))
]) 679 {set_got}
(expr_list:REG_EQUIV (unspec:SI [
(const_int 0 [0])
] UNSPEC_SET_GOT)
(expr_list:REG_CFA_FLUSH_QUEUE (nil)
(nil))))
.....
For some reason on darwin AX is set here without spilling previous value.
On Linux AX is spilled and filled in appropriate place.
After that while reading LC0 on darwin we use incorrect GOT register.
(insn 115 41 116 6 (set (reg:SI 0 ax [128])
(plus:SI (reg:SI 0 ax [98])
(const:SI (unspec:SI [
(symbol_ref/u:SI ("*LC0") [flags 0x2])
] UNSPEC_MACHOPIC_OFFSET)))) frexpq.c:1319 213 {*leasi}
(expr_list:REG_EQUAL (symbol_ref/u:SI ("*LC0") [flags 0x2])
(nil)))
...
Do you have any ideas where darwin can treat the LC0 symbol so?
Please try attached patch (includes all fixes) moving pushtf split earlier. The
bootstrap (c,c++,fortran,lto) on MAC passed (patch applied on top of 216304).
More information about the Gcc-bugs
mailing list