Commit Graph

142885 Commits

Author SHA1 Message Date
Segher Boessenkool
586cdac8e5 rs6000: Clean up the cstore code a bit
"register_operand" was a bit confusing.  Also some other minor cleanups.


	* (cstore<mode>4_unsigned): Use gpc_reg_operand instead of
	register_operand.  Remove empty constraints.  Use std::swap.
	(cstore_si_as_di, cstore<mode>4_signed_imm,
	cstore<mode>4_unsigned_imm, cstore<mode>4 for GPR): Use
	gpc_reg_operand instead of register_operand.
	(cstore<mode>4 for FP): Use gpc_reg_operand instead of
	register_operand.  Remove empty constraints.

From-SVN: r231287
2015-12-04 18:28:54 +01:00
Nick Clifton
04a9ae287f gcc * config.gcc (extra_gcc_objs): Define for MSP430.
* common/config/msp430/msp430-common.c (msp430_handle_option):
	Pass both -mmcu and -mcpu on to the back end if they are both
	defined.
	* config/msp430/msp430.c (hwmult_name): New function.
        (msp430_option_override): If an unrecognised MCU name is
	detected only warn if the user has not provided suitable
        -mhwmult and -mcpu options.  Use msp430_warn_mcu to control
	warning messages.  Generate warnings about conflicts between
	-mmcu and -mcpu and -mhwmult options. 
	If neither -mcpu nor -mmcu have been specified but -mhwmult=
	f5series has the select the 430X isa.
	(msp430_no_hwmult): If -mmcu has not been specified and
	msp430_hwmult_type is AUTO then return true.
	* config/msp430/msp430.h (EXTRA_SPEC_FUNCTIONS): Define.
	(LIB_SPEC): Add hardware multiply library selection.
	* config/msp430/t-msp430: Delete hardware multiply multilibs.
	Add rule to build driver-msp430.o
	* config/msp430/driver-msp430.c: New file.
	* config/msp430/msp430.opt (warn-mcu): New option.
	* doc/invoke.texi: Update description of -mhwmult=auto.
        Document -mwarn-mcu option.

tests	* gcc.target/msp430/msp_abi_div_funcs.c: New test.
	* gcc.target/msp430/mul_main.h: New test support file.
	* gcc.target/msp430/mul_none.c: New test.
	* gcc.target/msp430/mul_16bit.c: New test.
	* gcc.target/msp430/mul_32bit.c: New test.
	* gcc.target/msp430/mul_f5.c: New test.

libgcc	* config/msp430/mpy.c (__mulhi3): Use a faster algorithm.
	Allow for the second argument being negative.
	* config.host (extra_parts): Define for MSP430.  Create separate
	libraries for each of the hardware multiply formats.
	* config/msp430/lib2hw_mul.S: Build only the multiply routines
	that are needed.
	* config/msp430/lib2mul.c: Likewise.
	* config/msp430/t-msp430 (LIB2ADD): Remove lib2hw_mul.S.
	Add rules to build hardware multiply libraries.
	* config/msp430/lib2divSI.c: (__mspabi_divlu): Alias for
	__mspabi_divul function.
	(__mspabi_divllu): New stub function.

From-SVN: r231286
2015-12-04 17:24:30 +00:00
Segher Boessenkool
4b5d538ba7 I really do hate this keyboard.
From-SVN: r231285
2015-12-04 18:22:38 +01:00
Segher Boessenkool
2f74c72b13 rs6000: Implement cstore for signed Pmode register compares
This implements cstore for the last case we do not yet handle, using
the superopt algo from the venerable CWG.  The only integer cases we
do still not handle after this are for -m32 -mpowerpc64.


	* (cstore<mode>4_signed): New expander.
	(cstore<mode>4): Call it.

From-SVN: r231284
2015-12-04 18:21:49 +01:00
Jakub Jelinek
5c24689633 * tree-tailcall.c (find_tail_calls): Ignore GIMPLE_NOPs.
From-SVN: r231282
2015-12-04 17:40:05 +01:00
Steven G. Kargl
6b2e46bf85 re PR fortran/68684 (gcc/fortran/resolve.c:8748: bad if test ?)
2015-12-04  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/68684
	* resolve.c (resolve_lock_unlock_event): Fix logic faux pas.

From-SVN: r231281
2015-12-04 16:37:54 +00:00
Jakub Jelinek
4e722cf1dc re PR tree-optimization/68680 (On-stack VLA does not cause instrumentation with -fstack-protector)
PR tree-optimization/68680
	* calls.c (special_function_p): Return ECF_MAY_BE_ALLOCA for
	BUILT_IN_ALLOCA{,_WITH_ALIGN}.  Don't check for __builtin_alloca
	by name.

	* gcc.target/i386/pr68680.c: New test.

From-SVN: r231279
2015-12-04 17:32:22 +01:00
Jakub Jelinek
83b58b6b0e re PR tree-optimization/68671 (gcc.dg/torture/pr66952.c FAILs with -fno-tree-dce)
PR tree-optimization/68671
	* tree-ssa-reassoc.c (maybe_optimize_range_tests): For basic
	blocks starting with the successor of first bb we've modified
	and ending with last_bb call reset_flow_sensitive_info_in_bb.

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

