Commit Graph

164306 Commits

Author SHA1 Message Date
Jeff Law
911ce7b502 * gimple-fold.c (get_range_strlen): Remove dead code.
From-SVN: r264788
2018-10-02 08:10:16 -06:00
Martin Sebor
6c4aa5f6bd builtins.c (unterminated_array): Add new arguments.
* builtins.c (unterminated_array): Add new arguments.
	If argument is not terminated, bubble up size and exact
	state to callers.
	(expand_builtin_strnlen): Detect, avoid expanding
	and diagnose unterminated arrays.
	(c_strlen): Fill in offset of start of unterminated strings.
	* builtins.h (unterminated_array): Update prototype.

	* gcc.dg/warn-strnlen-no-nul.c: New.

Co-Authored-By: Jeff Law <law@redhat.com>

From-SVN: r264787
2018-10-02 08:08:53 -06:00
Jonathan Wakely
469218a3f9 Avoid redundant runtime checks in std::visit
Calling std::get will check some static assertions and also do a runtime
check for a valid index before calling __detail::__variant::__get. The
std::visit function already handles the case where any variant has an
invalid index, so __get can be used directly in __visit_invoke.

	* include/std/variant (__gen_vtable_impl::__visit_invoke): Call __get
	directly instead of get, as caller ensures correct index is used.
	(holds_alternative, get, get_if): Remove redundant inline specifiers.
	(_VARIANT_RELATION_FUNCTION_TEMPLATE): Likewise.

From-SVN: r264786
2018-10-02 15:00:50 +01:00
Richard Biener
f512bf3ee9 sse.md (reduc_plus_scal_v4df): Avoid the use of haddv4df...
2018-10-02  Richard Biener  <rguenther@suse.de>

	* config/i386/sse.md (reduc_plus_scal_v4df): Avoid the use
	of haddv4df, first reduce to SSE width and exploit the fact
	that we only need element zero with the reduction result.
	(reduc_plus_scal_v2df): Likewise.

From-SVN: r264785
2018-10-02 13:06:54 +00:00
Joseph Myers
1c02928295 Use -fno-show-column in libstdc++ installed testing.
<https://gcc.gnu.org/ml/libstdc++/2016-08/msg00006.html> arranged for
libstdc++ tests to use -fno-show-column by default, but only for
build-tree testing.  This patch adds it to the options used for
installed testing as well.

Tested with installed testing for a cross to x86_64-linux-gnu, where
it fixes various test failures.

	* testsuite/lib/libstdc++.exp (libstdc++_init): Use
	-fno-show-column in default cxxflags.

From-SVN: r264784
2018-10-02 13:46:32 +01:00
Bernhard Reutner-Fischer
15b946f77d config: Remove unused define for os uClibc
__NO_STRING_INLINES was removed from uClibc around 2004 so has no
effect.

libstdc++-v3/ChangeLog:

2018-10-01  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>

        * config/os/uclibc/os_defines.h (__NO_STRING_INLINES): Delete.

From-SVN: r264783
2018-10-02 14:35:42 +02:00
Eric Botcazou
be099f3724 dojump.h (do_jump): Delete.
* dojump.h (do_jump): Delete.
	(do_jump_1): Likewise.
	(split_comparison): Move around.
	* dojump.c (do_jump): Make static.
	(do_jump_1): Likewise.
	(jumpifnot): Move around.
	(jumpifnot_1): Likewise.
	(jumpif): Likewise.
	(jumpif_1): Likewise.
	* expr.c (expand_expr_real_1): Call jumpif[not] instead of do_jump.

From-SVN: r264781
2018-10-02 10:55:33 +00:00
Eric Botcazou
5d11b4bf36 reorg.c (make_return_insns): Use emit_copy_of_insn_after for the insns in the delay slot and add_insn_after...
* reorg.c (make_return_insns): Use emit_copy_of_insn_after for the
	insns in the delay slot and add_insn_after for the jump insn.

From-SVN: r264780
2018-10-02 10:20:08 +00:00
Richard Biener
0edf3afe13 c-decl.c (warn_if_shadowing): Do not test DECL_FROM_INLINE.
2018-10-02  Richard Biener  <rguenther@suse.de>

	c/
	* c-decl.c (warn_if_shadowing): Do not test DECL_FROM_INLINE.

	cp/
	* name-lookup.c (check_local_shadow): Do not test DECL_FROM_INLINE.

From-SVN: r264779
2018-10-02 10:08:22 +00:00
Richard Biener
cd6ae11750 tree-inline.c (expand_call_inline): Use the location of the callee declaration for the inline-entry marker.
2018-10-02  Richard Biener  <rguenther@suse.de>

	* tree-inline.c (expand_call_inline): Use the location of
	the callee declaration for the inline-entry marker.
	* final.c (notice_source_line): Remove special-casing of
	NOTE_INSN_INLINE_ENTRY.

