• [^] # Re: Kernel 2.6.3 dans les bacs

    Posté par . En réponse à la dépêche Noyau 2.6.3 dans les bacs. Évalué à 1.

    Le changelog est ici:
    http://gcc.gnu.org/gcc-3.4/changes.html(...)
    et en gros il dit:
    Caveats

    * GNU Make is now required to build GCC.
    * With -nostdinc the preprocessor used to ignore both standard include paths and include paths contained in environment variables. It was neither documented nor intended that environment variable paths be ignored, so this has been corrected.
    * GCC no longer accepts the options -fvolatile, -fvolatile-global and -fvolatile-static. It is unlikely that they worked correctly in any 3.x release.
    * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
    * Support for all the systems obsoleted in GCC 3.3 has been removed from GCC 3.4. See below for a list of systems which are obsoleted in this release.
    * GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C compilers will not work.
    * The implementation of the MIPS ABIs has changed. As a result, the code generated for certain MIPS targets will not be binary compatible with earlier releases.
    * The implementation of the SPARC ABIs has changed. As a result, the code generated will not be binary compatible with earlier releases in certain cases.
    * The configure option --enable-threads=pthreads has been removed; use --enable-threads=posix instead, which should have the same effect.
    * Code size estimates used by inlining heuristics for C, Objective-C, C++ and Java have been redesigned significantly. As a result the parameters of -finline-insns, --param max-inline-insns-single and --param max-inline-insns-auto need to be reconsidered.
    * --param max-inline-slope and --param min-inline-insns have been removed; they are not needed for the new bottom-up inlining heuristics.
    * The new unit-at-a-time compilation scheme has several compatibility issues:
    o The order in which functions, variables, and top-level asm statements are emitted may have changed. Code relying on some particular ordering needs to be updated. The majority of such top-level asm statements can be replaced by section attributes.
    o Unreferenced static variables and functions are removed. This may result in undefined references when an asm statement refers to the variable/function directly. In that case either the variable/function shall be listed in asm statement operand or in the case of top-level asm statements the attribute used shall be used to force function/variable to be always output and considered as a possibly used by unknown code.

    For variables the attribute is accepted only by GCC 3.4 and newer, while for earlier versions it is sufficient to use unused to silence warnings about the variables not being referenced. To keep code portable across different GCC versions, you can use appropriate preprocessor conditionals.
    o Static functions now can use non-standard passing conventions that may break asm statements calling functions directly. Again the attribute used shall be used to prevent this behavior.
    As a temporary workaround, -fno-unit-at-a-time can be used, but this scheme may not be supported by future releases of GCC.

    General Optimizer Improvements

    * Usability of the profile feedback and coverage testing has been improved.
    o Performance of profiled programs has been improved by faster profile merging code.
    o Better use of the profile feedback for optimization (loop unrolling and loop peeling).
    o File locking support allowing fork() calls and parallel runs of profiled programs.
    o Coverage file format has been redesigned.
    o gcov coverage tool has been improved.
    o make profiledbootstrap available to build a faster compiler.

    Experiments made on i386 hardware showed an 11% speedup on -O0 and a 7.5% speedup on -O2 compilation of a large C++ testcase.
    o New value profiling pass enabled via -fprofile-values
    o New value profile transformations pass enabled via -fvpt aims to optimize some code sequences by exploiting knowledge about value ranges or other properties of the operands. At the moment a conversion of expensive divisions into cheaper operations has been implemented.
    o New -fprofile-generate and -fprofile-use command line options to simplify the use of profile feedback.
    * A new unit-at-a-time compilation scheme for C, Objective-C, C++ and Java which is enabled via -funit-at-a-time (and implied by -O2). In this scheme a whole file is parsed first and optimized later. The following basic inter-procedural optimizations are implemented:
    o Removal of unreachable functions and variables
    o Discovery of local functions (functions with static linkage whose address is never taken)
    o On i386, these local functions use register parameter passing conventions.
    o Reordering of functions in topological order of the call graph to enable better propagation of optimizing hints (such as the stack alignments needed by functions) in the back end.
    o Call graph based out-of-order inlining heuristics which allows to limit overall compilation unit growth (--param inline-unit-growth).
    Overall, the unit-at-a-time scheme produces a 1.3% improvement for the SPECint2000 benchmark on the i386 architecture (AMD Athlon CPU).
    * More realistic code size estimates used by inlining for C, Objective-C, C++ and Java. The growth of large functions can now be limited via --param large-function-insns and --param large-function-growth.
    * A new cfg-level loop optimizer pass replaces the old loop unrolling pass and adds two other loop transformations -- loop peeling and loop unswitching -- and also uses the profile feedback to limit code growth. (The three optimizations are enabled by -funroll-loops, -fpeel-loops and -funswitch-loops flags, respectively).

    The old loop unroller still can be enabled by -fold-unroll-loops and may produce better code in some cases, especially when the webizer optimization pass is not run.
    * A new web construction pass enabled via -fweb (and implied by -O3) improves the quality of register allocation, CSE, first scheduling pass and some other optimization passes by avoiding re-use of pseudo registers with non-overlapping live ranges. The pass almost always improves code quality but does make debugging difficult and thus is not enabled by default by -O2

    The pass is especially effective as cleanup after code duplication passes, such as the loop unroller or the tracer.
    * Experimental implementations of superblock or trace scheduling in the second scheduling pass can be enabled via -fsched2-use-superblocks and -fsched2-use-traces, respectively.