From-SVN: r231278
2015-12-04 17:23:27 +01:00
Jeff Law
8010f31fc7 tree-ssa-reassoc.c (maybe_optimize_range_tests): Return boolean indicating if a gimple conditional was optimized to true/false.
* tree-ssa-reassoc.c (maybe_optimize_range_tests): Return boolean
	indicating if a gimple conditional was optimized to true/false.
	(reassociate_bb): Bubble up return value from
	maybe_optimize_range_tests.
	(do_reassoc): Similarly, but for reassociate_bb.
	(execute_reassoc): Return TODO_cleanup_cfg as needed.

	* gcc.dg/tree-ssa/reassoc-43.c: New test.

From-SVN: r231277
2015-12-04 09:19:30 -07:00
Kyrylo Tkachov
7d9425d46b [AArch64] Don't allow -mgeneral-regs-only to change the .arch assembler directives
* config/aarch64/aarch64.c (aarch64_override_options_internal):
	Do not alter target_flags due to TARGET_GENERAL_REGS_ONLY_P.
	* doc/invoke.texi (AArch64 options): Mention that -mgeneral-regs-only
	does not affect the assembler directives.

	* gcc.target/aarch64/mgeneral-regs_4.c: New test.

From-SVN: r231275
2015-12-04 15:02:42 +00:00
Dominik Vogt
7d471c9033 S/390: Add -mbackchain options to fix test failure.
gcc/testsuite/ChangeLog

	* gcc.dg/Wframe-address.c: S/390 requires the -mbackchain option to
	access arbitrary stack frames.
	* gcc.dg/Wno-frame-address.c: Likewise.

From-SVN: r231273
2015-12-04 14:35:14 +00:00
Dominik Vogt
7763d97294 [PATCH 2/2] S/390: Implement "target" attribute.
gcc/ChangeLog

	* config/s390/s390.c (s390_asm_file_start): Implement hook function to
	emit .machine and .machinemode to the top of the assembler file.
	(TARGET_ASM_FILE_START): Provide target hook.
	(s390_asm_output_machine_for_arch): Protect with
	HAVE_AS_MACHINE_MACHINEMODE instead of S390_USE_TARGET_ATTRIBUTE.

gcc/testsuite/ChangeLog

	* gcc.target/s390/asm-machine-1.c: Updated.
	* gcc.target/s390/asm-machine-2.c: Updated.
	* gcc.target/s390/asm-machine-3.c: Updated.
	* gcc.target/s390/asm-machine-4.c: Updated.

