summaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)Author
2018-01-182018-01-17 Harald Anlauf <anlauf@gmx.de>kargl
Backport from mainline PR fortran/83874 * decl.c (add_init_expr_to_sym): Do not dereference NULL pointer. 2018-01-17 Harald Anlauf <anlauf@gmx.de> Backport from mainline PR fortran/83874 * gfortran.dg/pr83874.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256829 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-18Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256826 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17 PR c++/81843 - ICE with variadic member template.jason
PR c++/72801 * pt.c (unify_pack_expansion): Don't try to deduce enclosing template args. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256808 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17 PR c++/82331 - ICE with variadic partial specialization of autojason
* pt.c (unify) [TEMPLATE_PARM_INDEX]: Set processing_template_decl around call to tsubst. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256807 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17 PR c++/82760 - memory corruption with aligned new.jason
* call.c (build_operator_new_call): Update *args if we add the align_arg. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256806 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-172018-01-17 Richard Biener <rguenther@suse.de>rguenth
Backport from mainline 2017-12-18 Richard Biener <rguenther@suse.de> PR tree-optimization/81877 * tree-ssa-loop-im.c (ref_indep_loop_p): Remove safelen parameters. (outermost_indep_loop): Adjust. (ref_indep_loop_p_1): Likewise. Remove safelen handling again. (can_sm_ref_p): Adjust. * g++.dg/torture/pr81877.C: New testcase. * g++.dg/vect/pr70729.cc: XFAIL. * g++.dg/vect/pr70729-nest.cc: XFAIL. 2017-12-08 Richard Biener <rguenther@suse.de> PR middle-end/81782 * tree-ssa-uninit.c (warn_uninitialized_vars): Properly handle accesses outside of zero-sized vars. * gcc.dg/uninit-pr81782.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256792 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17[arm] PR target/83687: Fix invalid combination of VSUB + VABS into VABDktkachov
Backport from mailine 2018-01-15 Kyrylo Tkachov <kyrylo.tkachov@arm.com> PR target/83687 * config/arm/iterators.md (VF): New mode iterator. * config/arm/neon.md (neon_vabd<mode>_2): Use the above. 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256791 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17Backport r256266marxin
2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2018-01-04 Jakub Jelinek <jakub@redhat.com> PR ipa/82352 * g++.dg/ipa/pr82352.C (size_t): Define to __SIZE_TYPE__ instead of long unsigned int. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256790 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17Backport r256226marxin
2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2018-01-04 Martin Liska <mliska@suse.cz> PR ipa/82352 * ipa-icf.c (sem_function::merge): Do not cross comdat boundary. 2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2018-01-04 Martin Liska <mliska@suse.cz> PR ipa/82352 * g++.dg/ipa/pr82352.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256789 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17Backport r256177marxin
2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2018-01-03 Martin Liska <mliska@suse.cz> PR ipa/83549 * cif-code.def (VARIADIC_THUNK): New enum value. * ipa-inline-analysis.c (compute_inline_parameters): Do not inline variadic thunks. 2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2018-01-03 Martin Liska <mliska@suse.cz> PR ipa/83549 * g++.dg/ipa/pr83549.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256788 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17Subject: Backport r256009marxin
2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2017-12-27 Martin Liska <mliska@suse.cz> PR tree-optimization/83552 * tree-ssa-strlen.c (fold_strstr_to_strncmp): Assign result of get_string_lenth to a SSA_NAME if not a GIMPLE value. 2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline 2017-12-27 Martin Liska <mliska@suse.cz> PR tree-optimization/83552 * gcc.dg/pr83552.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256786 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-17Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256771 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16 PR testsuite/77734ebotcazou
* gcc.dg/plugin/must-tail-call-1.c: Pass -fdelayed-branch on SPARC. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256757 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16rtlanal: dead_or_set_regno_p should handle CLOBBER (PR83424)segher
In PR83424 combine's move_deaths puts a REG_DEAD note in the wrong place because dead_or_set_regno_p does not account for CLOBBER insns. This fixes it. PR rtl-optimization/83424 * rtlanal.c (dead_or_set_regno_p): Handle CLOBBER just like SET. gcc/testsuite/ PR rtl-optimization/83424 * gcc.dg/pr83424.c: New testsuite. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256750 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16i386: Don't use reference of struct ix86_framehjl
Use reference of struct ix86_frame in ix86_expand_prologue and ix86_expand_epilogue caused: raised STORAGE_ERROR : stack overflow or erroneous memory access make[5]: *** [/export/gnu/import/git/sources/gcc/gcc/ada/Make-generated.in:45: ada/sinfo.h] Error 1 on trunk when bootstrapping GCC with ada on x86-64. * config/i386/i386.c (ix86_expand_prologue): Don't use reference of struct ix86_frame. (ix86_expand_epilogue): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256742 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16x86: Disallow -mindirect-branch=/-mfunction-return= with -mcmodel=largehjl
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256737 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16x86: Add 'V' register operand modifierhjl
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256736 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16x86: Add -mindirect-branch-registerhjl
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256735 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16x86: Add -mfunction-return=hjl
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256734 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16Update ChangeLog entrieshjl
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256733 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16x86: Add -mindirect-branch=hjl
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 * 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 * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256732 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-162018-01-16 Richard Biener <rguenther@suse.de>rguenth
Backport from mainline 2017-09-29 Vladimir Makarov <vmakarov@redhat.com> PR target/81481 * ira-costs.c (scan_one_insn): Don't take into account PIC equiv with a symbol for LRA. * gcc.target/i386/pr81481.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256731 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-16Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256718 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15 Backport from mainlinesegher
2018-01-10 Segher Boessenkool <segher@kernel.crashing.org> PR target/83629 * config/rs6000/rs6000.md (load_toc_v4_PIC_2, load_toc_v4_PIC_3b, load_toc_v4_PIC_3c): Wrap const term in CONST RTL. gcc/testsuite/ Backport from mainline 2018-01-10 Segher Boessenkool <segher@kernel.crashing.org> PR target/83629 * gcc.target/powerpc/pr83629.c: New testcase. 2018-01-12 Segher Boessenkool <segher@kernel.crashing.org> PR target/83629 * gcc.target/powerpc/pr83629.c: Require ilp32. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256711 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15i386: Align stack frame if argument is passed on stackhjl
When a function call is removed, it may become a leaf function. But if argument may be passed on stack, we need to align the stack frame when there is no tail call. Tested on Linux/i686 and Linux/x86-64. gcc/ Backport from mainline PR target/83330 * config/i386/i386.c (ix86_function_arg_advance): Set outgoing_args_on_stack to true if there are outgoing arguments on stack. (ix86_function_arg): Likewise. (ix86_compute_frame_layout): Align stack frame if argument is passed on stack. * config/i386/i386.h (machine_function): Add outgoing_args_on_stack. gcc/testsuite/ Backport from mainline PR target/83330 * gcc.target/i386/pr83330.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256703 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15i386: More use reference of struct ix86_frame to avoid copyhjl
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 * config/i386/i386.c (ix86_expand_prologue): Use reference of struct ix86_frame. (ix86_expand_epilogue): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256695 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15Move ChangeLog entries to gcc/ChangeLoghjl
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256693 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15i386: Use reference of struct ix86_frame to avoid copyhjl
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 * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256692 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15i386: Move struct ix86_frame to machine_functionhjl
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 * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256691 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-15Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256679 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-142018-01-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>jvdelisle
Backport from trunk PR libgfortran/83811 * gfortran.dg/fmt_e.f90: New test. * gfortran.dg/fmt_e.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256675 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-14[gcc]wschmidt
2018-01-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> Backport from mainline 2018-01-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/83677 * config/rs6000/altivec.md (*altivec_vpermr_<mode>_internal): Reverse order of second and third operands in first alternative. * config/rs6000/rs6000.c (rs6000_expand_vector_set): Reverse order of first and second elements in UNSPEC_VPERMR vector. (altivec_expand_vec_perm_le): Likewise. [gcc/testsuite] 2018-01-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> Backport from mainline 2018-01-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/83677 * gcc.target/powerpc/pr83677.c: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256670 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-14 Backport from mainlineuros
2018-01-12 Uros Bizjak <ubizjak@gmail.com> PR target/83628 * config/alpha/alpha.md (*saddsi_1): New insn_ans_split pattern. (*saddl_se_1): Ditto. (*ssubsi_1): Ditto. (*ssubl_se_1): Ditto. Backport from mainline 2018-01-09 Uros Bizjak <ubizjak@gmail.com> PR target/83628 * combine.c (force_int_to_mode) <case ASHIFT>: Use mode instead of op_mode in the force_to_mode call. testsuite/ChangeLog: Backport from mainline 2018-01-12 Uros Bizjak <ubizjak@gmail.com> PR target/83628 * gcc.target/alpha/pr83628-3.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256665 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-14Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256652 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-132012-01-13 Steven G. Kargl <kargl@gcc.gnu.org>kargl
Backport from mainline PR fortran/78814 * interface.c (symbol_rank): Check for NULL pointer. 2012-01-13 Steven G. Kargl <kargl@gcc.gnu.org> Backport from mainline PR fortran/78814 * gfortran.dg/interface_40.f90: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256646 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-13Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256601 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-12gcc/olegendo
Backport from mainline 2018-01-12 Oleg Endo <olegendo@gcc.gnu.org> PR target/81819 * config/rx/rx.c (rx_is_restricted_memory_address): Handle SUBREG case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256579 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-12 PR rtl-optimization/83565ebotcazou
* rtlanal.c (nonzero_bits1): On WORD_REGISTER_OPERATIONS machines, do not extend the result to a larger mode for rotate operations. (num_sign_bit_copies1): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256573 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-12Avoid Solaris/SPARC comparison failures with Solaris as (PR bootstrap/81926)ro
Backport from mainline 2018-01-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR bootstrap/81926 * cgraphunit.c (symbol_table::compile): Switch to text_section before calling assembly_start debug hook. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256562 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-12Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256560 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-11gcc/olegendo
Backport from mainline 2018-01-11 Oleg Endo <olegendo@gcc.gnu.org> PR target/81821 * config/rx/rx.md (BW): New mode attribute. (sync_lock_test_and_setsi): Add mode suffix to insn output. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256538 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-11Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256471 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-102018-01-10 Steven G. Kargl <kargl@gcc.gnu.org>kargl
PR fortran/82367 * resolve.c (resolve_allocate_expr): Check for NULL pointer. 2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/82367 * gfortran.dg/deferred_character_18.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256466 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-102018-01-10 Steven G. Kargl <kargl@gcc.gnu.org>kargl
Backport from trunk PR fortran/83093 * resolve.c (resolve_charlen): Check the type of cl->length after resolution. 2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> Backport from trunk PR fortran/83093 * gfortran.dg/allocate_with_typespec_7.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256459 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-102018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org>kargl
Backport r254555 from trunk PR Fortran/82841 * gfortran.dg/transfer_simplify_11.f90: New test. 2018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org> Backport r254555 from trunk PR Fortran/82841 * simplify.c(gfc_simplify_transfer): Do not dereference a NULL pointer. Unwrap a short line. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256445 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-10Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256414 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-09 * es.po: Update.jsm28
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256409 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-092018-01-09 Richard Biener <rguenther@suse.de>rguenth
Backport from mainline 2018-01-08 Richard Biener <rguenther@suse.de> PR middle-end/83713 * convert.c (do_narrow): Properly guard TYPE_OVERFLOW_WRAPS checks. * g++.dg/torture/pr83713.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256371 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-09RISC-V: Fix -msave-restore bug with sibcalls.wilson
2018-01-08 Monk Chiang <sh.chiang04@gmail.com> Kito Cheng <kito.cheng@gmail.com> gcc/ * config/riscv/riscv.c (machine_function::is_leaf): Remove field. (riscv_leaf_function_p): Delete. (riscv_function_ok_for_sibcall): Return false when TARGET_SAVE_RESTORE. 2018-01-08 Chih-Mao Chen <pkmx.tw@gmail.com> Monk Chiang <sh.chiang04@gmail.com> gcc/testsuite/ * gcc.target/riscv/save-restore-1.c: New. 2017-11-29 Jim Wilson <jimw@sifive.com> gcc/testsuite/ * gcc.target/riscv/riscv.exp: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256363 138bc75d-0d04-0410-961f-82ee72b054a4
2018-01-09Daily bump.gccadmin
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256360 138bc75d-0d04-0410-961f-82ee72b054a4