From-SVN: r264778
2018-10-02 10:07:29 +00:00
GCC Administrator
491ec3dfa9 Daily bump.
From-SVN: r264777
2018-10-02 00:16:36 +00:00
Ian Lance Taylor
b1d88684bb compiler: use the underlying type to build placeholder type for alias
When asking for a placeholder type of an alias type, build a
    placeholder for the underlying type, instead of treating the
    alias as a named type and calling get_backend. The latter may
    fail as we may not be ready to build a complete backend type. We
    have already used a unified backend type for alias type and its
    underlying type. Do the same for placeholders as well.
    
    Reviewed-on: https://go-review.googlesource.com/138635

From-SVN: r264773
2018-10-01 22:25:52 +00:00
Ian Lance Taylor
44ef03008c libgo: support x32 as GOARCH=amd64p32 GOOS=linux
This is enough to let libgo build when configured using
    --with-multilib-list=m64,m32,mx32.  I don't have an x32-enabled kernel
    so I haven't tested whether it executes correctly.
    
    For https://gcc.gnu.org/PR87470
    
    Reviewed-on: https://go-review.googlesource.com/138817

From-SVN: r264772
2018-10-01 20:17:11 +00:00
Ian Lance Taylor
1b28253347 runtime: add arm64 version of AES hash code
Rewrite the arm64 AES hashing code from gc assembler to C code using
    intrinsics.  The resulting code generates the same hash code for the
    same input as the gc code--that doesn't matter as such, but testing it
    ensures that the C code does something useful.
    
    Reviewed-on: https://go-review.googlesource.com/138535

From-SVN: r264771
2018-10-01 20:14:29 +00:00
Nathan Sidwell
df1346b423 [libiberty] Use pipe inside pex_run
https://gcc.gnu.org/ml/gcc-patches/2018-10/msg00039.html
	* configure.ac (checkfuncs): Add pipe2.
	* config.in, configure: Rebuilt.
	* pex-unix.c (pex_unix_exec_child): Comminicate errors from child
	to parent with a pipe, when possible.

From-SVN: r264769
2018-10-01 18:46:51 +00:00
Joseph Myers
2649038cea * ru.po: Update.
From-SVN: r264766
2018-10-01 18:11:46 +01:00
Carl Love
84eea0f700 Update, forgot to put the PR number in the Change Log.
gcc/ChangeLog:

2018-10-01  Carl Love  <cel@us.ibm.com>

	PR 69431
	* config/rs6000/rs6000-builtin.def (__builtin_mffsl): New.
	(__builtin_mtfsb0): New.
	(__builtin_mtfsb1): New.
	( __builtin_set_fpscr_rn): New.
	(__builtin_set_fpscr_drn): New.
	* config/rs6000/rs6000.c (rs6000_expand_mtfsb_builtin): Add.
	(rs6000_expand_set_fpscr_rn_builtin): Add.
	(rs6000_expand_set_fpscr_drn_builtin): Add.
	(rs6000_expand_builtin): Add case statement entries for
	RS6000_BUILTIN_MTFSB0, RS6000_BUILTIN_MTFSB1,
	RS6000_BUILTIN_SET_FPSCR_RN, RS6000_BUILTIN_SET_FPSCR_DRN,
	RS6000_BUILTIN_MFFSL.
	(rs6000_init_builtins): Add ftype initialization and def_builtin
	calls for __builtin_mffsl, __builtin_mtfsb0, __builtin_mtfsb1,
	__builtin_set_fpscr_rn, __builtin_set_fpscr_drn.
	* config/rs6000.md (rs6000_mtfsb0, rs6000_mtfsb1, rs6000_mffscrn,
	rs6000_mffscdrn): Add define_insn.
	(rs6000_set_fpscr_rn, rs6000_set_fpscr_drn): Add define_expand.
	* doc/extend.texi: Add documentation for the builtins.

gcc/testsuite/ChangeLog:

2018-10-01  Carl Love  <cel@us.ibm.com>

	PR 69431
	* gcc.target/powerpc/test_mffsl-p9.c: New file.
	* gcc.target/powerpc/test_fpscr_rn_builtin.c: New file.
	* gcc.target/powerpc/test_fpscr_drn_builtin.c: New file.
	* gcc.target/powerpc/test_fpscr_rn_builtin_error.c: New file.
	* gcc.target/powerpc/test_fpscr_drn_builtin_error.c: New file.

From-SVN: r264764
2018-10-01 15:57:13 +00:00
Carl Love
2da14663d0 rs6000-builtin.def (__builtin_mffsl): New.
gcc/ChangeLog:

2018-10-01  Carl Love  <cel@us.ibm.com>

	* config/rs6000/rs6000-builtin.def (__builtin_mffsl): New.
	(__builtin_mtfsb0): New.
	(__builtin_mtfsb1): New.
	( __builtin_set_fpscr_rn): New.
	(__builtin_set_fpscr_drn): New.
	* config/rs6000/rs6000.c (rs6000_expand_mtfsb_builtin): Add.
	(rs6000_expand_set_fpscr_rn_builtin): Add.
	(rs6000_expand_set_fpscr_drn_builtin): Add.
	(rs6000_expand_builtin): Add case statement entries for
	RS6000_BUILTIN_MTFSB0, RS6000_BUILTIN_MTFSB1,
	RS6000_BUILTIN_SET_FPSCR_RN, RS6000_BUILTIN_SET_FPSCR_DRN,
	RS6000_BUILTIN_MFFSL.
	(rs6000_init_builtins): Add ftype initialization and def_builtin
	calls for __builtin_mffsl, __builtin_mtfsb0, __builtin_mtfsb1,
	__builtin_set_fpscr_rn, __builtin_set_fpscr_drn.
	* config/rs6000.md (rs6000_mtfsb0, rs6000_mtfsb1, rs6000_mffscrn,
	rs6000_mffscdrn): Add define_insn.
	(rs6000_set_fpscr_rn, rs6000_set_fpscr_drn): Add define_expand.
	* doc/extend.texi: Add documentation for the builtins.

gcc/testsuite/ChangeLog:

2018-10-01  Carl Love  <cel@us.ibm.com>

	* gcc.target/powerpc/test_mffsl-p9.c: New file.
	* gcc.target/powerpc/test_fpscr_rn_builtin.c: New file.
	* gcc.target/powerpc/test_fpscr_drn_builtin.c: New file.
	* gcc.target/powerpc/test_fpscr_rn_builtin_error.c: New file.
	* gcc.target/powerpc/test_fpscr_drn_builtin_error.c: New file.

From-SVN: r264762
2018-10-01 15:41:24 +00:00
Gerald Pfeifer
3553df866a allocator.xml: Adjust link to "Reconsidering Custom Memory Allocation".
* doc/xml/manual/allocator.xml: Adjust link to "Reconsidering
	Custom Memory Allocation".