From-SVN: r231272
2015-12-04 14:33:01 +00:00
Dominik Vogt
ec47b0863a [PATCH 1/2] S/390: Implement "target" attribute.
gcc/ChangeLog

	* config/s390/s390.opt (s390_arch_string): Remove.
	(s390_tune_string): Likewise.
	(s390_cost_pointer): Add Variable.
	(s390_tune_flags): Add TargetVariable.
	(s390_arch_flags, march=, mbackchain, mdebug, mesa, mhard-dfp),
	(mhard-float, mlong-double-128, mlong-double-64, mhtm, mvx),
	(mpacked-stack, msmall-exec, msoft-float, mstack-guard=, mstack-size=),
	(mtune=, mmvcle, mzvector, mzarch, mbranch-cost=, mwarn-dynamicstack),
	(mwarn-framesize=): Save option.
	(mno-stack-guard, mno-stack-guard): New option.
	(mwarn-dynamicstack): Allow mno-warn-dynamicstack.
	(mwarn-framesize=): Convert to UInteger (negative values are rejected
	now).
	* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Split setting
	macros changeable through the GCC target pragma into a separate
	function.
	(s390_cpu_cpp_builtins): Likewise.
	(s390_pragma_target_parse): New function, implement GCC target pragma
	if enabled.
	(s390_register_target_pragmas): Register s390_pragma_target_parse if
	available.
	* common/config/s390/s390-common.c (s390_handle_option):
	Export.
	Move setting s390_arch_flags to s390.c.
	Remove s390_tune_flags.
	Allow 0 as argument to -mstack-size (switch to default value).
	Allow 0 as argument to -mstack-guard (switch off).
	Remove now unnecessary explicit parsing code for -mwarn-framesize.
	* config/s390/s390-protos.h (s390_handle_option): Export.
	(s390_valid_target_attribute_tree): Export.
	(s390_reset_previous_fndecl): Export.
	* config/s390/s390-builtins.def: Use new macro B_GROUP to mark the start
	and end of HTM and VX builtins.
	(s390_asm_output_function_prefix): Declare hook.
	(s390_asm_declare_function_size): Likewise.
	* config/s390/s390-builtins.h (B_GROUP): Use macro.
	* config/s390/s390-opts.h: Add comment about processor_type usage.
	* config/s390/s390.h (TARGET_CPU_IEEE_FLOAT_P, TARGET_CPU_ZARCH_P),
	(TARGET_CPU_LONG_DISPLACEMENT_P, TARGET_CPU_EXTIMM_P, TARGET_CPU_DFP_P),
	(TARGET_CPU_Z10_P, TARGET_CPU_Z196_P, TARGET_CPU_ZEC12_P),
	(TARGET_CPU_HTM_P, TARGET_CPU_Z13_P, TARGET_CPU_VX_P),
	(TARGET_HARD_FLOAT_P, TARGET_LONG_DISPLACEMENT_P, TARGET_EXTIMM_P),
	(TARGET_DFP_P, TARGET_Z10_P, TARGET_Z196_P, TARGET_ZEC12_P),
	(TARGET_HTM_P, TARGET_Z13_P, TARGET_VX_P, TARGET_CPU_EXTIMM),
	(TARGET_CPU_DFP, TARGET_CPU_Z10, TARGET_CPU_Z196, TARGET_CPU_ZEC12),
	(TARGET_CPU_HTM, TARGET_CPU_Z13, TARGET_LONG_DISPLACEMENT),
	(TARGET_EXTIMM, TARGET_DFP, TARGET_Z10, TARGET_Z196, TARGET_ZEC12),
	(TARGET_Z13, TARGET_VX, S390_USE_TARGET_ATTRIBUTE),
	(S390_USE_ARCHITECTURE_MODIFIERS, SWITCHABLE_TARGET),
	(ASM_DECLARE_FUNCTION_SIZE, ASM_OUTPUT_FUNCTION_PREFIX): Likewise.
	* config/s390/vecintrin.h: Use vector definitions even if __VEC__ is
	undefined.
	(vec_all_nan): Rewrite as macro using statement expressions to avoid
	that the vector keyword needs to be defined when including the file.
	(vec_all_numeric): Likewise.
	(vec_any_nan): Likewise.
	(vec_any_numeric):  Likewise.
	* config/s390/s390.c (s390_previous_fndecl): New static variable.
	(s390_set_current_function): New function.
	(s390_cost): Wrapper macro to allow defining the cost table pointer in
	the options file.
	(processor_table): Table for march= and mtune= parsing.
	(s390_init_builtins): Enable all builtins and types unconditionally.
	(s390_expand_builtin): Generate an error message if builtin is not
	supported by current options.
	Correct an error message.
	(s390_function_specific_restore): New function to set s390_cost.
	(s390_asm_output_machine_for_arch): New function for emitting .machine
	and .machinmode directives to the assembler file.
	(s390_asm_output_function_prefix): Likewise.
	(s390_asm_declare_function_size):  Likewise.
	(s390_asm_output_function_label): Add mdebug output for feature testing.
	(s390_option_override): Move implementation into internal function.
	(s390_option_override_internal): Likewise.
	Implement option overriding based on current options.
	(s390_valid_target_attribute_inner_p): New function implementing target
	attribute logic.
	(s390_valid_target_attribute_tree): Likewise.
	(s390_valid_target_attribute_p): Likewise.
	(s390_reset_previous_fndecl): Likewise.
	(s390_set_current_function): Likewise.
	(TARGET_SET_CURRENT_FUNCTION): Provide target hook function.
	(TARGET_OPTION_VALID_ATTRIBUTE_P): Likewise.
	(TARGET_OPTION_RESTORE): Likewise.
	* doc/extend.texi: S390: Document target attribute and pragma.
	* config.in: Regenerated.
	* configure: Regenerated.
	* configure.ac: S390: Check for .machinemode and .machine in gas.
	S390: Check for architecture modifiers support in gas.

gcc/testsuite/ChangeLog

	* gcc.target/s390/asm-machine-1.c: New test.
	* gcc.target/s390/asm-machine-2.c: New test.
	* gcc.target/s390/asm-machine-3.c: New test.
	* gcc.target/s390/asm-machine-4.c: New test.
	* gcc.target/s390/target-attribute/tattr-1.c: New test.
	* gcc.target/s390/target-attribute/tattr-2.c: New test.
	* gcc.target/s390/target-attribute/tattr-3.c: New test.
	* gcc.target/s390/target-attribute/tattr-4.c: New test.
	* gcc.target/s390/target-attribute/tattr-5.c: New test.
	* gcc.target/s390/target-attribute/tattr-6.c: New test.
	* gcc.target/s390/target-attribute/tattr-7.c: New test.
	* gcc.target/s390/target-attribute/tattr-8.c: New test.
	* gcc.target/s390/target-attribute/tattr-9.c: New test.
	* gcc.target/s390/target-attribute/tattr-10.c: New test.
	* gcc.target/s390/target-attribute/tattr-11.c: New test.
	* gcc.target/s390/target-attribute/tattr-12.c: New test.
	* gcc.target/s390/target-attribute/tattr-13.c: New test.
	* gcc.target/s390/target-attribute/tattr-14.c: New test.
	* gcc.target/s390/target-attribute/tattr-15.c: New test.
	* gcc.target/s390/target-attribute/tattr-16.c: New test.
	* gcc.target/s390/target-attribute/tattr-17.c: New test.
	* gcc.target/s390/target-attribute/tattr-18.c: New test.
	* gcc.target/s390/target-attribute/tattr-19.c: New test.
	* gcc.target/s390/target-attribute/tattr-arch-tune-1.c: New test.
	* gcc.target/s390/target-attribute/tattr-arch-tune-2.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-1.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-2.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-3.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-4.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-5.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-6.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-7.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-8.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-9.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-10.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-11.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-12.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-13.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-14.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-15.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-16.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-17.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-18.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-19.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-20.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-21.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-22.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-23.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-24.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-25.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-26.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-27.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-28.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-29.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-30.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-31.c: New test.
	* gcc.target/s390/target-attribute/tattr-m31-32.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-1.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-2.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-3.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-4.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-5.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-6.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-7.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-8.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-9.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-10.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-11.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-12.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-13.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-14.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-15.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-16.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-17.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-18.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-19.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-20.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-21.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-22.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-23.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-24.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-25.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-26.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-27.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-28.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-29.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-30.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-31.c: New test.
	* gcc.target/s390/target-attribute/tattr-m64-32.c: New test.
	* gcc.target/s390/target-attribute/tpragma-struct-vx-2.c: New test.
	* gcc.target/s390/s390.exp (check_effective_target_target_attribute):
	Add check whether target attribute is available.
	Run test in target-attribute subdir.
	* gcc.target/s390/s390-c++.exp
	(check_effective_target_target_attribute): Likewise.

