]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
7 years agoDaily bump.
GCC Administrator [Fri, 25 May 2018 00:16:14 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260700

7 years agoDaily bump.
GCC Administrator [Thu, 24 May 2018 00:16:11 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260630

7 years agoDaily bump.
GCC Administrator [Wed, 23 May 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260558

7 years agoDaily bump.
GCC Administrator [Tue, 22 May 2018 00:16:24 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260494

7 years agoDaily bump.
GCC Administrator [Mon, 21 May 2018 00:16:14 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260428

7 years agoDaily bump.
GCC Administrator [Sun, 20 May 2018 00:16:23 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260405

7 years agoDaily bump.
GCC Administrator [Sat, 19 May 2018 00:16:23 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260385

7 years agoDaily bump.
GCC Administrator [Fri, 18 May 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260344

7 years agore PR fortran/82814 (ICE from submodule character function)
Paul Thomas [Thu, 17 May 2018 15:31:42 +0000 (15:31 +0000)] 
re PR fortran/82814 (ICE from submodule character function)

2017-05-17  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82814
* gfortran.dg/submodule_31.f08: New test.

From-SVN: r260325

7 years agoCheck is_single_const in intersect_with_plats
Martin Jambor [Thu, 17 May 2018 12:18:06 +0000 (14:18 +0200)] 
Check is_single_const in intersect_with_plats

2018-05-17  Martin Jambor  <mjambor@suse.cz>

Backport from mainline
2018-05-11  Martin Jambor  <mjambor@suse.cz>

PR ipa/85655
* ipa-cp.c (intersect_with_plats): Check that the lattice contains
single const.

From-SVN: r260319

7 years agoDaily bump.
GCC Administrator [Thu, 17 May 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260301

7 years agore PR fortran/83149 ([6- and 7-branches] Missing test for sym->ns->proc_name: crash_s...
Paul Thomas [Wed, 16 May 2018 11:42:47 +0000 (11:42 +0000)] 
re PR fortran/83149 ([6- and 7-branches] Missing test for sym->ns->proc_name: crash_signal in toplev.c:325)

2018-05-16  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83149
Backport from trunk
* trans-decl.c (gfc_finish_var_decl): Test sym->ns->proc_name
before accessing its components.
* trans-types.c (gfc_sym_type): If a character result has null
backend_decl, try the procedure symbol.

2018-05-16  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83149
Backport from trunk
* gfortran.dg/pr83149_1.f90: New test.
* gfortran.dg/pr83149.f90: Additional source for previous.
* gfortran.dg/pr83149_b.f90: New test.
* gfortran.dg/pr83149_a.f90: Additional source for previous.

From-SVN: r260286

7 years agore PR fortran/83898 (ICE in gfc_conv_expr_descriptor, at fortran/trans-array.c:7181)
Paul Thomas [Wed, 16 May 2018 10:41:48 +0000 (10:41 +0000)] 
re PR fortran/83898 (ICE in gfc_conv_expr_descriptor, at fortran/trans-array.c:7181)

2018-16-05  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83898
Backport from trunk
* trans-stmt.c (trans_associate_var): Do not set cst_array_ctor
for characters.

2018-16-05  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83898
Backport from trunk
* gfortran.dg/associate_33.f03 : New test.

From-SVN: r260284

7 years agoDaily bump.
GCC Administrator [Wed, 16 May 2018 00:16:12 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260274

7 years agoDaily bump.
GCC Administrator [Tue, 15 May 2018 00:16:12 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260245

7 years agoPR libstdc++/67554 Do not pass null pointers to memcpy
Jonathan Wakely [Mon, 14 May 2018 22:35:44 +0000 (23:35 +0100)] 
PR libstdc++/67554 Do not pass null pointers to memcpy

PR libstdc++/67554
* include/bits/valarray_array.h (_Array_copy_ctor<_Tp, true>)
(_Array_copier<_Tp, true>): Do not pass null pointers to memcpy.

From-SVN: r260244

7 years agoDaily bump.
GCC Administrator [Mon, 14 May 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260218

7 years agore PR fortran/68846 (Pointer function as LValue doesn't work when the assignment...
Paul Thomas [Sun, 13 May 2018 08:34:50 +0000 (08:34 +0000)] 
re PR fortran/68846 (Pointer function as LValue doesn't work when the assignment regards a dummy argument.)

2018-05-13  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/68846
PR fortran/70864
Backport from trunk
* resolve.c (get_temp_from_expr): The temporary must not have
dummy or intent attributes.

2018-05-13  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/68846
Backport from trunk
* gfortran.dg/temporary_3.f90 : New test.

PR fortran/70864
Backport from trunk
* gfortran.dg/temporary_2.f90 : New test.

From-SVN: r260208

7 years agoDaily bump.
GCC Administrator [Sun, 13 May 2018 00:16:29 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260202

7 years agore PR fortran/85542 (ICE in check_inquiry, at fortran/expr.c:2426)
Steven G. Kargl [Sat, 12 May 2018 17:17:19 +0000 (17:17 +0000)] 
re PR fortran/85542 (ICE in check_inquiry, at fortran/expr.c:2426)

2018-05-12  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85542
Backport from trunk
* expr.c (check_inquiry): Avoid NULL pointer dereference.

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85542
Backport from trunk
* gfortran.dg/pr85542.f90: New test.

From-SVN: r260198

7 years agoDaily bump.
GCC Administrator [Sat, 12 May 2018 00:16:16 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260191

7 years agore PR fortran/70870 (Segmentation violation in gfc_assign_data_value)
Steven G. Kargl [Fri, 11 May 2018 18:35:20 +0000 (18:35 +0000)] 
re PR fortran/70870 (Segmentation violation in gfc_assign_data_value)

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/70870
Backport from trunk
* data.c (gfc_assign_data_value): Check that a data object does
not also have default initialization.

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/70870
Backport from trunk
* gfortran.dg/pr70870_1.f90: New test.

From-SVN: r260181

7 years agore PR fortran/85521 (ICE in gfc_resolve_character_array_constructor, at fortran/array...
Steven G. Kargl [Fri, 11 May 2018 18:34:14 +0000 (18:34 +0000)] 
re PR fortran/85521 (ICE in gfc_resolve_character_array_constructor, at fortran/array.c:2049)

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85521
Backport from trunk
* array.c (gfc_resolve_character_array_constructor): Substrings
with upper bound smaller than lower bound are zero length strings.

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85521
Backport from trunk
* gfortran.dg/pr85521_1.f90: New test.
* gfortran.dg/pr85521_2.f90: New test.

From-SVN: r260180

7 years agore PR fortran/85687 (ICE in gfc_sym_identifier, at fortran/trans-decl.c:351)
Steven G. Kargl [Fri, 11 May 2018 18:33:05 +0000 (18:33 +0000)] 
re PR fortran/85687 (ICE in gfc_sym_identifier, at fortran/trans-decl.c:351)

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85687
Backport from trunk
* check.c (gfc_check_rank): Check that the argument is a data object.

2018-05-11  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85687
Backport from trunk
* gfortran.dg/pr85687.f90: new test.

From-SVN: r260179

7 years ago[arm] PR target/83687: Fix invalid combination of VSUB + VABS into VABD
Kyrylo Tkachov [Fri, 11 May 2018 09:35:31 +0000 (09:35 +0000)] 
[arm] PR target/83687: Fix invalid combination of VSUB + VABS into VABD

PR target/83687
* config/arm/neon.md (neon_vabd<mode>_2): Use VCVTF mode iterator.
Remove integer-related logic from pattern.
(neon_vabd<mode>_3): Likewise.

* gcc.target/arm/neon-combine-sub-abs-into-vabd.c: Delete integer
tests.
* gcc.target/arm/pr83687.c: New test.

From-SVN: r260159

7 years agoDaily bump.
GCC Administrator [Fri, 11 May 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260144

7 years agoDocument Dual ABI for std::ios_base::failure
Jonathan Wakely [Thu, 10 May 2018 19:27:14 +0000 (20:27 +0100)] 
Document Dual ABI for std::ios_base::failure

* doc/xml/manual/debug_mode.xml: Add array and forward_list to list
of C++11 containers with Debug Mode support.
* doc/xml/manual/using.xml: Document Dual ABI for ios_base::failure.
* doc/html/*: Regenerate.

From-SVN: r260132

7 years agoDaily bump.
GCC Administrator [Thu, 10 May 2018 00:16:07 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260101

7 years agoDaily bump.
GCC Administrator [Wed, 9 May 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260060

7 years agoDaily bump.
GCC Administrator [Tue, 8 May 2018 00:16:23 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r260018

7 years agoDaily bump.
GCC Administrator [Mon, 7 May 2018 00:16:04 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259983

7 years agore PR fortran/85507 (ICE in gfc_dep_resolver, at fortran/dependency.c:2258)
Andre Vehreschild [Sun, 6 May 2018 12:14:11 +0000 (14:14 +0200)] 
re PR fortran/85507 (ICE in gfc_dep_resolver, at fortran/dependency.c:2258)

gcc/fortran/ChangeLog:

2018-05-06  Andre Vehreschild  <vehre@gcc.gnu.org>

        PR fortran/85507
        Backport from trunk.
        * dependency.c (gfc_dep_resolver): Revert looking at coarray dimension
        introduced by r259385.
        * trans-intrinsic.c (conv_caf_send): Always report a dependency for
        same variables in coarray assignments.

gcc/testsuite/ChangeLog:

2018-05-06  Andre Vehreschild  <vehre@gcc.gnu.org>

        PR fortran/85507
        Backport from trunk.
        * gfortran.dg/coarray_dependency_1.f90: New test.
        * gfortran.dg/coarray_lib_comm_1.f90: Fix counting caf-expressions.

From-SVN: r259978

7 years agoDaily bump.
GCC Administrator [Sun, 6 May 2018 00:16:07 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259970

7 years agoDaily bump.
GCC Administrator [Sat, 5 May 2018 00:16:07 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259962

7 years agoDaily bump.
GCC Administrator [Fri, 4 May 2018 00:16:08 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259914

7 years agoPR libstdc++/85632 fix wraparound in filesystem::space
Jonathan Wakely [Thu, 3 May 2018 20:39:31 +0000 (21:39 +0100)] 
PR libstdc++/85632 fix wraparound in filesystem::space

On 32-bit targets any values over 4GB would wrap and produce the wrong
result.

PR libstdc++/85632 use uintmax_t for arithmetic
* src/filesystem/ops.cc (experimental::filesystem::space): Perform
arithmetic in result type.
* testsuite/experimental/filesystem/operations/space.cc: New.

From-SVN: r259911

7 years agoDaily bump.
GCC Administrator [Thu, 3 May 2018 00:16:04 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259871

7 years agoDaily bump.
GCC Administrator [Wed, 2 May 2018 00:16:20 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259815

7 years agoDaily bump.
GCC Administrator [Tue, 1 May 2018 00:16:07 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259784

7 years agoDaily bump.
GCC Administrator [Mon, 30 Apr 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259750

7 years agoDaily bump.
GCC Administrator [Sun, 29 Apr 2018 00:16:08 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259744

7 years agore PR fortran/81773 ([Coarray] Get with vector index on lhs leads to incorrect caf_ge...
Andre Vehreschild [Sat, 28 Apr 2018 14:54:09 +0000 (16:54 +0200)] 
re PR fortran/81773 ([Coarray] Get with vector index on lhs leads to incorrect caf_get_by_ref() call.)

gcc/fortran/ChangeLog:

2018-04-28  Andre Vehreschild  <vehre@gcc.gnu.org>

PR fortran/81773
PR fortran/83606
Backport from trunk
* dependency.c (gfc_dep_resolver): Coarray indexes are to be ignored
during dependency computation.  They define no data dependency.
* trans-array.c (conv_array_index_offset): The stride can not be set
here, prevent fail.
* trans-intrinsic.c (conv_caf_send): Add creation of temporary array
for caf_get's result and copying to the array with vectorial
indexing.

gcc/testsuite/ChangeLog:

2018-04-28  Andre Vehreschild  <vehre@gcc.gnu.org>

PR fortran/81773
PR fortran/83606
Backport from trunk
* gfortran.dg/coarray/get_to_indexed_array_1.f90: New test.
* gfortran.dg/coarray/get_to_indirect_array.f90: New test.

From-SVN: r259741

7 years agoDaily bump.
GCC Administrator [Sat, 28 Apr 2018 00:16:09 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259734

7 years agoDaily bump.
GCC Administrator [Fri, 27 Apr 2018 00:16:08 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259692

7 years agoDaily bump.
GCC Administrator [Thu, 26 Apr 2018 00:16:08 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259659

7 years agoBackport r259431
Martin Liska [Wed, 25 Apr 2018 07:41:44 +0000 (09:41 +0200)] 
Backport r259431

2018-04-25  Martin Liska  <mliska@suse.cz>

Backport from mainline
2018-04-17  Martin Liska  <mliska@suse.cz>

PR lto/85405
* ipa-devirt.c (odr_types_equivalent_p): Remove trailing
in message, remote space in between '_G' and '('.

From-SVN: r259634

7 years agoBackport r259429
Martin Liska [Wed, 25 Apr 2018 07:41:25 +0000 (09:41 +0200)] 
Backport r259429

2018-04-25  Martin Liska  <mliska@suse.cz>

Backport from mainline
2018-04-17  Jan Hubicka  <jh@suse.cz>

PR lto/85405
* ipa-devirt.c (odr_types_equivalent_p): Handle bit fields.

From-SVN: r259633

7 years agoBackport r259274
Martin Liska [Wed, 25 Apr 2018 07:40:46 +0000 (09:40 +0200)] 
Backport r259274

2018-04-25  Martin Liska  <mliska@suse.cz>

Backport from mainline
2018-04-10  Martin Liska  <mliska@suse.cz>

PR lto/85248
* lto-symtab.c (lto_symtab_merge_p): Do not check for
TREE_VALUES of error attributes.

From-SVN: r259632

7 years agoBackport r259265
Martin Liska [Wed, 25 Apr 2018 07:40:27 +0000 (09:40 +0200)] 
Backport r259265

2018-04-25  Martin Liska  <mliska@suse.cz>

Backport from mainline
2018-04-10  Richard Biener  <rguenther@suse.de>
    Martin Liska  <mliska@suse.cz>

PR lto/85248
* lto-symtab.c (lto_symtab_merge_p): Handle noreturn attribute.
2018-04-25  Martin Liska  <mliska@suse.cz>

Backport from mainline
2018-04-10  Jakub Jelinek  <jakub@redhat.com>

PR lto/85248
* gcc.dg/lto/pr85248_0.c: New test.
* gcc.dg/lto/pr85248_1.c: New test.

From-SVN: r259631

7 years agoDaily bump.
GCC Administrator [Wed, 25 Apr 2018 00:16:23 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259626

7 years agore PR fortran/85520 (Out of memory when declaring a character with len << 0)
Steven G. Kargl [Wed, 25 Apr 2018 00:12:58 +0000 (00:12 +0000)] 
re PR fortran/85520 (Out of memory when declaring a character with len << 0)

2018-04-24  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85520
* decl.c (gfc_match_char_spec): Check for negative length and set to 0.

2018-04-24  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85520
* gfortran.dg/pr85520.f90: New test.

From-SVN: r259625

7 years agoDaily bump.
GCC Administrator [Tue, 24 Apr 2018 00:16:10 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259587

7 years agobackport: re PR target/83660 (ICE with vec_extract inside expression statement)
Aaron Sawdey [Tue, 24 Apr 2018 00:14:21 +0000 (00:14 +0000)] 
backport: re PR target/83660 (ICE with vec_extract inside expression statement)

2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>

Backport from mainline
2018-04-16  Aaron Sawdey  <acsawdey@linux.ibm.com>

PR target/83660
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Mark
vec_extract expression as having side effects to make sure it gets
a cleanup point.

2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>

Backport from mainline
2018-04-16  Aaron Sawdey  <acsawdey@linux.ibm.com>

PR target/83660
* gcc.target/powerpc/pr83660.C: New test.

From-SVN: r259586

7 years agore PR middle-end/85496 (internal compiler error: in emit_move_insn, at expr.c:3722)
Eric Botcazou [Mon, 23 Apr 2018 20:31:17 +0000 (20:31 +0000)] 
re PR middle-end/85496 (internal compiler error: in emit_move_insn, at expr.c:3722)

PR middle-end/85496
* expr.c (store_field): In the bitfield case, if the value comes from
a function call and is returned in registers by means of a PARALLEL,
do not change the mode of the temporary unless BLKmode and VOIDmode.

From-SVN: r259577

7 years agoDaily bump.
GCC Administrator [Mon, 23 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259554

7 years agoDaily bump.
GCC Administrator [Sun, 22 Apr 2018 00:16:04 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259542

7 years agoDaily bump.
GCC Administrator [Sat, 21 Apr 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259537

7 years agoDaily bump.
GCC Administrator [Fri, 20 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259513

7 years agoDaily bump.
GCC Administrator [Thu, 19 Apr 2018 00:16:15 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259481

7 years ago[ARM] Fix PR85261: ICE with FPSCR setter builtin
Thomas Preud'homme [Wed, 18 Apr 2018 13:17:30 +0000 (13:17 +0000)] 
[ARM] Fix PR85261: ICE with FPSCR setter builtin

Instruction pattern for setting the FPSCR expects the input value to be
in a register. However, __builtin_arm_set_fpscr expander does not ensure
that this is the case and as a result GCC ICEs when the builtin is
called with a constant literal.

This commit fixes the builtin to force the input value into a register.
It also remove the unneeded volatile in the existing fpscr test and
fixes the function prototype.

2018-04-18  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    Backport from mainline
    2018-04-11  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    PR target/85261
    * config/arm/arm-builtins.c (arm_expand_builtin): Force input operand
    into register.

    gcc/testsuite/
    PR target/85261
    * gcc.target/arm/fpscr.c: Add call to __builtin_arm_set_fpscr with
    literal value.  Expect 2 MCR instruction.  Fix function prototype.
    Remove volatile keyword.

From-SVN: r259469

7 years agoDaily bump.
GCC Administrator [Wed, 18 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259453

7 years agoDaily bump.
GCC Administrator [Tue, 17 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259424

7 years agoi386: Don't generate alias for function return thunk
H.J. Lu [Mon, 16 Apr 2018 19:11:13 +0000 (19:11 +0000)] 
i386: Don't generate alias for function return thunk

Function return thunks shouldn't be aliased to indirect branch thunks
since indirect branch thunks are placed in COMDAT section and a COMDAT
section with indirect branch may not have function return thunk.  This
patch generates function return thunks directly.

gcc/

Backport from mainline
PR target/84574
* config/i386/i386.c (indirect_thunk_needed): Update comments.
(indirect_thunk_bnd_needed): Likewise.
(indirect_thunks_used): Likewise.
(indirect_thunks_bnd_used): Likewise.
(indirect_return_needed): New.
(indirect_return_bnd_needed): Likewise.
(output_indirect_thunk_function): Add a bool argument for
function return.
(output_indirect_thunk_function): Don't generate alias for
function return thunk.
(ix86_code_end): Call output_indirect_thunk_function to generate
function return thunks.
(ix86_output_function_return): Set indirect_return_bnd_needed
and indirect_return_needed instead of indirect_thunk_bnd_needed
and indirect_thunk_needed.

gcc/testsuite/

Backport from mainline
PR target/84574
* gcc.target/i386/ret-thunk-9.c: Expect __x86_return_thunk
label instead of __x86_indirect_thunk label.

From-SVN: r259422

7 years agoi386: Add TARGET_INDIRECT_BRANCH_REGISTER
H.J. Lu [Mon, 16 Apr 2018 19:08:14 +0000 (19:08 +0000)] 
i386: Add TARGET_INDIRECT_BRANCH_REGISTER

For

---
struct C {
  virtual ~C();
  virtual void f();
};

void
f (C *p)
{
  p->f();
  p->f();
}
---

-mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates:

_Z1fP1C:
.LFB0:
        .cfi_startproc
        pushq   %rbx
        .cfi_def_cfa_offset 16
        .cfi_offset 3, -16
        movq    (%rdi), %rax
        movq    %rdi, %rbx
        jmp     .LIND1
.LIND0:
        pushq   16(%rax)
        jmp     __x86_indirect_thunk
.LIND1:
        call    .LIND0
        movq    (%rbx), %rax
        movq    %rbx, %rdi
        popq    %rbx
        .cfi_def_cfa_offset 8
        movq    16(%rax), %rax
        jmp     __x86_indirect_thunk_rax
        .cfi_endproc

x86-64 is supposed to have asynchronous unwind tables by default, but
there is nothing that reflects the change in the (relative) frame
address after .LIND0.  That region really has to be moved outside of
the .cfi_startproc/.cfi_endproc bracket.

This patch adds TARGET_INDIRECT_BRANCH_REGISTER to force indirect
branch via register whenever -mindirect-branch= is used.  Now,
-mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates:

_Z1fP1C:
.LFB0:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq (%rdi), %rax
movq %rdi, %rbx
movq 16(%rax), %rax
call __x86_indirect_thunk_rax
movq (%rbx), %rax
movq %rbx, %rdi
popq %rbx
.cfi_def_cfa_offset 8
movq 16(%rax), %rax
jmp __x86_indirect_thunk_rax
.cfi_endproc

so that "-mindirect-branch=thunk-extern" is equivalent to
"-mindirect-branch=thunk-extern -mindirect-branch-register", which is
used by Linux kernel.

gcc/

Backport from mainline
2018-02-26  H.J. Lu  <hongjiu.lu@intel.com>

PR target/84039
* config/i386/constraints.md (Bs): Replace
ix86_indirect_branch_register with
TARGET_INDIRECT_BRANCH_REGISTER.
(Bw): Likewise.
* config/i386/i386.md (indirect_jump): Likewise.
(tablejump): Likewise.
(*sibcall_memory): Likewise.
(*sibcall_value_memory): Likewise.
Peepholes of indirect call and jump via memory: Likewise.
(*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER.
(*sibcall_value_GOT_32): Likewise.
* config/i386/predicates.md (indirect_branch_operand): Likewise.
(GOT_memory_operand): Likewise.
(call_insn_operand): Likewise.
(sibcall_insn_operand): Likewise.
(GOT32_symbol_operand): Likewise.
* config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New.

gcc/testsuite/

Backport from mainline
2018-02-26  H.J. Lu  <hongjiu.lu@intel.com>

PR target/84039
* gcc.target/i386/indirect-thunk-1.c: Updated.
* gcc.target/i386/indirect-thunk-2.c: Likewise.
* gcc.target/i386/indirect-thunk-3.c: Likewise.
* gcc.target/i386/indirect-thunk-4.c: Likewise.
* gcc.target/i386/indirect-thunk-5.c: Likewise.
* gcc.target/i386/indirect-thunk-6.c: Likewise.
* gcc.target/i386/indirect-thunk-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-1.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-5.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-6.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-5.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
* gcc.target/i386/ret-thunk-9.c: Likewise.
* gcc.target/i386/ret-thunk-10.c: Likewise.
* gcc.target/i386/ret-thunk-11.c: Likewise.
* gcc.target/i386/ret-thunk-12.c: Likewise.
* gcc.target/i386/ret-thunk-13.c: Likewise.
* gcc.target/i386/ret-thunk-14.c: Likewise.
* gcc.target/i386/ret-thunk-15.c: Likewise.

From-SVN: r259421

7 years agoi386: Update -mfunction-return= for return with pop
H.J. Lu [Mon, 16 Apr 2018 19:06:32 +0000 (19:06 +0000)] 
i386: Update -mfunction-return= for return with pop

When -mfunction-return= is used, simple_return_pop_internal should pop
return address into ECX register, adjust stack by bytes to pop from stack
and jump to the return thunk via ECX register.

Revision 257992 removed the bool argument from ix86_output_indirect_jmp.
Update comments to reflect it.

Tested on i686 and x86-64.

gcc/

Backport from mainline
2018-02-26  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386.c (ix86_output_indirect_jmp): Update comments.

2018-02-26  H.J. Lu  <hongjiu.lu@intel.com>

PR target/84530
* config/i386/i386-protos.h (ix86_output_indirect_jmp): Remove
the bool argument.
(ix86_output_indirect_function_return): New prototype.
(ix86_split_simple_return_pop_internal): Likewise.
* config/i386/i386.c (indirect_return_via_cx): New.
(indirect_return_via_cx_bnd): Likewise.
(indirect_thunk_name): Handle return va CX_REG.
(output_indirect_thunk_function): Create alias for
__x86_return_thunk_[re]cx and __x86_return_thunk_[re]cx_bnd.
(ix86_output_indirect_jmp): Remove the bool argument.
(ix86_output_indirect_function_return): New function.
(ix86_split_simple_return_pop_internal): Likewise.
* config/i386/i386.md (*indirect_jump): Don't pass false
to ix86_output_indirect_jmp.
(*tablejump_1): Likewise.
(simple_return_pop_internal): Change it to define_insn_and_split.
Call ix86_split_simple_return_pop_internal to split it for
-mfunction-return=.
(simple_return_indirect_internal): Call
ix86_output_indirect_function_return instead of
ix86_output_indirect_jmp.

gcc/testsuite/

Backport from mainline
2018-02-26  H.J. Lu  <hongjiu.lu@intel.com>

PR target/84530
* gcc.target/i386/ret-thunk-22.c: New test.
* gcc.target/i386/ret-thunk-23.c: Likewise.
* gcc.target/i386/ret-thunk-24.c: Likewise.
* gcc.target/i386/ret-thunk-25.c: Likewise.
* gcc.target/i386/ret-thunk-26.c: Likewise.

From-SVN: r259420

7 years agoi386: Pass INVALID_REGNUM as invalid register number
H.J. Lu [Mon, 16 Apr 2018 19:05:09 +0000 (19:05 +0000)] 
i386: Pass INVALID_REGNUM as invalid register number

Backport from mainline
* config/i386/i386.c (ix86_output_function_return): Pass
INVALID_REGNUM, instead of -1, as invalid register number to
indirect_thunk_name and output_indirect_thunk.

From-SVN: r259419

7 years agoUse INVALID_REGNUM in indirect thunk processing
H.J. Lu [Mon, 16 Apr 2018 19:03:51 +0000 (19:03 +0000)] 
Use INVALID_REGNUM in indirect thunk processing

Backport from mainline
2018-01-17  Uros Bizjak  <ubizjak@gmail.com>

* config/i386/i386.c (indirect_thunk_name): Declare regno
as unsigned int.  Compare regno with INVALID_REGNUM.
(output_indirect_thunk): Ditto.
(output_indirect_thunk_function): Ditto.
(ix86_code_end): Declare regno as unsigned int.  Use INVALID_REGNUM
in the call to output_indirect_thunk_function.

From-SVN: r259418

7 years agox86: Disallow -mindirect-branch=/-mfunction-return= with -mcmodel=large
H.J. Lu [Mon, 16 Apr 2018 19:03:00 +0000 (19:03 +0000)] 
x86: Disallow -mindirect-branch=/-mfunction-return= with -mcmodel=large

Since the thunk function may not be reachable in large code model,
-mcmodel=large is incompatible with -mindirect-branch=thunk,
-mindirect-branch=thunk-extern, -mfunction-return=thunk and
-mfunction-return=thunk-extern.  Issue an error when they are used with
-mcmodel=large.

gcc/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386.c (ix86_set_indirect_branch_type): Disallow
-mcmodel=large with -mindirect-branch=thunk,
-mindirect-branch=thunk-extern, -mfunction-return=thunk and
-mfunction-return=thunk-extern.
* doc/invoke.texi: Document -mcmodel=large is incompatible with
-mindirect-branch=thunk, -mindirect-branch=thunk-extern,
-mfunction-return=thunk and -mfunction-return=thunk-extern.

gcc/testsuite/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* gcc.target/i386/indirect-thunk-10.c: New test.
* gcc.target/i386/indirect-thunk-8.c: Likewise.
* gcc.target/i386/indirect-thunk-9.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-10.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-11.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-9.c: Likewise.
* gcc.target/i386/ret-thunk-17.c: Likewise.
* gcc.target/i386/ret-thunk-18.c: Likewise.
* gcc.target/i386/ret-thunk-19.c: Likewise.
* gcc.target/i386/ret-thunk-20.c: Likewise.
* gcc.target/i386/ret-thunk-21.c: Likewise.

From-SVN: r259417

7 years agox86: Add 'V' register operand modifier
H.J. Lu [Mon, 16 Apr 2018 19:00:53 +0000 (19:00 +0000)] 
x86: Add 'V' register operand modifier

Add 'V', a special modifier which prints the name of the full integer
register without '%'.  For

extern void (*func_p) (void);

void
foo (void)
{
  asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p));
}

it generates:

foo:
movq func_p(%rip), %rax
call __x86_indirect_thunk_rax
ret

gcc/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386.c (print_reg): Print the name of the full
integer register without '%'.
(ix86_print_operand): Handle 'V'.
 * doc/extend.texi: Document 'V' modifier.

gcc/testsuite/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* gcc.target/i386/indirect-thunk-register-4.c: New test.

From-SVN: r259416

7 years agox86: Add -mindirect-branch-register
H.J. Lu [Mon, 16 Apr 2018 18:59:22 +0000 (18:59 +0000)] 
x86: Add -mindirect-branch-register

Add -mindirect-branch-register to force indirect branch via register.
This is implemented by disabling patterns of indirect branch via memory,
similar to TARGET_X32.

-mindirect-branch= and -mfunction-return= tests are updated with
-mno-indirect-branch-register to avoid false test failures when
-mindirect-branch-register is added to RUNTESTFLAGS for "make check".

gcc/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/constraints.md (Bs): Disallow memory operand for
-mindirect-branch-register.
(Bw): Likewise.
* config/i386/predicates.md (indirect_branch_operand): Likewise.
(GOT_memory_operand): Likewise.
(call_insn_operand): Likewise.
(sibcall_insn_operand): Likewise.
(GOT32_symbol_operand): Likewise.
* config/i386/i386.md (indirect_jump): Call convert_memory_address
for -mindirect-branch-register.
(tablejump): Likewise.
(*sibcall_memory): Likewise.
(*sibcall_value_memory): Likewise.
Disallow peepholes of indirect call and jump via memory for
-mindirect-branch-register.
(*call_pop): Replace m with Bw.
(*call_value_pop): Likewise.
(*sibcall_pop_memory): Replace m with Bs.
* config/i386/i386.opt (mindirect-branch-register): New option.
* doc/invoke.texi: Document -mindirect-branch-register option.

gcc/testsuite/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* gcc.target/i386/indirect-thunk-1.c (dg-options): Add
-mno-indirect-branch-register.
* gcc.target/i386/indirect-thunk-2.c: Likewise.
* gcc.target/i386/indirect-thunk-3.c: Likewise.
* gcc.target/i386/indirect-thunk-4.c: Likewise.
* gcc.target/i386/indirect-thunk-5.c: Likewise.
* gcc.target/i386/indirect-thunk-6.c: Likewise.
* gcc.target/i386/indirect-thunk-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-1.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-5.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-6.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-5.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
* gcc.target/i386/ret-thunk-10.c: Likewise.
* gcc.target/i386/ret-thunk-11.c: Likewise.
* gcc.target/i386/ret-thunk-12.c: Likewise.
* gcc.target/i386/ret-thunk-13.c: Likewise.
* gcc.target/i386/ret-thunk-14.c: Likewise.
* gcc.target/i386/ret-thunk-15.c: Likewise.
* gcc.target/i386/ret-thunk-9.c: Likewise.
* gcc.target/i386/indirect-thunk-register-1.c: New test.
* gcc.target/i386/indirect-thunk-register-2.c: Likewise.
* gcc.target/i386/indirect-thunk-register-3.c: Likewise.

i386: Rename to ix86_indirect_branch_register

Rename the variable for -mindirect-branch-register to
ix86_indirect_branch_register to match the command-line option name.

Backport from mainline
2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/constraints.md (Bs): Replace
ix86_indirect_branch_thunk_register with
ix86_indirect_branch_register.
(Bw): Likewise.
* config/i386/i386.md (indirect_jump): Likewise.
(tablejump): Likewise.
(*sibcall_memory): Likewise.
(*sibcall_value_memory): Likewise.
Peepholes of indirect call and jump via memory: Likewise.
* config/i386/i386.opt: Likewise.
* config/i386/predicates.md (indirect_branch_operand): Likewise.
(GOT_memory_operand): Likewise.
(call_insn_operand): Likewise.
(sibcall_insn_operand): Likewise.
(GOT32_symbol_operand): Likewise.

x86: Rewrite ix86_indirect_branch_register logic

Rewrite ix86_indirect_branch_register logic with

(and (not (match_test "ix86_indirect_branch_register"))
     (original condition before r256662))

Backport from mainline
2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/predicates.md (constant_call_address_operand):
Rewrite ix86_indirect_branch_register logic.
(sibcall_insn_operand): Likewise.

Don't check ix86_indirect_branch_register for GOT operand

Since GOT_memory_operand and GOT32_symbol_operand are simple pattern
matches, don't check ix86_indirect_branch_register here.  If needed,
-mindirect-branch= will convert indirect branch via GOT slot to a call
and return thunk.

Backport from mainline
2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/constraints.md (Bs): Update
ix86_indirect_branch_register check.  Don't check
ix86_indirect_branch_register with GOT_memory_operand.
(Bw): Likewise.
* config/i386/predicates.md (GOT_memory_operand): Don't check
ix86_indirect_branch_register here.
(GOT32_symbol_operand): Likewise.

i386: Rewrite indirect_branch_operand logic

Backport from mainline
2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/predicates.md (indirect_branch_operand): Rewrite
ix86_indirect_branch_register logic.

From-SVN: r259415

7 years agox86: Add -mfunction-return=
H.J. Lu [Mon, 16 Apr 2018 18:55:04 +0000 (18:55 +0000)] 
x86: Add -mfunction-return=

Add -mfunction-return= option to convert function return to call and
return thunks.  The default is 'keep', which keeps function return
unmodified.  'thunk' converts function return to call and return thunk.
'thunk-inline' converts function return to inlined call and return thunk.
'thunk-extern' converts function return to external call and return
thunk provided in a separate object file.  You can control this behavior
for a specific function by using the function attribute function_return.

Function return thunk is the same as memory thunk for -mindirect-branch=
where the return address is at the top of the stack:

__x86_return_thunk:
call L2
L1:
pause
lfence
jmp L1
L2:
lea 8(%rsp), %rsp|lea 4(%esp), %esp
ret

and function return becomes

jmp __x86_return_thunk

-mindirect-branch= tests are updated with -mfunction-return=keep to
avoid false test failures when -mfunction-return=thunk is added to
RUNTESTFLAGS for "make check".

gcc/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386-protos.h (ix86_output_function_return): New.
* config/i386/i386.c (ix86_set_indirect_branch_type): Also
set function_return_type.
(indirect_thunk_name): Add ret_p to indicate thunk for function
return.
(output_indirect_thunk_function): Pass false to
indirect_thunk_name.
(ix86_output_indirect_branch_via_reg): Likewise.
(ix86_output_indirect_branch_via_push): Likewise.
(output_indirect_thunk_function): Create alias for function
return thunk if regno < 0.
(ix86_output_function_return): New function.
(ix86_handle_fndecl_attribute): Handle function_return.
(ix86_attribute_table): Add function_return.
* config/i386/i386.h (machine_function): Add
function_return_type.
* config/i386/i386.md (simple_return_internal): Use
ix86_output_function_return.
(simple_return_internal_long): Likewise.
* config/i386/i386.opt (mfunction-return=): New option.
(indirect_branch): Mention -mfunction-return=.
* doc/extend.texi: Document function_return function attribute.
* doc/invoke.texi: Document -mfunction-return= option.

gcc/testsuite/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* gcc.target/i386/indirect-thunk-1.c (dg-options): Add
-mfunction-return=keep.
* gcc.target/i386/indirect-thunk-2.c: Likewise.
* gcc.target/i386/indirect-thunk-3.c: Likewise.
* gcc.target/i386/indirect-thunk-4.c: Likewise.
* gcc.target/i386/indirect-thunk-5.c: Likewise.
* gcc.target/i386/indirect-thunk-6.c: Likewise.
* gcc.target/i386/indirect-thunk-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-8.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-1.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-5.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-6.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-5.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
* gcc.target/i386/ret-thunk-1.c: New test.
* gcc.target/i386/ret-thunk-10.c: Likewise.
* gcc.target/i386/ret-thunk-11.c: Likewise.
* gcc.target/i386/ret-thunk-12.c: Likewise.
* gcc.target/i386/ret-thunk-13.c: Likewise.
* gcc.target/i386/ret-thunk-14.c: Likewise.
* gcc.target/i386/ret-thunk-15.c: Likewise.
* gcc.target/i386/ret-thunk-16.c: Likewise.
* gcc.target/i386/ret-thunk-2.c: Likewise.
* gcc.target/i386/ret-thunk-3.c: Likewise.
* gcc.target/i386/ret-thunk-4.c: Likewise.
* gcc.target/i386/ret-thunk-5.c: Likewise.
* gcc.target/i386/ret-thunk-6.c: Likewise.
* gcc.target/i386/ret-thunk-7.c: Likewise.
* gcc.target/i386/ret-thunk-8.c: Likewise.
* gcc.target/i386/ret-thunk-9.c: Likewise.

i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO

ASM_OUTPUT_DEF isn't defined for TARGET_MACHO.  Use ASM_OUTPUT_LABEL to
generate the __x86_return_thunk label, instead of the set directive.
Update testcase to remove the __x86_return_thunk label check.  Since
-fno-pic is ignored on Darwin, update testcases to sscan or "push"
only on Linux.

gcc/

Backport from mainline
2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

PR target/83839
* config/i386/i386.c (output_indirect_thunk_function): Use
ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
for  __x86.return_thunk.

gcc/testsuite/

Backport from mainline
2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

PR target/83839
* gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on
Linux.
* gcc.target/i386/indirect-thunk-2.c: Likewise.
* gcc.target/i386/indirect-thunk-3.c: Likewise.
* gcc.target/i386/indirect-thunk-4.c: Likewise.
* gcc.target/i386/indirect-thunk-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
* gcc.target/i386/indirect-thunk-register-1.c: Likewise.
* gcc.target/i386/indirect-thunk-register-3.c: Likewise.
* gcc.target/i386/indirect-thunk-register-4.c: Likewise.
* gcc.target/i386/ret-thunk-10.c: Likewise.
* gcc.target/i386/ret-thunk-11.c: Likewise.
* gcc.target/i386/ret-thunk-12.c: Likewise.
* gcc.target/i386/ret-thunk-13.c: Likewise.
* gcc.target/i386/ret-thunk-14.c: Likewise.
* gcc.target/i386/ret-thunk-15.c: Likewise.
* gcc.target/i386/ret-thunk-9.c: Don't check the
__x86_return_thunk label.
Scan for "push" only for Linux.

From-SVN: r259414

7 years agox86: Add -mindirect-branch=
H.J. Lu [Mon, 16 Apr 2018 18:50:52 +0000 (18:50 +0000)] 
x86: Add -mindirect-branch=

Add -mindirect-branch= option to convert indirect call and jump to call
and return thunks.  The default is 'keep', which keeps indirect call and
jump unmodified.  'thunk' converts indirect call and jump to call and
return thunk.  'thunk-inline' converts indirect call and jump to inlined
call and return thunk.  'thunk-extern' converts indirect call and jump to
external call and return thunk provided in a separate object file.  You
can control this behavior for a specific function by using the function
attribute indirect_branch.

2 kinds of thunks are geneated.  Memory thunk where the function address
is at the top of the stack:

__x86_indirect_thunk:
call L2
L1:
pause
lfence
jmp L1
L2:
lea 8(%rsp), %rsp|lea 4(%esp), %esp
ret

Indirect jmp via memory, "jmp mem", is converted to

push memory
jmp __x86_indirect_thunk

Indirect call via memory, "call mem", is converted to

jmp L2
L1:
push [mem]
jmp __x86_indirect_thunk
L2:
call L1

Register thunk where the function address is in a register, reg:

__x86_indirect_thunk_reg:
call L2
L1:
pause
lfence
jmp L1
L2:
movq %reg, (%rsp)|movl    %reg, (%esp)
ret

where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di,
(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15.

Indirect jmp via register, "jmp reg", is converted to

jmp __x86_indirect_thunk_reg

Indirect call via register, "call reg", is converted to

call __x86_indirect_thunk_reg

gcc/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386-opts.h (indirect_branch): New.
* config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise.
* config/i386/i386.c (ix86_using_red_zone): Disallow red-zone
with local indirect jump when converting indirect call and jump.
(ix86_set_indirect_branch_type): New.
(ix86_set_current_function): Call ix86_set_indirect_branch_type.
(indirectlabelno): New.
(indirect_thunk_needed): Likewise.
(indirect_thunk_bnd_needed): Likewise.
(indirect_thunks_used): Likewise.
(indirect_thunks_bnd_used): Likewise.
(INDIRECT_LABEL): Likewise.
(indirect_thunk_name): Likewise.
(output_indirect_thunk): Likewise.
(output_indirect_thunk_function): Likewise.
(ix86_output_indirect_branch_via_reg): Likewise.
(ix86_output_indirect_branch_via_push): Likewise.
(ix86_output_indirect_branch): Likewise.
(ix86_output_indirect_jmp): Likewise.
(ix86_code_end): Call output_indirect_thunk_function if needed.
(ix86_output_call_insn): Call ix86_output_indirect_branch if
needed.
(ix86_handle_fndecl_attribute): Handle indirect_branch.
(ix86_attribute_table): Add indirect_branch.
* config/i386/i386.h (machine_function): Add indirect_branch_type
and has_local_indirect_jump.
* config/i386/i386.md (indirect_jump): Set has_local_indirect_jump
to true.
(tablejump): Likewise.
(*indirect_jump): Use ix86_output_indirect_jmp.
(*tablejump_1): Likewise.
(simple_return_indirect_internal): Likewise.
* config/i386/i386.opt (mindirect-branch=): New option.
(indirect_branch): New.
(keep): Likewise.
(thunk): Likewise.
(thunk-inline): Likewise.
(thunk-extern): Likewise.
* doc/extend.texi: Document indirect_branch function attribute.
* doc/invoke.texi: Document -mindirect-branch= option.

gcc/testsuite/

Backport from mainline
2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

* gcc.target/i386/indirect-thunk-1.c: New test.
* gcc.target/i386/indirect-thunk-2.c: Likewise.
* gcc.target/i386/indirect-thunk-3.c: Likewise.
* gcc.target/i386/indirect-thunk-4.c: Likewise.
* gcc.target/i386/indirect-thunk-5.c: Likewise.
* gcc.target/i386/indirect-thunk-6.c: Likewise.
* gcc.target/i386/indirect-thunk-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
* gcc.target/i386/indirect-thunk-attr-8.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-1.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
* gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-5.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-6.c: Likewise.
* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-5.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.

From-SVN: r259413

7 years agoCheck in the missing change
H.J. Lu [Mon, 16 Apr 2018 18:47:16 +0000 (11:47 -0700)] 
Check in the missing change

From-SVN: r259412

7 years agoi386: Use const reference of struct ix86_frame to avoid copy
H.J. Lu [Mon, 16 Apr 2018 18:44:43 +0000 (11:44 -0700)] 
i386: Use const reference of struct ix86_frame to avoid copy

We can use const reference of struct ix86_frame to avoid making a local
copy of ix86_frame.  ix86_expand_epilogue makes a local copy of struct
ix86_frame and uses the reg_save_offset field as a local variable.  This
patch uses a separate local variable for reg_save_offset.

Tested on x86-64 with ada.

Backport from mainline
PR target/83905
* config/i386/i386.c (ix86_expand_prologue): Use cost reference
of struct ix86_frame.
(ix86_expand_epilogue): Likewise.  Add a local variable for
the reg_save_offset field in struct ix86_frame.

From-SVN: r259411

7 years agoi386: Use reference of struct ix86_frame to avoid copy
H.J. Lu [Mon, 16 Apr 2018 18:43:57 +0000 (18:43 +0000)] 
i386: Use reference of struct ix86_frame to avoid copy

When there is no need to make a copy of ix86_frame, we can use reference
of struct ix86_frame to avoid copy.

Backport from mainline
2017-11-06  H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386.c (ix86_can_use_return_insn_p): Use reference
of struct ix86_frame.
(ix86_initial_elimination_offset): Likewise.
(ix86_expand_split_stack_prologue): Likewise.

From-SVN: r259410

7 years agoi386: Move struct ix86_frame to machine_function
H.J. Lu [Mon, 16 Apr 2018 18:42:57 +0000 (18:42 +0000)] 
i386: Move struct ix86_frame to machine_function

Make ix86_frame available to i386 code generation.  This is needed to
backport the patch set of -mindirect-branch= to mitigate variant #2 of
the speculative execution vulnerabilities on x86 processors identified
by CVE-2017-5715, aka Spectre.

Backport from mainline
2017-10-13  H.J. Lu  <hongjiu.lu@intel.com>

PR target/82499
* config/i386/i386.h (ix86_red_zone_size): New.

2017-06-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* config/i386/i386.c (ix86_frame): Moved to ...
* config/i386/i386.h (ix86_frame): Here.
(machine_function): Add frame.
* config/i386/i386.c (ix86_compute_frame_layout): Repace the
frame argument with &cfun->machine->frame.
(ix86_can_use_return_insn_p): Don't pass &frame to
ix86_compute_frame_layout.  Copy frame from cfun->machine->frame.
(ix86_can_eliminate): Likewise.
(ix86_expand_prologue): Likewise.
(ix86_expand_epilogue): Likewise.
(ix86_expand_split_stack_prologue): Likewise.

From-SVN: r259408

7 years agoDaily bump.
GCC Administrator [Mon, 16 Apr 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259390

7 years agoDaily bump.
GCC Administrator [Sun, 15 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259387

7 years agoDaily bump.
GCC Administrator [Sat, 14 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259381

7 years agoDaily bump.
GCC Administrator [Fri, 13 Apr 2018 00:16:06 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259361

7 years agoIBM Z: Spectre: Prevent thunk cfi to be emitted with -fno-dwarf2-cfi-asm
Andreas Krebbel [Thu, 12 Apr 2018 10:22:35 +0000 (10:22 +0000)] 
IBM Z: Spectre: Prevent thunk cfi to be emitted with -fno-dwarf2-cfi-asm

The CFI magic we emit as part of the indirect branch thunks in order to
have somewhat sane unwind information must not be emitted with
-fno-dwarf2-cfi-asm.

gcc/ChangeLog:

2018-04-12  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

Backport from mainline
2018-04-12  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* config/s390/s390.c (s390_output_indirect_thunk_function): Check
also for flag_dwarf2_cfi_asm.

gcc/testsuite/ChangeLog:

2018-04-12  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

Backport from mainline
2018-04-12  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* gcc.target/s390/nobp-no-dwarf2-cfi.c: New test.

From-SVN: r259342

7 years agoDaily bump.
GCC Administrator [Thu, 12 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259334

7 years agoalpha.md (stack_probe_internal): Rename from "probe_stack".
Uros Bizjak [Wed, 11 Apr 2018 19:03:51 +0000 (21:03 +0200)] 
alpha.md (stack_probe_internal): Rename from "probe_stack".

* config/alpha/alpha.md (stack_probe_internal): Rename
from "probe_stack".  Update all callers.

From-SVN: r259330

7 years agoDaily bump.
GCC Administrator [Wed, 11 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259305

7 years ago[PR target/85056] Address -Wmaybe-uninitialized diagnostic
Thomas Schwinge [Tue, 10 Apr 2018 16:55:55 +0000 (18:55 +0200)] 
[PR target/85056] Address -Wmaybe-uninitialized diagnostic

gcc/testsuite/
* gcc.target/nvptx/pr85056.c (main): Initialize "sum".

trunk r259288

From-SVN: r259290

7 years ago[AArch64] PR target/84748: Mark *compare_cstore<mode>_insn as clobbering CC reg
Kyrylo Tkachov [Tue, 10 Apr 2018 13:05:24 +0000 (13:05 +0000)] 
[AArch64] PR target/84748: Mark *compare_cstore<mode>_insn as clobbering CC reg

Backport from mainline
2018-03-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

PR target/84748
* config/aarch64/aarch64.md (*compare_cstore<mode>_insn): Mark pattern
as clobbering CC_REGNUM.

* gcc.c-torture/execute/pr84748.c: New test.

From-SVN: r259271

7 years agoDaily bump.
GCC Administrator [Tue, 10 Apr 2018 00:16:12 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259261

7 years agoDaily bump.
GCC Administrator [Mon, 9 Apr 2018 00:16:18 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259225

7 years agoDaily bump.
GCC Administrator [Sun, 8 Apr 2018 00:16:04 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259213

7 years agoDaily bump.
GCC Administrator [Sat, 7 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259198

7 years agore PR middle-end/85196 (ICE in extract_insn, at recog.c:2311: unrecognizable insn)
Eric Botcazou [Fri, 6 Apr 2018 22:33:55 +0000 (22:33 +0000)] 
re PR middle-end/85196 (ICE in extract_insn, at recog.c:2311: unrecognizable insn)

PR target/85196
* config/sparc/sparc.c (sparc_expand_move): Deal with symbolic operands
based on LABEL_REF.  Remove useless assertion.
(pic_address_needs_scratch): Fix formatting.
(sparc_legitimize_pic_address): Minor tweaks.
(sparc_delegitimize_address): Adjust assertion accordingly.
* config/sparc/sparc.md (movsi_pic_label_ref): Change label_ref_operand
into symbolic_operand.
(movsi_high_pic_label_ref): Likewise.
(movsi_lo_sum_pic_label_ref): Likewise.
(movdi_pic_label_ref): Likewise.
(movdi_high_pic_label_ref): Likewise.
(movdi_lo_sum_pic_label_ref): Likewise.

From-SVN: r259196

7 years agoDaily bump.
GCC Administrator [Fri, 6 Apr 2018 00:16:04 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259157

7 years agore PR target/85193 (ICE: SIGSEGV in memory_operand at recog.c:1361 with -O2 -fno...
Uros Bizjak [Thu, 5 Apr 2018 20:32:18 +0000 (22:32 +0200)] 
re PR target/85193 (ICE: SIGSEGV in memory_operand at recog.c:1361 with -O2 -fno-tree-ccp -fno-tree-fre -mno-sse)

PR target/85193
* config/i386/i386.md (define_attr "memory"): Handle rotate1 type.

testsuite/ChangeLog:

PR target/85193
* gcc.target/i386/pr85193.c: New test.

From-SVN: r259153

7 years agoDaily bump.
GCC Administrator [Thu, 5 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259109

7 years agoDaily bump.
GCC Administrator [Wed, 4 Apr 2018 00:16:11 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259062

7 years agoDaily bump.
GCC Administrator [Tue, 3 Apr 2018 00:16:07 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259022

7 years agobackport: re PR target/84912 (__builtin_divde* produce Internal Compiler Error when...
Peter Bergner [Mon, 2 Apr 2018 23:54:20 +0000 (18:54 -0500)] 
backport: re PR target/84912 (__builtin_divde* produce Internal Compiler Error when compiled -m32)

gcc/
Backport from mainline
2018-03-28  Peter Bergner  <bergner@vnet.ibm.com>

PR target/84912
* config/rs6000/rs6000.h: Update copyright date.
(RS6000_BTM_POWERPC64): New define.
(RS6000_BTM_COMMON): Add RS6000_BTM_POWERPC64.
* config/rs6000/rs6000.c: Update copyright date.
(rs6000_builtin_mask_calculate): Add support for RS6000_BTM_POWERPC64.
(rs6000_invalid_builtin): Add handling for RS6000_BTM_POWERPC64
(rs6000_builtin_mask_names): Add RS6000_BTM_POWERPC64.
* config/rs6000/rs6000-builtin.def: Update copyright date.
(BU_P7_POWERPC64_MISC_2): New macro definition.
(DIVDE): Use it.
(DIVDEU): Likewise.

Backport from mainline
2018-03-28  Peter Bergner  <bergner@vnet.ibm.com>

PR target/84912
* config/rs6000/rs6000-builtin.def (DIVWEO): Delete macro expansion.
(DIVWEUO): Likewise.
(DIVDEO): Likewise.
(DIVDEUO): Likewise.
* config/rs6000/rs6000.c (builtin_function_type): Remove support for
DIVWEUO and DIVDEUO.
* config/rs6000/rs6000.md: Update copyright date.
(UNSPEC_DIVEO, UNSPEC_DIVEUO): Delete unspecs.
(UNSPEC_DIV_EXTEND): Remove deleted unspecs.
(div_extend): Likewise.
* doc/extend.texi: Update copyright date.
(__builtin_divweo): Remove documentation for deleted builtin function.
(__builtin_divweuo): Likewise.
(__builtin_divdeo): Likewise.
(__builtin_divdeuo): Likewise.

gcc/testsuite/
Backport from mainline
2018-03-28  Peter Bergner  <bergner@vnet.ibm.com>

PR target/84912
* gcc.target/powerpc/extend-divide-1.c (div_weo): Remove test for
deleted builtin function.
(div_weuo): Likewise.
* gcc.target/powerpc/extend-divide-2.c (div_deo): Likewise.
(div_deuo): Likewise.

From-SVN: r259021

7 years agoi386: Enable AVX/AVX512 features only if supported by OSXSAVE
H.J. Lu [Mon, 2 Apr 2018 12:09:48 +0000 (12:09 +0000)] 
i386: Enable AVX/AVX512 features only if supported by OSXSAVE

Enable AVX and AVX512 features only if their states are supported by
OSXSAVE.

Backport from mainline
PR target/85100
* config/i386/cpuinfo.c (XCR_XFEATURE_ENABLED_MASK): New.
(XSTATE_FP): Likewise.
(XSTATE_SSE): Likewise.
(XSTATE_YMM): Likewise.
(XSTATE_OPMASK): Likewise.
(XSTATE_ZMM): Likewise.
(XSTATE_HI_ZMM): Likewise.
(XCR_AVX_ENABLED_MASK): Likewise.
(XCR_AVX512F_ENABLED_MASK): Likewise.
(get_available_features): Enable AVX and AVX512 features only
if their states are supported by OSXSAVE.

From-SVN: r259007

7 years agoDaily bump.
GCC Administrator [Mon, 2 Apr 2018 00:16:05 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r259000

7 years agoDaily bump.
GCC Administrator [Sun, 1 Apr 2018 00:16:04 +0000 (00:16 +0000)] 
Daily bump.

From-SVN: r258991