From-SVN: r264761
2018-10-01 15:17:15 +00:00
Jonathan Wakely
8e4d333b0e Regenerate libstdc++ HTML pages
* doc/html/*: Regenerate.

From-SVN: r264760
2018-10-01 15:28:36 +01:00
Paul Thomas
b093d688da re PR fortran/65677 (Incomplete assignment on deferred-length character variable)
2018-10-01  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65677
	* trans-expr.c (gfc_trans_assignment_1): Set the 'identical'
	flag in the call to gfc_check_dependency.


2018-10-01  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65677
	* gfortran.dg/dependency_52.f90 : Expand the test to check both
	the call to adjustl and direct assignment of the substring.

From-SVN: r264759
2018-10-01 14:27:17 +00:00
Richard Biener
fd5c626c68 re PR tree-optimization/87465 (Loop removal regression)
2018-10-01  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/87465
	* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix typo
	causing branch miscounts.

	* gcc.dg/tree-ssa/cunroll-15.c: New testcase.

From-SVN: r264758
2018-10-01 13:10:48 +00:00
Tamar Christina
329130cc40 Validate and set default parameters for stack-clash.
This patch defines the default parameters and validation for the aarch64
stack clash probing interval and guard sizes.  It cleans up the previous
implementation and insures that at no point the invalidate arguments are
present in the pipeline for AArch64.  Currently they are only corrected once
cc1 initalizes the back-end.

The default for AArch64 is 64 KB for both of these and we only support 4 KB and 64 KB
probes.  We also enforce that any value you set here for the parameters must be
in sync.

If an invalid value is specified an error will be generated and compilation aborted.

gcc/

	* common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAM,
	aarch64_option_default_param):	New.
	(params.h): Include.
	(TARGET_OPTION_VALIDATE_PARAM, aarch64_option_validate_param): New.
	* config/aarch64/aarch64.c (aarch64_override_options_internal): Simplify
	stack-clash protection validation code.

From-SVN: r264757
2018-10-01 13:09:29 +00:00
Tamar Christina
f622a56bcb Update options framework for parameters to properly handle and validate configure time params.
This patch changes it so that default parameters are validated during
initialization. This change is needed to ensure parameters set via by the
target specific common initialization routines still keep the parameters within
the valid range.

gcc/

	* params.c (validate_param): New.
	(add_params): Use it.
	(set_param_value): Refactor param validation into validate_param.
	(diagnostic.h): Include.
	* diagnostic.h (diagnostic_ready_p): New.

From-SVN: r264756
2018-10-01 13:08:10 +00:00
Tamar Christina
03ced4ab9f Allow back-ends to be able to do custom validations on params.
This patch adds the ability for backends to add custom constrains to the param
values by defining a new hook option_validate_param.

This hook is invoked on every set_param_value which allows the back-end to
ensure that the parameters are always within it's desired state.

gcc/

	* params.c (set_param_value):
	Add index of parameter being validated.
	* common/common-target.def (option_validate_param): New.
	* common/common-targhooks.h (default_option_validate_param): New.
	* common/common-targhooks.c (default_option_validate_param): New.
	* doc/tm.texi.in (TARGET_OPTION_VALIDATE_PARAM): New.
	* doc/tm.texi: Regenerate.

From-SVN: r264755
2018-10-01 13:06:53 +00:00
Tamar Christina
c98f502f0a Cleanup the AArch64 testsuite when stack-clash is on.
This patch cleans up the testsuite when a run is done with stack clash
protection turned on.

Concretely this switches off -fstack-clash-protection for a couple of tests:

* assembler scan: some tests are quite fragile in that they check for exact
       assembly output, e.g. check for exact amount of sub etc.  These won't
       match now.
* vla: Some of the ubsan tests negative array indices. Because the arrays weren't
       used before the incorrect $sp wouldn't have been used. The correct value is
       restored on ret.  Now however we probe the $sp which causes a segfault.
* params: When testing the parameters we have to skip these on AArch64 because of our
          custom constraints on them.  We already test them separately so this isn't a
          loss.

Note that the testsuite is not entire clean due to gdb failure caused by alloca with
stack clash. On AArch64 we output an incorrect .loc directive, but this is already the
case with the current implementation in GCC and is a bug unrelated to this patch series.

gcc/testsuite/

	PR target/86486
	* gcc.dg/pr82788.c: Skip for AArch64.
	* gcc.dg/guality/vla-1.c: Turn off stack-clash.
	* gcc.target/aarch64/subsp.c: Likewise.
	* gcc.dg/params/blocksort-part.c: Skip stack-clash checks
	on AArch64.
	* gcc.dg/stack-check-10.c: Add AArch64 specific checks.
	* gcc.dg/stack-check-12.c: ILP32 fixup.
	* gcc.dg/stack-check-5.c: Add AArch64 specific checks.
	* gcc.dg/stack-check-6a.c: Skip on AArch64, we don't support this.
	* testsuite/lib/target-supports.exp
	(check_effective_target_frame_pointer_for_non_leaf): AArch64 does not
	require frame pointer for non-leaf functions.

From-SVN: r264754
2018-10-01 13:05:30 +00:00
Tamar Christina
fbe9af5042 Set default values for stack-clash and do basic validation in back-end.
This patch enforces that the default guard size for stack-clash protection for
AArch64 be 64KB unless the user has overriden it via configure in which case
the user value is used as long as that value is within the valid range.

It also does some basic validation to ensure that the guard size is only 4KB or
64KB and also enforces that for aarch64 the stack-clash probing interval is
equal to the guard size.

gcc/

	PR target/86486
	* config/aarch64/aarch64.c (aarch64_override_options_internal):
	Add validation for stack-clash parameters and set defaults.

From-SVN: r264753
2018-10-01 13:03:31 +00:00
Tamar Christina
630b1e3a18 Allow setting of stack-clash via configure options.
This patch defines a configure option to allow the setting of the default
guard size via configure flags when building the target.

The new flag is:

 * --with-stack-clash-protection-guard-size=<num>

The patch defines a new macro DEFAULT_STK_CLASH_GUARD_SIZE which targets need
to use explicitly is they want to support this configure flag and values that
users may have set.

gcc/

	PR target/86486
	* configure.ac: Add stack-clash-protection-guard-size.
	* doc/install.texi: Document it.
	* config.in (DEFAULT_STK_CLASH_GUARD_SIZE): New.
	* params.def: Update comment for guard-size.
	(PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
	PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL): Update description.
	* configure: Regenerate.

From-SVN: r264752
2018-10-01 13:02:21 +00:00
Tamar Christina
8c6e3b2355 Ensure that outgoing argument size is at least 8 bytes when alloca and stack-clash.
This patch adds a requirement that the number of outgoing arguments for a
function is at least 8 bytes when using stack-clash protection and alloca.

By using this condition we can avoid a check in the alloca code and so have
smaller and simpler code there.

A simplified version of the AArch64 stack frames is:

   +-----------------------+                                              
   |                       |                                                 
   |                       |                                              
   |                       |                                              
   +-----------------------+                                              
   |LR                     |                                              
   +-----------------------+                                              
   |FP                     |                                              
   +-----------------------+                                              
   |dynamic allocations    | ----  expanding area which will push the outgoing
   +-----------------------+       args down during each allocation.
   |padding                |
   +-----------------------+
   |outgoing stack args    | ---- safety buffer of 8 bytes (aligned)
   +-----------------------+

By always defining an outgoing argument, alloca(0) effectively is safe to probe
at $sp due to the reserved buffer being there.  It will never corrupt the stack.

This is also safe for alloca(x) where x is 0 or x % page_size == 0.  In the
former it is the same case as alloca(0) while the latter is safe because any
allocation pushes the outgoing stack args down:

   |FP                     |                                              
   +-----------------------+                                              
   |                       |
   |dynamic allocations    | ----  alloca (x)
   |                       |
   +-----------------------+
   |padding                |
   +-----------------------+
   |outgoing stack args    | ---- safety buffer of 8 bytes (aligned)
   +-----------------------+

Which means when you probe for the residual, if it's 0 you'll again just probe
in the outgoing stack args range, which we know is non-zero (at least 8 bytes).

gcc/

	PR target/86486
	* config/aarch64/aarch64.h (STACK_CLASH_MIN_BYTES_OUTGOING_ARGS,
	STACK_DYNAMIC_OFFSET): New.
	* config/aarch64/aarch64.c (aarch64_layout_frame):
	Update outgoing args size.
	(aarch64_stack_clash_protection_alloca_probe_range,
	TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE): New.

gcc/testsuite/

	PR target/86486
	* gcc.target/aarch64/stack-check-alloca-1.c: New.
	* gcc.target/aarch64/stack-check-alloca-10.c: New.
	* gcc.target/aarch64/stack-check-alloca-2.c: New.
	* gcc.target/aarch64/stack-check-alloca-3.c: New.
	* gcc.target/aarch64/stack-check-alloca-4.c: New.
	* gcc.target/aarch64/stack-check-alloca-5.c: New.
	* gcc.target/aarch64/stack-check-alloca-6.c: New.
	* gcc.target/aarch64/stack-check-alloca-7.c: New.
	* gcc.target/aarch64/stack-check-alloca-8.c: New.
	* gcc.target/aarch64/stack-check-alloca-9.c: New.
	* gcc.target/aarch64/stack-check-alloca.h: New.
	* gcc.target/aarch64/stack-check-14.c: New.
	* gcc.target/aarch64/stack-check-15.c: New.

From-SVN: r264751
2018-10-01 13:00:58 +00:00
Tamar Christina
2c25083e75 Add a hook to support telling the mid-end when to probe the stack.
This patch adds a hook to tell the mid-end about the probing requirements of the
target.  On AArch64 we allow a specific range for which no probing needs to
be done.  This same range is also the amount that will have to be probed up when
a probe is needed after dropping the stack.

Defining this probe comes with the extra requirement that the outgoing arguments
size of any function that uses alloca and stack clash be at the very least 8
bytes.  With this invariant we can skip doing the zero checks for alloca and
save some code.

A simplified version of the AArch64 stack frame is:

   +-----------------------+                                              
   |                       |                                                 
   |                       |                                              
   |                       |                                              
   +-----------------------+                                              
   |LR                     |                                              
   +-----------------------+                                              
   |FP                     |                                              
   +-----------------------+                                              
   |dynamic allocations    | -\      probe range hook effects these       
   +-----------------------+   --\   and ensures that outgoing stack      
   |padding                |      -- args is always > 8 when alloca.      
   +-----------------------+  ---/   Which means it's always safe to probe
   |outgoing stack args    |-/       at SP                                
   +-----------------------+                                              
                                                                                                           

This allows us to generate better code than without the hook without affecting
other targets.

With this patch I am also removing the stack_clash_protection_final_dynamic_probe
hook which was added specifically for AArch64 but that is no longer needed.

gcc/

	PR target/86486
	* explow.c (anti_adjust_stack_and_probe_stack_clash): Support custom
	probe ranges.
	* target.def (stack_clash_protection_alloca_probe_range): New.
	(stack_clash_protection_final_dynamic_probe): Remove.
	* targhooks.h (default_stack_clash_protection_alloca_probe_range) New.
	(default_stack_clash_protection_final_dynamic_probe): Remove.
	* targhooks.c: Likewise.
	* doc/tm.texi.in (TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE): New.
	(TARGET_STACK_CLASH_PROTECTION_FINAL_DYNAMIC_PROBE): Remove.
	* doc/tm.texi: Regenerate.

From-SVN: r264750
2018-10-01 12:58:21 +00:00
Tamar Christina
eb471ba379 Add support for SVE stack clash probing.
This patch adds basic support for SVE stack clash protection.
It is a first implementation and will use a loop to do the
probing and stack adjustments.

An example sequence is:

        .cfi_startproc
        mov     x15, sp
        cntb    x16, all, mul #11
        add     x16, x16, 304
        .cfi_def_cfa_register 15
.SVLPSPL0:
        cmp     x16, 61440
        b.lt    .SVLPEND0
        sub     sp, sp, 61440
        str     xzr, [sp, 0]
        sub     x16, x16, 61440
        b      .SVLPSPL0
.SVLPEND0:
        sub     sp, sp, x16
        .cfi_escape 0xf,0xc,0x8f,0,0x92,0x2e,0,0x8,0x58,0x1e,0x23,0xb0,0x2,0x22

for a 64KB guard size, and for a 4KB guard size

        .cfi_startproc
        mov     x15, sp
        cntb    x16, all, mul #11
        add     x16, x16, 304
        .cfi_def_cfa_register 15
.SVLPSPL0:
        cmp     x16, 3072
        b.lt    .SVLPEND0
        sub     sp, sp, 3072
        str     xzr, [sp, 0]
        sub     x16, x16, 3072
        b       .SVLPSPL0
.SVLPEND0:
        sub     sp, sp, x16
        .cfi_escape 0xf,0xc,0x8f,0,0x92,0x2e,0,0x8,0x58,0x1e,0x23,0xb0,0x2,0x22

This has about the same semantics as alloca, except we prioritize the common case
where no probe is required.  We also change the amount we adjust the stack and
the probing interval to be the nearest value to `guard size - abi buffer` that
fits in the 12-bit shifted immediate used by cmp.

While this would mean we probe a bit more often than we require, in practice the
amount of SVE vectors you'd need to spill is significant. Even more so to enter the
loop more than once.


gcc/

	PR target/86486
	* config/aarch64/aarch64-protos.h (aarch64_output_probe_sve_stack_clash): New.
	* config/aarch64/aarch64.c (aarch64_output_probe_sve_stack_clash,
	aarch64_clamp_to_uimm12_shift): New.
	(aarch64_allocate_and_probe_stack_space): Add SVE specific section.
	* config/aarch64/aarch64.md (probe_sve_stack_clash): New.

gcc/testsuite/

	PR target/86486
	* gcc.target/aarch64/stack-check-prologue-16.c: New test
	* gcc.target/aarch64/stack-check-cfa-3.c: New test.
	* gcc.target/aarch64/sve/struct_vect_24.c: New test.
	* gcc.target/aarch64/sve/struct_vect_24_run.c: New test.

From-SVN: r264749
2018-10-01 12:56:40 +00:00
Tamar Christina
db6b62a858 stack-clash: Add LR assert to layout_frame.
Since stack clash depends on the LR being saved for non-leaf functions this
patch adds an assert such that if this changes we would notice this.

gcc/
	PR target/86486
	* config/aarch64/aarch64.c (aarch64_layout_frame): Add assert.

From-SVN: r264748
2018-10-01 12:53:34 +00:00
Jeff Law
cd1bef27d2 Updated stack-clash implementation supporting 64k probes.
This patch implements the use of the stack clash mitigation for aarch64.
In Aarch64 we expect both the probing interval and the guard size to be 64KB
and we enforce them to always be equal.

We also probe up by 1024 bytes in the general case when a probe is required.

AArch64 has the following probing conditions:

 1a) Any initial adjustment less than 63KB requires no probing.  An ABI defined
     safe buffer of 1Kbytes is used and a page size of 64k is assumed.

  b) Any final adjustment residual requires a probe at SP + 1KB.
     We know this to be safe since you would have done at least one page worth
     of allocations already to get to that point.

  c) Any final adjustment more than remainder (total allocation amount) larger
     than 1K - LR offset requires a probe at SP.


  safe buffer mentioned in 1a is maintained by the storing of FP/LR.
  In the case of -fomit-frame-pointer we can still count on LR being stored
  if the function makes a call, even if it's a tail call.  The AArch64 frame
  layout code guarantees this and tests have been added to check against
  this particular case.

 2) Any allocations larger than 1 page size, is done in increments of page size
    and probed up by 1KB leaving the residuals.

 3a) Any residual for initial adjustment that is less than guard-size - 1KB
     requires no probing.  Essentially this is a sliding window.  The probing
     range determines the ABI safe buffer, and the amount to be probed up.

Incrementally allocating less than the probing thresholds, e.g. recursive functions will
not be an issue as the storing of LR counts as a probe.


                            +-------------------+                                    
                            |  ABI SAFE REGION  |                                    
                  +------------------------------                                    
                  |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |                                    
 maximum amount   |         |                   |                                    
 not needing a    |         |                   |                                    
 probe            |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |                                    
                  |         |                   |        Probe offset when           
                  |         ---------------------------- probe is required           
                  |         |                   |                                    
                  +-------- +-------------------+ --------  Point of first probe     
                            |  ABI SAFE REGION  |                                    
                            ---------------------                                    
                            |                   |                                    
                            |                   |                                    
                            |                   |                                         

Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
Target was tested with stack clash on and off by default.

GLIBC testsuite also ran with stack clash on by default and no new
regressions.


Co-Authored-By: Richard Sandiford <richard.sandiford@linaro.org>
Co-Authored-By: Tamar Christina <tamar.christina@arm.com>

From-SVN: r264747
2018-10-01 12:49:35 +00:00
Tamar Christina
041bfa6f07 Fix caching of tests for multiple variant runs and update existing target-supports tests.
Currently some target supports checks such as vect_int cache their
results in a manner that would cause them not to be rechecked when
running the same tests against a different variant in a multi variant
run.  This causes tests to be skipped or run when they shouldn't be.

there is already an existing caching mechanism in place that does the
caching correctly, but presumably these weren't used because some of these
tests originally only contained static data. e.g. only checked if the target is
aarch64*-*-* etc.

This patch changes every function that needs to do any caching at all to use
check_cached_effective_target which will cache per variant instead of globally.

For those tests that already parameterize over et_index I have created
check_cached_effective_target_indexed to handle this common case by creating a list
containing the property name and the current value of et_index.

These changes result in a much simpler implementation for most tests and a large
reduction in lines for target-supports.exp.

Regtested on
  aarch64-none-elf
  x86_64-pc-linux-gnu
  powerpc64-unknown-linux-gnu
  arm-none-eabi

and no testsuite errors. Difference would depend on your site.exp.
On arm we get about 4500 new testcases and on aarch64 the low 10s.
On PowerPC and x86_64 no changes as expected since the default exp for these
just test the default configuration.

What this means for new target checks is that they should always use either
check_cached_effective_target or check_cached_effective_target_indexed if the
result of the check is to be cached.

As an example the new vect_int looks like

proc check_effective_target_vect_int { } {
    return [check_cached_effective_target_indexed <name> {
      expr {
         <condition>
	}}]
}

The debug information that was once there is now all hidden in
check_cached_effective_target, (called from check_cached_effective_target_indexed)
and so the only thing you are required to do is give it a unique cache name and a condition.

The condition doesn't need to be an if statement so simple boolean expressions are enough here:

         [istarget i?86-*-*] || [istarget x86_64-*-*]
         || ([istarget powerpc*-*-*]
	     && ![istarget powerpc-*-linux*paired*])
         || ...

From-SVN: r264745
2018-10-01 12:34:05 +00:00
MCC CS
03cc70b5f1 re PR tree-optimization/87261 (Optimize bool expressions)
2018-10-01  MCC CS <deswurstes@users.noreply.github.com>

	PR tree-optimization/87261
	* match.pd: Remove trailing whitespace.
	Add (x & y) | ~(x | y) -> ~(x ^ y),
	(~x | y) ^ (x ^ y) -> x | ~y and (x ^ y) | ~(x | y) -> ~(x & y)

	* gcc.dg/pr87261.c: New test.

From-SVN: r264744
2018-10-01 11:25:45 +00:00
Eric Botcazou
6cc430c19a c-ada-spec.c (get_underlying_decl): Get to the main type variant.
* c-ada-spec.c (get_underlying_decl): Get to the main type variant.
	(dump_ada_node): Add const keyword.

From-SVN: r264738
2018-10-01 09:39:28 +00:00
Claudiu Zissulescu
e04108c727 [ARC] Avoid specific constants to end in limm field.
Avoid constants to end up in the limm field for particular
instructions when compiling for size.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc.md (*add_n): Clean up pattern, update instruction
	constraints.
	(ashlsi3_insn): Update instruction constraints.
	(ashrsi3_insn): Likewise.
	(rotrsi3): Likewise.
	(add_shift): Likewise.
	* config/arc/constraints.md (Csz): New 32 bit constraint. It
	avoids placing in the limm field small constants which, otherwise,
	could end into a small instruction.

testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* gcc.target/arc/tph_addx.c: New test.

From-SVN: r264737
2018-10-01 11:37:46 +02:00
Claudiu Zissulescu
97e1d32c5e [ARC] Check for odd-even register when emitting double mac ops.
gcc/
	Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc.md (maddsidi4_split): Don't use dmac if the
	destination register is not odd-even.
	(umaddsidi4_split): Likewise.

gcc/testsuite/
	Claudiu Zissulescu  <claziss@synopsys.com>

	* gcc.target/arc/tmac-3.c: New file.

From-SVN: r264736
2018-10-01 11:37:33 +02:00
Richard Biener
796a2bb274 tree-inline.c (expand_call_inline): Store origin of fn in BLOCK_ABSTRACT_ORIGIN for the inline BLOCK.
2018-10-01  Richard Biener  <rguenther@suse.de>

	* tree-inline.c (expand_call_inline): Store origin of fn
	in BLOCK_ABSTRACT_ORIGIN for the inline BLOCK.
	* tree.c (block_ultimate_origin): Simplify and do some
	checking.

From-SVN: r264734
2018-10-01 07:48:51 +00:00
Alexandre Oliva
cb8c960e44 [Ada] use -gnatd_A to disable .ali on -fcompare-debug recompile
for  gcc/ada/ChangeLog

	* gcc-interface/lang-specs.h (default_compilers): When given
	fcompare-debug-second, adjust auxbase like cc1, and pass
	gnatd_A.
	* gcc-interface/misc.c (flag_compare_debug): Remove variable.
	(gnat_post_options): Do not set it.
	* lib-writ.adb (flag_compare_debug): Remove import.
	(Write_ALI): Do not test it.

From-SVN: r264732
2018-10-01 00:27:45 +00:00
GCC Administrator
f89d27f2c3 Daily bump.
From-SVN: r264731
2018-10-01 00:16:42 +00:00
Uros Bizjak
b38ab29fe9 mmx.md (EMMS): New int iterator.
* config/i386/mmx.md (EMMS): New int iterator.
	(emms): New int attribute.
	(mmx_<emms>): Macroize insn from *mmx_emms and *mmx_femms using
	EMMS int iterator.  Explicitly declare clobbers.
	(mmx_emms): Remove expander.
	(mmx_femms): Ditto.
	* config/i386/predicates.md (emms_operation): Remove predicate.
	(vzeroall_pattern): New predicate.
	(vzeroupper_pattern): Rename from vzeroupper_operation.
	* config/i386/i386.c (ix86_avx_u128_mode_after): Use
	vzeroupper_pattern and vzeroall_pattern predicates.

From-SVN: r264727
2018-10-01 00:13:36 +02:00
Peter Bergner
0df92803a9 re PR rtl-optimization/86939 (IRA incorrectly creates an interference between a pseudo register and a hard register)
gcc/
	PR rtl-optimization/86939
	* ira-lives.c (make_hard_regno_born): Rename from this...
	(make_hard_regno_live): ... to this.  Remove update to conflict
	information.  Update function comment.
	(make_hard_regno_dead): Add conflict information update.  Update
	function comment.
	(make_object_born): Rename from this...
	(make_object_live): ... to this.  Remove update to conflict information.
	Update function comment.
	(make_object_dead):  Add conflict information update.  Update function
	comment.
	(mark_pseudo_regno_live): Call make_object_live.
	(mark_pseudo_regno_subword_live): Likewise.
	(mark_hard_reg_dead): Update function comment.
	(mark_hard_reg_live): Call make_hard_regno_live.
	(process_bb_node_lives): Likewise.
	* lra-lives.c (make_hard_regno_born): Rename from this...
	(make_hard_regno_live): ... to this.  Remove update to conflict
	information.  Remove now uneeded check_pic_pseudo_p argument.
	Update function comment.
	(make_hard_regno_dead): Add check_pic_pseudo_p argument and add update
	to conflict information.  Update function comment.
	(mark_pseudo_live): Remove update to conflict information.  Update
	function comment.
	(mark_pseudo_dead): Add conflict information update.
	(mark_regno_live): Call make_hard_regno_live.
	(mark_regno_dead): Call make_hard_regno_dead with new arguement.
	(process_bb_lives): Call make_hard_regno_live and make_hard_regno_dead.

From-SVN: r264726
2018-09-30 15:03:14 -05:00
Paul Thomas
a086078b8f re PR fortran/87359 (pointer being freed was not allocated)
2018-09-30  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/87359
	* trans-array.c (gfc_is_reallocatable_lhs): Correct the problem
	introduced by r264358, which prevented components of associate
	names from being reallocated on assignment.


2018-09-30  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/87359
	* gfortran.dg/associate_40.f90 : New test.

From-SVN: r264725
2018-09-30 13:52:55 +00:00
Paul Thomas
ba08c70a0c re PR fortran/70752 (Incorrect LEN for ALLOCATABLE CHARACTER)
2018-09-30  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/70752
	PR fortran/72709
	* trans-array.c (gfc_conv_scalarized_array_ref): If this is a
	deferred type and the info->descriptor is present, use the
	info->descriptor
	(gfc_conv_array_ref): Is the se expr is a descriptor type, pass
	it as 'decl' rather than the symbol backend_decl.
	(gfc_array_allocate): If the se string_length is a component
	reference, fix it and use it for the expression string length
	if the latter is not a variable type. If it is a variable do
	an assignment. Make use of component ref string lengths to set
	the descriptor 'span'.
	(gfc_conv_expr_descriptor): For pointer assignment, do not set
	the span field if gfc_get_array_span returns zero.
	* trans.c (get_array_span): If the upper bound a character type
	is zero, use the descriptor span if available.


2018-09-30  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/70752
	PR fortran/72709
	* gfortran.dg/deferred_character_25.f90 : New test.
	* gfortran.dg/deferred_character_26.f90 : New test.
	* gfortran.dg/deferred_character_27.f90 : New test to verify
	that PR82617 remains fixed.

From-SVN: r264724
2018-09-30 12:22:07 +00:00
Gerald Pfeifer
f1525dd4b4 messages.xml: Switch link to www.oracle.com to https.
* doc/xml/manual/messages.xml: Switch link to www.oracle.com
	to https.

From-SVN: r264723
2018-09-30 11:41:31 +00:00
Gerald Pfeifer
8b3f158946 policy_data_structures_biblio.xml: Update link to Microsoft Component Model Object Technologies.
* doc/xml/manual/policy_data_structures_biblio.xml: Update
	link to Microsoft Component Model Object Technologies.

From-SVN: r264722
2018-09-30 10:53:14 +00:00
Paul Thomas
8ba60ec434 re PR fortran/70149 ([F08] Character pointer initialization causes ICE)
2018-09-30  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/70149
	* trans-decl.c (gfc_get_symbol_decl): A deferred character
	length pointer that is initialized needs the string length to
	be initialized as well.

2018-09-30  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/70149
	* gfortran.dg/deferred_character_24.f90 : New test.

From-SVN: r264721
2018-09-30 07:02:49 +00:00
GCC Administrator
5e8b5d90ca Daily bump.
From-SVN: r264720
2018-09-30 00:16:20 +00:00
H.J. Lu
bdfbaa72c5 i386: Use TImode for BLKmode values in 2 integer registers
When passing and returning BLKmode values in 2 integer registers, use
1 TImode register instead of 2 DImode registers. Otherwise, V1TImode
may be used to move and store such BLKmode values, which prevent RTL
optimizations.

gcc/

	PR target/87370
	* config/i386/i386.c (construct_container): Use TImode for
	BLKmode values in 2 integer registers.

gcc/testsuite/

	PR target/87370
	* gcc.target/i386/pr87370.c: New test.

From-SVN: r264716
2018-09-29 14:59:59 -07:00