From-SVN: r231271
2015-12-04 14:30:42 +00:00
Kirill Yukhin
e7b69085f8 Add notinbranch/inbranch flags to attribute __simd__.
gcc/
	* c-family/c-common.c (c_common_attribute_table[]): Update max arguments
	count for "simd" attribute.
	(handle_simd_attribute): Parse "notinbranch" and "inbranch" arguments.
	* doc/extend.texi ("simd"): Describe new flags.
gcc/testsuite/
	* c-c++-common/attr-simd-4.c: New test.
	* c-c++-common/attr-simd-5.c: New test.

From-SVN: r231270
2015-12-04 14:22:06 +00:00
Ilya Enkovich
c48516f9a2 sse.md (<avx512>_store<mode>_mask): Fix operand checked for alignment.
gcc/

	* config/i386/sse.md (<avx512>_store<mode>_mask): Fix
	operand checked for alignment.

From-SVN: r231269
2015-12-04 14:18:58 +00:00
Nathan Sidwell
dc3d2aebdc nvptx.c (write_one_arg): Deal with prologue emission too.
* config/nvptx/nvptx.c (write_one_arg): Deal with prologue
	emission too. Change 'no_arg_types' to 'prototyped'.
	(write_fn_proto):  Use write_one_arg for stdarg, static chain &
	main.
	(nvptx_declare_function_name): Use write_one_arg for prologue copies.

From-SVN: r231267
2015-12-04 14:02:27 +00:00
Nathan Sidwell
96d977a8f3 * gcc.dg/graphite/id-28.c: Requires pthreads.
From-SVN: r231266
2015-12-04 13:47:47 +00:00
Richard Biener
1d6e77c504 tree-ssa-sccvn.c (sccvn_dom_walker): Add unreachable_dom member and initialize it.
2015-12-04  Richard Biener  <rguenther@suse.de>

	* tree-ssa-sccvn.c (sccvn_dom_walker): Add unreachable_dom
	member and initialize it.
	(sccvn_dom_walker::after_dom_children): Reset unreachable_dom
	if necessary.
	(sccvn_dom_walker::before_dom_children): If unreachable_dom
	is set BB is not reachable either.  Set unreachable_dom
	if not set and BB is unreachable.

From-SVN: r231262
2015-12-04 12:32:26 +00:00
Richard Biener
1a8c6effec bitmap.c (bitmap_find_bit): Guard the bitmap descriptor query with GATHER_STATISTICS.
2015-12-04  Richard Biener  <rguenther@suse.de>

	* bitmap.c (bitmap_find_bit): Guard the bitmap descriptor
	query with GATHER_STATISTICS.

From-SVN: r231261
2015-12-04 11:58:59 +00:00
Eric Botcazou
03c0079882 re PR middle-end/65958 (-fstack-check breaks alloca on architectures using generic stack checking)
PR middle-end/65958
	* gimplify.c (struct gimplify_ctx): Turn boolean fields into 1-bit
	fields, add keep_stack and reorder them.
	(gimplify_bind_expr): Save gimplify_ctxp->keep_stack on entry then
	set it to false.  Do not insert a stack save/restore pair if it has
	been set to true by the gimplification of the statements.
	Restore it to the saved value on exit if it is still false.
	(gimplify_vla_decl): Do not set gimplify_ctxp->save_stack here.
	(gimplify_call_expr) <BUILT_IN_ALLOCA[_WITH_ALIGN]>: New case.  Set
	either save_stack or keep_stack depending on CALL_ALLOCA_FOR_VAR_P.
	* doc/extend.texi (Variable Length): Document new behavior.
	* doc/generic.texi (Blocks): Document new handling of VLAs.

From-SVN: r231260
2015-12-04 11:57:15 +00:00
Eric Botcazou
a3eb8a52b5 re PR middle-end/65958 (-fstack-check breaks alloca on architectures using generic stack checking)
PR middle-end/65958
	* config/aarch64/aarch64-protos.h (aarch64_output_probe_stack-range):
	Declare.
	* config/aarch64/aarch64.md: Declare UNSPECV_BLOCKAGE and
	UNSPEC_PROBE_STACK_RANGE.
	(blockage): New instruction.
	(probe_stack_range_<PTR:mode>): Likewise.
	* config/aarch64/aarch64.c (aarch64_emit_probe_stack_range): New
	function.
	(aarch64_output_probe_stack_range): Likewise.
	(aarch64_expand_prologue): Invoke aarch64_emit_probe_stack_range if
	static builtin stack checking is enabled.
	* config/aarch64/aarch64-linux.h (STACK_CHECK_STATIC_BUILTIN):
	Define to 1.

Co-Authored-By: Tristan Gingold <gingold@adacore.com>

