Hi, GCC currently doesn't bootstrap on s390x. The problem is that gengtype is miscompiled and I suspect the fre - sccvn changes to be the culprit.
When sccvn performs the depth-first search for uses it might reach global variable definitions. If the global variable is initialized with a value that value is taken as constant and used to replace uses of that variable. e.g.: int global = 1; int foo (int a) { return a != global; } int main () { global = 3; if (foo (3)) abort (); } becomes (compiled with -O1): foo (a) { int global.0; int D.1626; <bb 2>: global.0_1 = 1; D.1626_3 = a_2(D) != global.0_1; return D.1626_3; } ... The example works fine when removing the initialization of global. Bye, -Andreas- Here is the complete fre output: ;; Function foo (foo) SCC consists of: global_5(D) Value numbering global_5(D) stmt = (void) 0; Setting value number of global_5(D) to global_5(D) SCC consists of: a_2(D) Value numbering a_2(D) stmt = (void) 0; Setting value number of a_2(D) to a_2(D) SCC consists of: global.0_1 Value numbering global.0_1 stmt = global.0_1 = global; RHS global simplified to 1 has constants 0 Setting value number of global.0_1 to 1 SCC consists of: D.1626_3 Value numbering D.1626_3 stmt = D.1626_3 = a_2(D) != global.0_1; Setting value number of D.1626_3 to D.1626_3 Value numbers: global.0_1 = 1 Created value VH.0 for a_2(D) SCCVN says global.0_1 value numbers to 1 Created value VH.1 for D.1626_3 Created value VH.2 for <retval>_4 exp_gen[0] := { } tmp_gen[0] := { } avail_out[0] := { a_2(D) (VH.0) } exp_gen[2] := { } tmp_gen[2] := { <retval>_4 (VH.2) } avail_out[2] := { a_2(D) (VH.0) , D.1626_3 (VH.1) , <retval>_4 (VH.2) } exp_gen[1] := { } tmp_gen[1] := { } avail_out[1] := { } Replaced global with 1 in global.0_1 = global; foo (a) { int global.0; int D.1626; <bb 2>: global.0_1 = 1; D.1626_3 = a_2(D) != global.0_1; return D.1626_3; } ;; Function main (main) SCC consists of: global_2(D) Value numbering global_2(D) stmt = (void) 0; Setting value number of global_2(D) to global_2(D) SCC consists of: global_3 Value numbering global_3 stmt = global = 3; No store match Value numbering store global to 3 Setting value number of global_3 to global_3 SCC consists of: D.1630_1 Value numbering D.1630_1 stmt = D.1630_1 = foo (3); Setting value number of D.1630_1 to D.1630_1 Value numbers: Created value VH.3 for D.1630_1 exp_gen[0] := { } tmp_gen[0] := { } avail_out[0] := { } exp_gen[2] := { } tmp_gen[2] := { } avail_out[2] := { D.1630_1 (VH.3) } exp_gen[3] := { } tmp_gen[3] := { } avail_out[3] := { D.1630_1 (VH.3) } exp_gen[4] := { } tmp_gen[4] := { } avail_out[4] := { D.1630_1 (VH.3) } exp_gen[1] := { } tmp_gen[1] := { } avail_out[1] := { } main () { int D.1630; <bb 2>: global = 3; D.1630_1 = foo (3); if (D.1630_1 != 0) goto <bb 3>; else goto <bb 4>; <bb 3>: abort (); <bb 4>: return; }