This is the mail archive of the
gcc-cvs@gcc.gnu.org
mailing list for the GCC project.
r259415 - in /branches/gcc-6-branch/gcc: Change...
- From: hjl at gcc dot gnu dot org
- To: gcc-cvs at gcc dot gnu dot org
- Date: Mon, 16 Apr 2018 18:59:22 -0000
- Subject: r259415 - in /branches/gcc-6-branch/gcc: Change...
Author: hjl
Date: Mon Apr 16 18:59:22 2018
New Revision: 259415
URL: https://gcc.gnu.org/viewcvs?rev=259415&root=gcc&view=rev
Log:
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.
Added:
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c
Modified:
branches/gcc-6-branch/gcc/ChangeLog
branches/gcc-6-branch/gcc/config/i386/constraints.md
branches/gcc-6-branch/gcc/config/i386/i386.md
branches/gcc-6-branch/gcc/config/i386/i386.opt
branches/gcc-6-branch/gcc/config/i386/predicates.md
branches/gcc-6-branch/gcc/doc/invoke.texi
branches/gcc-6-branch/gcc/testsuite/ChangeLog
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
branches/gcc-6-branch/gcc/testsuite/gcc.target/i386/ret-thunk-9.c