From-SVN: r231259
2015-12-04 11:52:04 +00:00
Richard Biener
9b8b2f672d re PR testsuite/68681 (testcase gcc.dg/vect/pr45752.c fails on AArch64)
2015-12-04  Richard Biener  <rguenther@suse.de>

	PR testsuite/68681
	* gcc.dg/vect/pr45752.c: Add --param tree-reassoc-width=1.

From-SVN: r231253
2015-12-04 09:56:28 +00:00
Kyrylo Tkachov
dcc75da435 [ARM] PR target/68214: Delete IP-reg-clobbering call-through-mem patterns
PR target/68214
	* config/arm/arm.md (*call_mem): Delete pattern.
	(*call_value_mem): Likewise.
	* config/arm/arm.c (output_call_mem): Delete.
	* config/arm/arm-protos.h (output_call_mem): Delete prototype.

From-SVN: r231252
2015-12-04 09:44:42 +00:00
Bin Cheng
d90085b9dc atomics.md (atomic_store<mode>): Use predicate aarch64_sync_memory_operand.
* config/aarch64/atomics.md (atomic_store<mode>): Use predicate
	aarch64_sync_memory_operand.

From-SVN: r231251
2015-12-04 09:35:22 +00:00
Eric Botcazou
f187980b5e c-tree.h (c_build_va_arg): Adjust prototype.
* c-tree.h (c_build_va_arg): Adjust prototype.
	* c-parser.c (c_parser_postfix_expression): Adjust call to above.
	* c-typeck.c (c_build_va_arg): Rename LOC parameter to LOC2, add LOC1
	parameter, adjust throughout and issue an error if EXPR is a component
	with reverse storage order.

From-SVN: r231250
2015-12-04 08:52:24 +00:00
Jakub Jelinek
e315eea9d0 re PR target/68655 (SSE2 cannot vec_perm of low and high part)
PR target/68655
	* config/i386/i386.c (canonicalize_vector_int_perm): New function.
	(expand_vec_perm_1): Use it and recurse if everything else
	failed.  Use nd.perm instead of perm2.
	(expand_vec_perm_even_odd_1): If testing_p, use gen_raw_REG
	instead of gen_lowpart for the target.
	(ix86_expand_vec_perm_const_1): Use canonicalize_vector_int_perm
	and recurse if everything else failed.

	* gcc.dg/torture/vshuf-4.inc (TESTS): Add one extra test.
	* gcc.dg/torture/vshuf-4.inc (TESTS): Add two extra tests.

From-SVN: r231247
2015-12-04 09:25:24 +01:00
Richard Biener
5505978ab3 re PR rtl-optimization/68636 (unnecessary unaligned load on mips o32)
2015-12-04  Richard Biener  <rguenther@suse.de>

	PR middle-end/68636
	* builtins.c (get_pointer_alignment_1): Take care of byte to
	bit alignment computation overflow.

From-SVN: r231246
2015-12-04 08:17:50 +00:00
Richard Biener
7fe996ba15 re PR middle-end/67438 (~X op ~Y pattern relocation causes loop performance degradation on 32bit x86)
2015-12-04  Richard Biener  <rguenther@suse.de>

	PR middle-end/67438
	* match.pd: Guard ~X cmp ~Y -> Y cmp X and the variant with
	a constant with single_use.

From-SVN: r231245
2015-12-04 08:09:46 +00:00
Bin Cheng
e8426e0a22 aarch64.c (aarch64_legitimize_address): legitimize address expressions like Ra + Rb + CONST and Ra + Rb<<SCALE + CONST.
* config/aarch64/aarch64.c (aarch64_legitimize_address): legitimize
	address expressions like Ra + Rb + CONST and Ra + Rb<<SCALE + CONST.


Co-Authored-By: Jiong Wang <jiong.wang@arm.com>

From-SVN: r231244
2015-12-04 03:26:19 +00:00
Cesar Philippidis
72cc0e5803 parser.c (cp_ensure_no_oacc_routine): Update error message.
gcc/cp/
	* parser.c (cp_ensure_no_oacc_routine): Update error message.
	(cp_parser_oacc_routine): Likewise.
	(cp_parser_late_parsing_oacc_routine): Likewise.  Update comment
	describing this function.
	(cp_finalize_oacc_routine): Update error message.

From-SVN: r231243
2015-12-03 16:17:48 -08:00
GCC Administrator
3b90d51eee Daily bump.
From-SVN: r231242
2015-12-04 00:16:11 +00:00
Jan Hubicka
bd04cddf10 * alias.c (alias_set_subset_of, alias_sets_must_conflict_p)
Short circuit for !flag_strict_aliasing
	(get_alias_set): Remove flag_strict_aliasing check.
	(new_alias_set): Likewise.

From-SVN: r231239
2015-12-03 21:57:15 +00:00
Evandro Menezes
5ec1ae3b8a Add cost model for Exynos M1
gcc/
	* config/aarch64/aarch64-cores.def: Use the Exynos M1 cost model.
	* config/aarch64/aarch64.c (exynosm1_addrcost_table): New variable.
	(exynosm1_regmove_cost): Likewise.
	(exynosm1_vector_cost): Likewise.
	(exynosm1_tunings): Likewise.
	* config/arm/aarch-cost-tables.h (exynosm1_extra_costs): Likewise.
	* config/arm/arm.c (arm_exynosm1_tune): Likewise.
	* config/arm/arm-cores.def: Use the Exynos M1 cost model.

