This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/68662] [6 regression] FAIL: gcc.dg/lto/20090210 c_lto_20090210_0.o-c_lto_20090210_1.o link, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68662

--- Comment #15 from Alan Modra <amodra at gcc dot gnu.org> ---
Author: amodra
Date: Thu May  5 00:07:27 2016
New Revision: 235914

URL: https://gcc.gnu.org/viewcvs?rev=235914&root=gcc&view=rev
Log:
[RS6000] TARGET_RELOCATABLE

For ABI_V4, -mrelocatable and -fPIC both generate position independent
code, with some extra "fixup" output for -mrelocatable.  The
similarity of these two options has led to the situation where the
sysv4.h SUBTARGET_OVERRIDE_OPTIONS sets flag_pic on seeing
-mrelocatable, and sets TARGET_RELOCATABLE on seeing -fPIC.  That
prevents LTO from properly optimizing position dependent executables,
because the mutual dependence of the flags and the fact that LTO
streaming records the state of rs6000_isa_flags, result in flag_pic
being set when it shouldn't be.

So, don't set TARGET_RELOCATABLE when -fPIC.  Places that currently
test TARGET_RELOCATABLE can instead test
TARGET_RELOCATABLE || (DEFAULT_ABI == ABI_V4 && flag_pic > 1)
or since TARGET_RELOCATABLE can only be enabled when ABI_V4,
DEFAULT_ABI == ABI_V4 && (TARGET_RELOCATABLE || flag_pic > 1).

Also, since flag_pic is set by -mrelocatable, a number of places that
currently test TARGET_RELOCATABLE can be simplified.  I also made
-mrelocatable set TARGET_NO_FP_IN_TOC, allowing TARGET_RELOCATABLE to
be removed from ASM_OUTPUT_SPECIAL_POOL_ENTRY_P.  Reducing occurrences
of TARGET_RELOCATABLE is a good thing.

        PR target/68662
        * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Don't
        set OPTION_MASK_RELOCATABLE when flag_pic == 2.  Set
        TARGET_NO_FP_IN_TOC for -mrelocatable.
        (MINIMAL_TOC_SECTION_ASM_OP): Remove redundant
        TARGET_RELOCATABLE test.
        (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
        (ASM_PREFERRED_EH_DATA_FORMAT): Likewise.
        * config/rs6000/linux64.h (MINIMAL_TOC_SECTION_ASM_OP): Likewise.
        (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
        (ASM_PREFERRED_EH_DATA_FORMAT): Likewise.
        * config/rs6000/freebsd64.h (MINIMAL_TOC_SECTION_ASM_OP): Likewise.
        (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
        (ASM_PREFERRED_EH_DATA_FORMAT): Likewise.
        * config/rs6000/predicates.md (easy_fp_constant): Likewise.
        * config/rs6000/rs6000.c (rs6000_elf_output_toc_section_asm_op):
        Likewise.
        (rs6000_assemble_integer): Update TARGET_RELOCATABLE test.
        (rs6000_stack_info): Likewise.
        (rs6000_elf_asm_out_constructor): Likewise.
        (rs6000_elf_asm_out_destructor): Likewise.
        (rs6000_elf_declare_function_name): Likewise.
        * config/rs6000/rs6000.md (load_toc_aix_di): Likewise.
        * config/rs6000/rs6000.h (MASK_RELOCATABLE, MASK_MINIMAL_TOC):
        Don't define.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/rs6000/freebsd64.h
    trunk/gcc/config/rs6000/linux64.h
    trunk/gcc/config/rs6000/predicates.md
    trunk/gcc/config/rs6000/rs6000.c
    trunk/gcc/config/rs6000/rs6000.h
    trunk/gcc/config/rs6000/rs6000.md
    trunk/gcc/config/rs6000/sysv4.h

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]