http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57003



             Bug #: 57003

           Summary: gcc-4.8.0 breaks -O2 optimization with Wine(64) -

                    links/info/bisect of commits included

    Classification: Unclassified

           Product: gcc

           Version: unknown

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: triplesquaredn...@gmail.com





Hi,



myself and others have been trying to track down problems with compiling (and

using) wine64 with GCC-4.8.0. ~ Optimization level -O2 - which is usually the

default optimization level for building wine, breaks wine64. Obviously, with

gcc-4.7.2/3 -O2 works just fine. 



Here is the Wine bug report; http://bugs.winehq.org/show_bug.cgi?id=33307



Austin English (Wine-dev) ran a bisect on GCC to try to narrow down the

problems. here is his relevant post on that, regarding this bug report;



So the bad commit is:

commit c8010b803d34fa7e096747067e33c650b36ecc06

Author: bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>

Date:   Mon May 14 12:08:31 2012 +0000



        * attribs.c (decl_attributes): Avoid emitting a warning if

        ATTR_FLAG_BUILT_IN.

        * doc/rtl.texi (CALL_INSN_FUNCTION_USAGE): Use lowercase for rtx

        codes.  Document meaning of sets inside CALL_INSN_FUNCTION_USAGE.

        * c-family/c-common.c (DEF_ATTR_STRING): Define and undefine as

        necessary.

        * builtin-attrs.def (DEF_ATTR_FOR_STRING): Define.  Use it to

        define a string "1".

        (ATTR_RET1_NOTHROW_NONNULL_LEAF): New attr definition.

        * builtins.def (BUILT_IN_MEMCPY, BUILT_IN_MEMMOVE, BUILT_IN_MEMSET,

        BUILT_IN_STRCPY): Use it for these functions.

        * postreload.c (reload_combine): Deal with SETs inside

        CALL_INSN_FUNCTION_USAGE.

        * caller-save.c (setup_save_areas, save_call_clobbered_regs):

        Look for REG_RETURNED notes and use a cheap restore if possible.

        * ira-int.h (struct ira_allocno): New member cheap_calls_crossed_num.

        (ALLOCNO_CHEAP_CALLS_CROSSED_NUM): New macro.

        * ira-build.c (ira_create_allocno, create_cap_allocno,

        propagate_allocno_info, propagate_some_info_from_allocno,

        copy_info_to_removed_store_destination, ira_flattening): Handle it.

        * ira-lives.c (pseudo_regno_single_word_and_live_p,

        find_call_crossed_cheap_reg): New static functions.

        (process_bb_node_lives): Look for SETs in CALL_INSN_FUNCTION_USAGE,

        and set ALLOCNO_CHEAP_CALLS_CROSSED_NUM if possible.  Also make

        a REG_RETURNED note in that case.

        * ira.c (setup_reg_renumber): Change assert to allow cases where

        allocnos only cross calls for which they are cheap to restore.

        * ira-costs.c (ira_tune_allocno_costs): Compare

        ALLOCNO_CALLS_CROSSED_NUM to ALLOCNO_CHEAP_CALLS_CROSSED_NUM rather

        than 0.

        * reg-notes.def (REG_RETURNED): New note.

        * cse.c (cse_insn): Likewise.

        * sched-deps.c (sched_analyze_insn): Likewise.

        * expr.c (init_block_move_fn): Set a "fn spec" attribute.

        * calls.c (decl_return_flags): New static function.

        (expand_call): Generate a SET in CALL_INSN_FUNCTION_USAGE for

        functions that return one of their arguments.

        * lto/lto-lang.c (handle_fnspec_attribute): New static function.

        (lto_attribute_table): Add "fn spec".

        (DEF_ATTR_STRING): Define and undefine along with the other macros.

        * regcprop.c (struct kill_set_value_data): New.

        (kill_set_value): Interpret data as a pointer to such a struct.

        Do nothing if the caller wants the register to be ignored.

        (copyprop_hardreg_forward_1): Handle SETs in CALL_INSN_FUNCTION_USAGE.



    testsuite/

        * gcc.target/i386/retarg.c: New test.



    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187459

138bc75d-0d04-0410-961f-82ee72b054a4



after this commit, wine will fail to build (with default -O2 settings, gcc will

crash with an internal error). The compile itself is fixed by a later commit:

commit d73df2920c77116fd88e03cd95dd352f16511a3f

Author: bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>

Date:   Mon May 21 21:37:01 2012 +0000



        PR rtl-optimization/53373

        * caller-save.c (save_call_clobbered_regs): Look into a possible

        PARALLEL manually rather than using single_set on a call insn.

    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187745

138bc75d-0d04-0410-96



after this, wine will compile fine, but segfaults on launch.



A quick search on http://gcc.gnu.org/bugzilla/ doesn't show anything for that

commit. If someone else would file a bug upstream with this info, it would be

appreciated.

______



If i can provide any more info - please let me know, or even better ~ post the

the WineHQ bug report that i have linked to above ~ as Austin or possibly

another Wine-Developer may be able to help further.



thanks.



Jordan

Reply via email to