From-SVN: r231233
2015-12-03 16:08:40 +00:00
Alan Lawrence
b3e4665562 Empty the redirect_edge_var_map after each pass
Alan Lawrence  <alan.lawrence@arm.com>
	Richard Biener  <richard.guenther@gmail.com>

	* cfgexpand.c (pass_expand::execute): Replace call to
	redirect_edge_var_map_destroy with redirect_edge_var_map_empty.
	* tree-ssa.c (delete_tree_ssa): Likewise.
	* function.c (set_cfun): Call redirect_edge_var_map_empty.
	* passes.c (execute_one_ipa_transform_pass, execute_one_pass): Likewise.
	* tree-ssa.h (redirect_edge_var_map_destroy): Remove.
	(redirect_edge_var_map_empty): New.
	* tree-ssa.c (redirect_edge_var_map_destroy): Remove.
	(redirect_edge_var_map_empty): New.

Co-Authored-By: Richard Biener <richard.guenther@gmail.com>

From-SVN: r231232
2015-12-03 15:46:57 +00:00
Jeff Law
46bd784bfb [PR tree-optimization/68599] Avoid over-zealous optimization with -funsafe-loop-optimizations
PR tree-optimization/68599
	* loop-init.c (rtl_loop_init): Set LOOPS_HAVE_RECORDED_EXITS
	in call to loop_optimizer_init.
	* loop-iv.c (get_simple_loop_desc): Only allow unsafe loop
	optimization to drop the assumptions/infinite notations if
	the loop has a single exit.

From-SVN: r231231
2015-12-03 08:40:08 -07:00
Richard Sandiford
a54a5997d9 Documentation tweaks for internal-fn-related optabs
As Bernd requested, this patch adds "This pattern cannot FAIL" to the
documentation of optabs that came to be mapped to interal functions.
For consistency I did the same for optabs that were already being
used for internal functions.

Many of the optabs weren't documented in the first place, so I added
entries for the missing ones.  Also, there were some inaccuracies in
the documentation of the rounding optabs.  The bitcount optabs said
that operand 0 has mode @var{m} and that operand 1 is under target
control, whereas it should be the other way around.

Tested on x86_64-linux-gnu.

gcc/
	* doc/md.texi (vec_load_lanes@var{m}@var{n}): Document that
	the pattern cannot FAIL.
	(vec_store_lanes@var{m}@var{n}): Likewise.
	(maskload@var{m}@var{n}): Likewise.
	(maskstore@var{m}@var{n}): Likewise.  Fix a cut-&-paste error
	in the name of the pattern.
	(rsqrt@var{m}2): Document that mode m must be a scalar or vector
	floating-point mode and that all operands have that mode.
	(fmin@var{m}3, fmax@var{m}3): Likewise.  Document that the
	pattern cannot FAIL.
	(sqrt@var{m}2): Document that mode m must be a scalar or vector
	floating-point mode, that all operands have that mode, and that
	the patterns cannot FAIL.  Remove previous documentation referring
	to @code{double} and @code{float}.
	(fmod@var{m}3, remainder@var{m}3, cos@var{m}2, sin@var{m}2)
	(sincos@var{m}3, log@var{m}2, pow@var{m}3, atan2@var{m}3)
	(copysign@var{m}3): Likewise.
	(exp@var{m}2): Likewise.  Explicitly state the base.
	(floor@var{m}2): As for sqrt@var{m}2, but also specify the operands.
	(btrunc@var{m}2, rint@var{m}2): Likewise.
	(round@var{m}2): Likewise.  Fix incorrect description of rounding
	effect.
	(ceil@var{m}2): As for round@var{m}2.
	(nearbyint@var{m}2): As for floor@var{m}2, but also mention that
	the instruction must not raise an inexact condition.
	(scalb@var{m}3): Document previously-undocumented pattern
	(ldexp@var{m}3, tan@var{m}2, asin@var{m}2, acos@var{m}2)
	(atan@var{m}2, expm1@var{m}2, exp10@var{m}2, exp2@var{m}2)
	(log1p@var{m}2, log10@var{m}2, log2@var{m}2, logb@var{m}2)
	(significand@var{m}2): Likewise.
	(ffs@var{m}2): Fix the description of the modes, so that operand 1 has
	mode m and operand 0 is defined more freely.  Document that @var{m}
	can be a scalar or vector integer mode and that the pattern is not
	allowed to FAIL.
	(clz@var{m}2, ctz@var{m}2, popcount@var{m}2, parity@var{m}2): Likewise.
	(clrsb@var{m}2): Likewise, except that the description of the
	mode was missing in this case.

From-SVN: r231230
2015-12-03 14:36:19 +00:00
Richard Sandiford
ee62a5a602 Add an rsqrt_optab and IFN_RSQRT internal function
All current uses of builtin_reciprocal convert 1.0/sqrt into rsqrt.
This patch adds an rsqrt optab and associated internal function for
that instead.  We can then pick up the vector forms of rsqrt automatically,
fixing an AArch64 regression from my internal_fn patches.

With that change, builtin_reciprocal only needs to handle target-specific
built-in functions.  I've restricted the hook to those since, if we need
a reciprocal of another standard function later, I think there should be
a strong preference for adding a new optab and internal function for it,
rather than hiding the code in a backend.

Three targets implement builtin_reciprocal: aarch64, i386 and rs6000.
i386 and rs6000 already used the obvious rsqrt<mode>2 pattern names
for the instructions, so they pick up the new code automatically.
aarch64 needs a slight rename.

mn10300 is unusual in that its native operation is rsqrt, and
sqrt is approximated as 1.0/rsqrt.  The port also uses rsqrt<mode>2
for the rsqrt pattern, so after the patch we now pick it up as a native
operation.

Two other ports define rsqrt patterns: sh and v850.  AFAICT these
patterns aren't currently used, but I think the patch does what the
authors of the patterns would have expected.  There's obviously some
risk of fallout though.

Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnueabihf
(as a target without the hooks) and powerpc64-linux-gnu.

gcc/
	* internal-fn.def (RSQRT): New function.
	* optabs.def (rsqrt_optab): New optab.
	* doc/md.texi (rsqrtM2): Document.
	* target.def (builtin_reciprocal): Replace gcall argument with
	a function decl.  Restrict hook to machine functions.
	* doc/tm.texi: Regenerate.
	* targhooks.h (default_builtin_reciprocal): Update prototype.
	* targhooks.c (default_builtin_reciprocal): Likewise.
	* tree-ssa-math-opts.c: Include internal-fn.h.
	(internal_fn_reciprocal): New function.
	(pass_cse_reciprocals::execute): Call it, and build a call to an
	internal function on success.  Only call targetm.builtin_reciprocal
	for machine functions.
	* config/aarch64/aarch64-protos.h (aarch64_builtin_rsqrt): Remove
	second argument.
	* config/aarch64/aarch64-builtins.c (aarch64_expand_builtin_rsqrt):
	Rename aarch64_rsqrt_<mode>2 to rsqrt<mode>2.
	(aarch64_builtin_rsqrt): Remove md_fn argument and only handle
	machine functions.
	* config/aarch64/aarch64.c (use_rsqrt_p): New function.
	(aarch64_builtin_reciprocal): Replace gcall argument with a
	function decl.  Use use_rsqrt_p.  Remove optimize_size check.
	Only handle machine functions.  Update call to aarch64_builtin_rsqrt.
	(aarch64_optab_supported_p): New function.
	(TARGET_OPTAB_SUPPORTED_P): Define.
	* config/aarch64/aarch64-simd.md (aarch64_rsqrt_<mode>2): Rename to...
	(rsqrt<mode>2): ...this.
	* config/i386/i386.c (use_rsqrt_p): New function.
	(ix86_builtin_reciprocal): Replace gcall argument with a
	function decl.  Use use_rsqrt_p.  Remove optimize_insn_for_size_p
	check.  Only handle machine functions.
	(ix86_optab_supported_p): Handle rsqrt_optab.
	* config/rs6000/rs6000.c (TARGET_OPTAB_SUPPORTED_P): Define.
	(rs6000_builtin_reciprocal): Replace gcall argument with a
	function decl.  Remove optimize_insn_for_size_p check.
	Only handle machine functions.
	(rs6000_optab_supported_p): New function.

From-SVN: r231229
2015-12-03 14:31:55 +00:00
Bernd Schmidt
47e16c6a6a Fix some issues with the ROP patch (PR 68471, 68472)
PR target/68471
	PR target/68472
	* config/i386/i386.c (ix86_mitigate_rop): Don't call
	compute_bb_for_insn again.  Call df_insn_rescan_all.
	* config/i386/i386.md (set_got_rex64): Override modrm_class.

	* regrename.c (build_def_use): Ignore stack regs if regstack_completed.

testsuite/
	* gcc.target/i386/rop1.c: New test.

From-SVN: r231228
2015-12-03 14:17:35 +00:00
Nathan Sidwell
9a863523b4 nvptx-protos.h (npvptx_section_from_addr_space): Delete.
gcc/
	* config/nvptx/nvptx-protos.h (npvptx_section_from_addr_space):	Delete.
	* config/nvptx/nvptx.c (enum nvptx_data_area): New.
	(SYMBOL_DATA_AREA, SET_SYMBOL_DATA_AREA): New defines.
	(nvptx_option_override): Set data ares for worker vars.
	(nvptx_addr_space_from_sym): Delete.
	(nvptx_encode_section_info): New.
	(section_for_sym, section_for_decl): New.
	(nvptx_maybe_convert_symbolic_operand): Get data area from symbol
	flags,
	(nvptx_section_from_addr_space): Delete.
	(nvptx_section_for_decl): Delete.
	(nvptx_output_aligned, nvptx_declare_object_name,
	nvptx_assemble_undefined_decl): Use section_for_decl, remove
	unnecessary checks.
	(nvptx_print_operand): Add 'D', adjust 'A'.
	(nvptx_expand_worker_addr): Adjust unspec generation.
	(TARGET_ENCODE_SECTION_INFO): Override.
	* config/nvptx/nvptx.h (ADDR_SPACE_GLOBAL, ADDR_SPACE_SHARED,
	ADDR_SPACE_CONST, ADDR_SPACE_LOCAL, ADDR_SPACE_PARAM): Delete.
	* config/nvptx/nvptx.md (UNSPEC_FROM_GLOBAL, UNSPEC_FROM_LOCAL,
	UNSPEC_FROM_PARAM, UNSPEC_FROM_SHARED, UNSPEC_FROM_CONST,
	UNSPEC_TO_GLOBAL, UNSPEC_TO_LOCAL, UNSPEC_TO_PARAM,
	UNSPEC_TO_SHARED, UNSPEC_TO_CONST): Delete.
	(UNSPEC_TO_GENERIC): New.
	(nvptx_register_or_symbolic_operand): Delete.
	(cvt_code, cvt_name, cvt_str): Delete.
	(convaddr_<cvt_name><mode> [P]): Delete.
	(convaddr_<mode> [P]): New.

	gcc/testsuite/
	* gcc.target/nvptx/decl.c: New.
	* gcc.target/nvptx/uninit-decl.c: Robustify regexps.

From-SVN: r231227
2015-12-03 13:59:20 +00:00
Kyrylo Tkachov
1986d6791c [RTL-ifcvt] PR rtl-optimization/68624: Clean up logic that checks for clobbering conflicts across basic blocks
PR rtl-optimization/68624
	* ifcvt.c (noce_try_cmove_arith): Check clobbers of temp regs in both
	blocks if they exist and simplify the logic choosing the order to emit
	them in.

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

From-SVN: r231226
2015-12-03 13:28:55 +00:00
Richard Biener
97a1a64299 re PR tree-optimization/66051 (can't vectorize reductions inside an SLP group)
2015-12-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/66051
	* tree-vect-slp.c (vect_build_slp_tree_1): Remove restriction
	on load group size.  Do not pass in vectorization_factor.
	(vect_transform_slp_perm_load): Do not require any permute support.
	(vect_build_slp_tree): Do not pass in vectorization factor.
	(vect_analyze_slp_instance): Do not compute vectorization
	factor estimate.  Use vector size instead of vectorization factor
	estimate to split store groups for BB vectorization.

	* gcc.dg/vect/slp-42.c: New testcase.

From-SVN: r231225
2015-12-03 11:26:56 +00:00
Ilya Enkovich
b5be36b1db cfgexpand.c (expand_gimple_stmt_1): Return statement with DECL as return value is allowed to have NULL bounds.
gcc/

	* cfgexpand.c (expand_gimple_stmt_1): Return statement with
	DECL as return value is allowed to have NULL bounds.

From-SVN: r231224
2015-12-03 10:35:41 +00:00
Tom de Vries
71819f4573 Guard isl_ast_op_zdiv_r usage with HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
2015-12-03  Tom de Vries  <tom@codesourcery.com>

	* graphite-isl-ast-to-gimple.c (binary_op_to_tree)
	(gcc_expression_from_isl_expr_op): Guard isl_ast_op_zdiv_r usage with
	HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS.

From-SVN: r231223
2015-12-03 10:16:07 +00:00
Kirill Yukhin
73500c31de Added missing ChangeLogs. Fix scan pattern for gcc.target/i386/avx512vl-vextracti32x4-1.c.
From-SVN: r231222
2015-12-03 10:00:57 +00:00
Richard Biener
b308d872e6 re PR tree-optimization/67800 (Missed vectorization opportunity on x86 (DOT_PROD_EXPR in non-reduction))
2015-12-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/67800
	PR tree-optimization/68333
	* tree-vect-patterns.c (vect_recog_dot_prod_pattern): Restore
	restriction to reduction contexts but allow SLP reductions as well.
	(vect_recog_sad_pattern): Likewise.
	(vect_recog_widen_sum_pattern): Likewise.

	* gcc.target/i386/vect-pr67800.c: New testcase.

From-SVN: r231221
2015-12-03 08:43:22 +00:00
Richard Biener
8349b02428 re PR tree-optimization/68639 (ICE: Floating point exception)
2015-12-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/68639
	* tree-vect-data-refs.c (dr_group_sort_cmp): Split groups
	belonging to different loops.
	(vect_analyze_data_ref_accesses): Likewise.

	* gfortran.fortran-torture/compile/pr68639.f90: New testcase.

From-SVN: r231220
2015-12-03 08:38:10 +00:00
Jan Hubicka
d8e3e8a571 ipa-pure-const.c (ignore_edge_for_pure_const): New function.
* ipa-pure-const.c (ignore_edge_for_pure_const): New function.
	(propagate_pure_const): Use it; fix comments and optimize loops.

From-SVN: r231219
2015-12-03 04:21:50 +00:00
Jan Hubicka
9644e52a6b ipa-pure-const.c (ignore_edge): Rename to ...
* ipa-pure-const.c (ignore_edge): Rename to ...
	(ignore_edge_for_nothrow) ... this one; also ignore eges to
	interposable functions or ones that can not throw.
	(propagate_nothrow): Fix handling of availability.

From-SVN: r231218
2015-12-03 04:19:44 +00:00
Jan Hubicka
89bbe9ba36 re PR c++/68184 (Exception from a virtual function does not get caught)
PR ipa/68184
	* g++.dg/torture/pr68184.C: New testcase.
	* cgraphunit.c (cgraph_node::analyze): Set can_throw_external.

From-SVN: r231217
2015-12-03 04:13:33 +00:00
GCC Administrator
eaa728e3a2 Daily bump.
From-SVN: r231216
2015-12-03 00:16:13 +00:00