Commit Graph

149884 Commits

Author SHA1 Message Date
Claudiu Zissulescu c4014855e8 [ARC] Add support for QuarkSE processor.
gcc/
2016-11-17  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc-arches.def: Add FPX quarkse instruction as valid
	for arcem.
	* config/arc/arc-c.def (__ARC_FPX_QUARK__): Define.
	* config/arc/arc-cpus.def (quarkse_em): Add.
	* config/arc/arc-options.def (FL_FPX_QUARK, FL_QUARK): Likewise.
	* config/arc/arc-opts.h (FPX_QK): Define.
	* config/arc/arc-tables.opt: Regenerate.
	* config/arc/arc.c (gen_compare_reg): Change.
	(arc_register_move_cost): Avoid Dy,Dx moves.
	* config/arc/arc.h (TARGET_HARD_FLOAT): Change.
	(TARGET_FPX_QUARK, TARGET_FP_ASSIST): Define.
	* config/arc/arc.md (divsf3, sqrtsf2, fix_truncsfsi2, floatsisf2):
	New expands.
	* config/arc/fpu.md (divsf3_fpu, sqrtsf2_fpu, floatsisf2_fpu)
	(fix_truncsfsi2_fpu): Rename.
	* config/arc/fpx.md (cmp_quark, cmpsf_quark_, cmpsf_quark_ord)
	(cmpsf_quark_uneq, cmpsf_quark_eq, divsf3_quark, sqrtsf2_quark)
	(fix_truncsfsi2_quark, floatsisf2_quark): New patterns.
	* config/arc/t-multilib: Regenerate.

From-SVN: r242546
2016-11-17 14:43:32 +01:00
Claudiu Zissulescu c867c39d8a [ARC] Update target specific tests.
gcc/testsuite
2016-11-17  Claudiu Zissulescu  <claziss@synopsys.com>

	* gcc.target/arc/abitest.S: New file.
	* gcc.target/arc/abitest.h: Likewise.
	* gcc.target/arc/va_args-1.c: Likewise.
	* gcc.target/arc/va_args-2.c: Likewise.
	* gcc.target/arc/va_args-3.c: Likewise.
	* gcc.target/arc/mcrc.c: Deleted.
	* gcc.target/arc/mdsp-packa.c: Likewise.
	* gcc.target/arc/mdvbf.c: Likewise.
	* gcc.target/arc/mmac-24.c: Likewise.
	* gcc.target/arc/mmac-d16.c: Likewise.
	* gcc.target/arc/mno-crc.c: Likewise.
	* gcc.target/arc/mno-dsp-packa.c: Likewise.
	* gcc.target/arc/mno-dvbf.c: Likewise.
	* gcc.target/arc/mno-mac-24.c: Likewise.
	* gcc.target/arc/mno-mac-d16.c: Likewise.
	* gcc.target/arc/mno-rtsc.c: Likewise.
	* gcc.target/arc/mno-xy.c: Likewise.
	* gcc.target/arc/mrtsc.c: Likewise.
	* gcc.target/arc/arc.exp (check_effective_target_arcem):
	New function.
	(check_effective_target_arc700): Likewise.
	(check_effective_target_arc6xx): Likewise.
	(check_effective_target_arcmpy): Likewise.
	(check_effective_target_archs): Likewise.
	(check_effective_target_clmcpu): Likewise.
	(check_effective_target_barrelshifter): Likewise.
	* gcc.target/arc/barrel-shifter-1.c: Changed.
	* gcc.target/arc/builtin_simd.c: Test only for ARC700
	cpus.
	* gcc.target/arc/cmem-1.c: Changed.
	* gcc.target/arc/cmem-2.c: Likewise.
	* gcc.target/arc/cmem-3.c: Likewise.
	* gcc.target/arc/cmem-4.c: Likewise.
	* gcc.target/arc/cmem-5.c: Likewise.
	* gcc.target/arc/cmem-6.c: Likewise.
	* gcc.target/arc/cmem-7.c: Likewise.
	* gcc.target/arc/interrupt-1.c: Test for RTIE as well.
	* gcc.target/arc/interrupt-2.c: Skip it for ARCv2 cores.
	* gcc.target/arc/interrupt-3.c: Match also ARCv2
	warnings.
	* gcc.target/arc/jump-around-jump.c: Update options.
	* gcc.target/arc/mARC601.c: Changed.
	* gcc.target/arc/mcpu-arc600.c: Changed.
	* gcc.target/arc/mcpu-arc601.c: Changed.
	* gcc.target/arc/mcpu-arc700.c: Changed.
	* gcc.target/arc/mdpfp.c: Skip for ARCv2 cores.
	* gcc.target/arc/movb-1.c: Changed.
	* gcc.target/arc/movb-2.c: Likewise.
	* gcc.target/arc/movb-3.c: Likewise.
	* gcc.target/arc/movb-4.c: Likewise.
	* gcc.target/arc/movb-5.c: Likewise.
	* gcc.target/arc/movb_cl-1.c: Likewise.
	* gcc.target/arc/movb_cl-2.c: Likewise.
	* gcc.target/arc/movbi_cl-1.c: Likewise.
	* gcc.target/arc/movh_cl-1.c: Likewise.
	* gcc.target/arc/mspfp.c: Skip for ARC HS cores.
	* gcc.target/arc/mul64.c: Enable it only for ARC600.
	* gcc.target/arc/mulsi3_highpart-1.c: Scan for ARCv2
	instructions.
	* gcc.target/arc/mulsi3_highpart-2.c: Skip it for ARCv1
	cores.
	* gcc.target/arc/no-dpfp-lrsr.c: Skip it for ARC HS.
	* gcc.target/arc/trsub.c: Only for ARC EM cores.
	* gcc.target/arc/builtin_simdarc.c: Changed.
	* gcc.target/arc/extzv-1.c: Likewise.
	* gcc.target/arc/insv-1.c: Likewise.
	* gcc.target/arc/insv-2.c: Likewise.
	* gcc.target/arc/mA6.c: Likewise.
	* gcc.target/arc/mA7.c: Likewise.
	* gcc.target/arc/mARC600.c: Likewise.
	* gcc.target/arc/mARC700.c: Likewise.
	* gcc.target/arc/mcpu-arc600.c: Likewise.
	* gcc.target/arc/mcpu-arc700.c: Likewise.
	* gcc.target/arc/movl-1.c: Likewise.
	* gcc.target/arc/nps400-1.c: Likewise.
	* gcc.target/arc/trsub.c: Likewise.
	* gcc.target/arc/barrel-shifter-2.c: Check for barrel
	shifter configuration.
	* gcc.target/arc/mlock.c: Skip for arc6xx
	configurations.
	* gcc.target/arc/mswape.c: Likewise.

From-SVN: r242545
2016-11-17 14:43:20 +01:00
Georg-Johann Lay 7b1e0deb78 avr.c (avr_print_operand_address): Use CONST_INT_P if appropriate.
* config/avr/avr.c (avr_print_operand_address): Use CONST_INT_P if
	appropriate.
	(ashlqi3_out, ashlsi3_out, ashrqi3_out, ashrhi3_out): Same.
	(ashrsi3_out, lshrqi3_out, lshrhi3_out, lshrsi3_out): Same.
	(avr_rtx_costs_1, extra_constraint_Q): Same.
	(avr_address_cost): Use SUBREG_P if possible.

From-SVN: r242544
2016-11-17 13:42:05 +00:00
Richard Biener b05c3fd684 re PR c++/78383 (label as values ICE with C++ lambda)
2016-11-17  Richard Biener  <rguenther@suse.de>

	PR middle-end/78383
	* tree-cfgcleanup.c (cleanup_control_flow_bb): Do not turn
	non-local goto into CFG.

From-SVN: r242543
2016-11-17 12:39:24 +00:00
Richard Biener bef69eb57d common.opt (ftree-loop-if-convert-stores): Mark as preserved for backward compatibility.
2016-11-17  Richard Biener  <rguenther@suse.de>

	* common.opt (ftree-loop-if-convert-stores): Mark as preserved for
	backward compatibility.
	* doc/invoke.texi (ftree-loop-if-convert-stores): Remove.
	* tree-if-conv.c (pass_if_conversion::gate): Do not test
	flag_tree_loop_if_convert_stores.
	(pass_if_conversion::execute): Likewise.

From-SVN: r242542
2016-11-17 12:38:47 +00:00
Paolo Carlini c90928c8d6 re PR c++/68180 ([ICE] at cp/constexpr.c:2768 in initializing __vector in a loop)
2016-11-17  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/68180
	* g++.dg/cpp1y/pr68180.C: New.

From-SVN: r242541
2016-11-17 09:59:07 +00:00
Prathamesh Kulkarni 6c99dcb51f re PR tree-optimization/78319 (PASS->FAIL: gcc.dg/uninit-pred-8_a.c bogus warning (test for bogus messages, line 20))
2016-11-17  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR tree-optimization/78319

testsuite/
	* gcc.dg/uninit-pred-8_a.c (foo): Mark dg-bogus test to xfail on
	arm-none-eabi.

From-SVN: r242540
2016-11-17 09:48:34 +00:00
Kyrylo Tkachov 12faad0298 [AArch64] Fix gcc.dg/torture/float32-builtin.c with RTL checking
* config/aarch64/predicates.md (aarch64_reg_or_fp_zero): Check for
    const_double code before calling aarch64_float_const_zero_rtx_p.

From-SVN: r242539
2016-11-17 09:33:40 +00:00
Richard Biener 8ce3fee51b re PR middle-end/78306 ([CilkPlus] "inlining failed in call to always_inline ‘memset’: function not inlinable" with -fcilkplus)
2016-11-17  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/78306
	* ipa-inline-analysis.c (initialize_inline_failed): Do not
	inhibit inlining if function calls cilk_spawn.
	(can_inline_edge_p): Likewise.

	* gcc.dg/cilk-plus/pr78306.c: New testcase.

From-SVN: r242537
2016-11-17 08:42:50 +00:00
Richard Biener f829413178 re PR tree-optimization/78305 (Wrong constant folding)
2016-11-17  Richard Biener  <rguenther@suse.de>

	PR middle-end/78305
	* fold-const.c (negate_expr_p): Fix multiplication case.

	* gcc.dg/torture/pr78305.c: New testcase.

From-SVN: r242536
2016-11-17 08:39:33 +00:00
Janus Weil 04f1c83099 re PR fortran/66227 ([OOP] EXTENDS_TYPE_OF n returns wrong result for polymorphic variable allocated to extended type)
2016-11-17  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/66227
	* simplify.c (gfc_simplify_extends_type_of): Fix missed optimization.
	Prevent over-simplification. Fix a comment. Add a comment.

2016-11-17  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/66227
	* gfortran.dg/extends_type_of_3.f90: Fix and extend the test case.

From-SVN: r242535
2016-11-17 08:52:24 +01:00
Chung-Lin Tang 9bd99cce5b re PR target/78357 (nios2 uses non-standard atomic functions)
2016-11-17  Chung-Lin Tang  <cltang@codesourcery.com>

	PR target/78357
	* config/nios2/nios2.c (nios2_init_libfuncs): Remove TARGET_LINUX_ABI
	condition.
	(TARGET_INIT_LIBFUNCS): Delete definition and...
	* config/nios2/linux.h (TARGET_INIT_LIBFUNCS): ...move to here, add
	comments.

From-SVN: r242534
2016-11-17 06:26:56 +00:00
Krister Walfridsson 82e435c396 netbsd-stdint.h: New.
2016-11-17  Krister Walfridsson  <krister.walfridsson@gmail.com>

	* config/netbsd-stdint.h: New.
	* config.gcc (i[34567]86-*-netbsd): Add netbsd-stdint.h to tm_file.
	(x86_64-*-netbsd*): Likewise.

From-SVN: r242533
2016-11-17 06:19:23 +00:00
Marek Polacek 0d939c9575 re PR c/78285 (error on duplicate switch label where a note should be)
PR c/78285
	* c-common.c (c_add_case_label): Turn error_at calls into inform.

	* gcc.dg/switch-5.c: Turn several dg-errors into dg-messages.
	* g++.dg/ext/case-range2.C: Likewise.

From-SVN: r242532
2016-11-17 01:23:19 +00:00
Andrew Pinski c10e3d7f2a aarch64.opt (mverbose-cost-dump): New option.
2016-11-16  Andrew PInski  <apinski@cavium.com>

        * config/aarch64/aarch64.opt (mverbose-cost-dump): New option.
        * config/aarch64/aarch64.c (aarch64_rtx_costs): Use
        flag_aarch64_verbose_cost instead of checking for details dump.
        (aarch64_rtx_costs_wrapper): Likewise.

From-SVN: r242531
2016-11-16 17:19:04 -08:00
Steven G. Kargl 99c7213097 re PR fortran/58001 (Make it possible to silence "Extension: Tab character in format" warning)
2016-11-16  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/58001
	* io.c (next_char_not_space): Update handling of a 'tab' in a FORMAT.
 	(format_lex): Adjust invocations of next_char_not_space().
 
2016-11-16  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/58001
	* gfortran.dg/fmt_tab_1.f90: Adjust testcase.
	* gfortran.dg/fmt_tab_2.f90: Ditto.

From-SVN: r242530
2016-11-17 00:18:18 +00:00
GCC Administrator 243255c098 Daily bump.
From-SVN: r242529
2016-11-17 00:16:16 +00:00
Jakub Jelinek fb324f0209 re PR rtl-optimization/78378 (wrong code when combining shift + mult + zero_extend)
PR rtl-optimization/78378
	* combine.c (make_extraction): Use force_to_mode for non-{REG,MEM}
	inner only if pos is 0.  Fix up formatting.

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

From-SVN: r242526
2016-11-17 00:22:16 +01:00
Alan Modra 8972f7e90b R_MIPS_JALR failures
This is a fix for my PR70890 patch, which incorrectly removed all
REG_EQUIV notes rather than just one regarding a reg that dies.

	PR rtl-optimization/78325
	PR rtl-optimization/70890
	* ira.c (combine_and_move_insns): Only remove REG_EQUIV notes
	for dead regno.

From-SVN: r242525
2016-11-17 09:40:55 +10:30
David Tolnay 10d48c59b0 libiberty: Add Rust symbol demangling.
Adds Rust symbol demangler. Rust mangles symbols using GNU_V3 style,
adding a hash and various special character subtitutions. This adds
a new rust style to cplus_demangle and adds 3 helper functions
rust_demangle, rust_demangle_sym and rust_is_mangled.

rust-demangle.c was written by David. Mark did the code formatting to
GNU style and integration into the gcc/libiberty build system and
testsuite.

include/ChangeLog:

2016-11-03  David Tolnay <dtolnay@gmail.com>
           Mark Wielaard  <mark@klomp.org>

       * demangle.h (DMGL_RUST): New macro.
       (DMGL_STYLE_MASK): Add DMGL_RUST.
       (demangling_styles): Add dlang_rust.
       (RUST_DEMANGLING_STYLE_STRING): New macro.
       (RUST_DEMANGLING): New macro.
       (rust_demangle): New prototype.
       (rust_is_mangled): Likewise.
       (rust_demangle_sym): Likewise.

libiberty/ChangeLog:

2016-11-03  David Tolnay <dtolnay@gmail.com>
           Mark Wielaard  <mark@klomp.org>

       * Makefile.in (CFILES): Add rust-demangle.c.
       (REQUIRED_OFILES): Add rust-demangle.o.
       * cplus-dem.c (libiberty_demanglers): Add rust_demangling case.
       (cplus_demangle): Handle RUST_DEMANGLING.
       (rust_demangle): New function.
       * rust-demangle.c: New file.
       * testsuite/Makefile.in (really-check): Add check-rust-demangle.
       (check-rust-demangle): New rule.
       * testsuite/rust-demangle-expected: New file.

Co-Authored-By: Mark Wielaard <mark@klomp.org>

From-SVN: r242524
2016-11-16 23:09:27 +00:00
Jason Merrill 46b2baa723 PR c++/78373 - ICE with TREE_CONSTANT reference
* decl.c (cp_finish_decl): Don't set TREE_CONSTANT on a reference.
	* typeck2.c (store_init_value): Likewise.

From-SVN: r242523
2016-11-16 17:42:24 -05:00
Jason Merrill 2ec15cba58 * rtl.h: Declare gt_ggc_mx and gt_pch_nx.
From-SVN: r242522
2016-11-16 17:42:18 -05:00
William Schmidt 23bed4148e Commentary corrections
From-SVN: r242521
2016-11-16 22:31:24 +00:00
Bill Schmidt 9e16e65681 re PR tree-optimization/77848 (Gimple if-conversion results in redundant comparisons)
2016-11-16  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR tree-optimization/77848
	* tree-if-conv.c (version_loop_for_if_conversion): When versioning
	an outer loop, only save basic block aux information for the inner
	loop.
	(versionable_outer_loop_p): New function.
	(tree_if_conversion): Version the outer loop instead of the inner
	one if the pattern will be recognized for outer-loop
	vectorization.

From-SVN: r242520
2016-11-16 22:17:10 +00:00
Andrew Burgess a2ea37fb4c gcc: remove unneeded global related to hot/cold partitioning
The `user_defined_section_attribute' is used as part of the condition to
determine if GCC should partition blocks within a function into hot and
cold blocks.  This global is initially false, and is set to true from
within the file parse phase of GCC, as part of the attribute handling
hook.

The `user_defined_section_attribute' is reset to false as part of the
final pass of GCC.  However, the final pass is part of the optimisation
phase of the compiler, and so if at any point during the file parse
phase any function, or data, has a section attribute the global
`user_defined_section_attribute' will be set to true.

When GCC performs the block partitioning pass on the first function, if
`user_defined_section_attribute' is true then the function will not be
partitioned.  Notice though, that due to the above, whether we partition
this first function or not has nothing to do with whether the function
has a section attribute, instead, if any function or data in the parsed
file has a section attribute then we don't partition the first
function.

After performing (or not) the block partitioning pass on the first
function we perform the final pass on the first function, at which point
we reset `user_defined_section_attribute' to false.  As parsing is
complete by this point, we will never set
`user_defined_section_attribute' to true after that, and so all of the
following functions will have the partition blocks pass performed on
them, even if the function has a section attribute, and will not be
partitioned.

Luckily we don't end up partitioning functions that should not be
partitioned though.  Due to the way that functions are selected during
the assembler writing phase, if a function has a section attribute this
takes priority over any hot/cold block partitioning that has been done.

What we see from the above then is that the
`user_defined_section_attribute' mechanism is broken.  It was originally
created when GCC parsed, optimised, and generated assembler function at
a time.  Now that we deal with the whole file in one go, we need to
update the mechanism used to gate the block partitioning pass.

This patch does this by looking specifically for a section attribute on
the function DECL, which removes the need for a global variable, and
will work whether we parse the whole file in one go, or one function at
a time.

A few new tests have been added.  These check for the case where a
function is not partitioned when it could be.

gcc/ChangeLog:

	* gcc/bb-reorder.c: Remove 'toplev.h' include.
	(pass_partition_blocks::gate): No longer check
	user_defined_section_attribute, instead check the function decl
	for a section attribute.
	* gcc/c-family/c-attribs.c (handle_section_attribute): No longer
	set user_defined_section_attribute.
	* gcc/final.c (rest_of_handle_final): Likewise.
	* gcc/toplev.c: Remove definition of user_defined_section_attribute.
	* gcc/toplev.h: Remove declaration of
	user_defined_section_attribute.

gcc/testsuiteChangeLog:

	* gcc.dg/tree-prof/section-attr-1.c: New file.
	* gcc.dg/tree-prof/section-attr-2.c: New file.
	* gcc.dg/tree-prof/section-attr-3.c: New file.

From-SVN: r242519
2016-11-16 22:10:52 +00:00
Jerry DeLisle d174eb6541 re PR libfortran/51119 (MATMUL slow for large matrices)
2016-11-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/51119
	* Makefile.am: Remove -fno-protect-parens -fstack-arrays.
	* Makefile.in: Regenerate.

From-SVN: r242518
2016-11-16 21:54:25 +00:00
Maciej W. Rozycki 576b0863ee MIPS16/GCC: Emit explicit JRC from `casesi_internal_mips16_<mode>' insn
gcc/
	* config/mips/mips.md (casesi_internal_mips16_<mode>):
	Explicitly switch between JR and JRC for the table jump.  Adjust
	instruction count.

From-SVN: r242517
2016-11-16 21:42:31 +00:00
Maciej W. Rozycki a3be783adf MIPS16/GCC: Improve `casesi_internal_mips16_<mode>'s instruction count estimate
gcc/
	* config/mips/mips.md (casesi_internal_mips16_<mode>): Set
	`insn_count' to 11 rather than 16.

From-SVN: r242516
2016-11-16 21:39:31 +00:00
Maciej W. Rozycki 9d2082e72d MIPS16/GCC: Correct `casesi_internal_mips16_<mode>'s RTL pattern
gcc/
	* config/mips/mips.md (casesi_internal_mips16_<mode>): Use the
	`ltu' rather than `leu' operation in the RTL pattern

From-SVN: r242515
2016-11-16 21:37:59 +00:00
Maciej W. Rozycki d08c0ea313 MIPS16/GCC: Fix DImode `casesi_internal_mips16_<mode>' assembly instructions
gcc/
	* config/mips/mips.md (casesi_internal_mips16_<mode>): Add
	missing <d> instruction prefixes throughout.  Correct
	formatting.

	gcc/testsuite/
	* gcc.target/mips/code-readable-4.c (dg-final): Expect `dla'
	rather than `la'.

From-SVN: r242514
2016-11-16 21:35:02 +00:00
Jason Merrill fc72d1ed3c Fix tuple decomposition decltype.
* decl.c (store_decomp_type, lookup_decomp_type): New.
	(cp_finish_decomp): Call store_decomp_type.
	* semantics.c (finish_decltype_type): Call lookup_decomp_type.
	* cp-tree.h: Declare lookup_decomp_type.

From-SVN: r242513
2016-11-16 16:30:41 -05:00
Maciej W. Rozycki 8e2be5aefc microMIPS/GCC: Fix PIC call relaxation
gcc/
	* config/mips/mips.c (mips_output_jump): Output R_MICROMIPS_JALR
	rather than R_MIPS_JALR relocation in microMIPS code.  Do not
	cancel short delay slots in PIC call relaxation.

	gcc/testsuite/
	* gcc.target/mips/call-1.c (dg-options): Add `-mno-micromips'.
	(dg-final): Remove microMIPS JALRS mnemonic matching.
	* gcc.target/mips/call-2.c (dg-options): Add `-mno-micromips'.
	(dg-final): Remove microMIPS JALRS mnemonic matching.
	* gcc.target/mips/call-3.c (dg-options): Add `-mno-micromips'.
	(dg-final): Remove microMIPS JALRS mnemonic matching.
	* gcc.target/mips/call-4.c (dg-options): Add `-mno-micromips'.
	* gcc.target/mips/call-5.c (dg-options): Add `-mno-micromips'.
	* gcc.target/mips/call-6.c (dg-options): Add `-mno-micromips'.
	* gcc.target/mips/call-1u.c: New test case.
	* gcc.target/mips/call-2u.c: New test case.
	* gcc.target/mips/call-3u.c: New test case.
	* gcc.target/mips/call-4u.c: New test case.
	* gcc.target/mips/call-5u.c: New test case.
	* gcc.target/mips/call-6u.c: New test case.

From-SVN: r242512
2016-11-16 21:05:01 +00:00
Jakub Jelinek 3549e181bd re PR bootstrap/72823 (r239175 causes build failure)
PR bootstrap/72823
	* configure.ac (ENABLE_ASSERT_CHECKING): Define if gcc configure
	would define that macro.
	* configure: Regenerated.
	* config.in: Regenerated.

From-SVN: r242510
2016-11-16 21:10:27 +01:00
Ian Lance Taylor 350767bf22 runtime: replace runtime1.goc with Go and C code
A step toward eliminating goc2c.
    
    Drop the exported parfor code; it was needed for tests in the past, but
    no longer is. The Go 1.7 runtime no longer uses parfor.
    
    Reviewed-on: https://go-review.googlesource.com/33324

From-SVN: r242509
2016-11-16 18:33:11 +00:00
Thomas Preud'homme 660e6c2c12 Fix ICE on empty FIQ interrupt handler on ARM
2016-11-16  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/arm.md (arm_addsi3): Add alternative for addition of
    general register with general register or ARM constant into SP
    register.

    gcc/testsuite/
    * gcc.target/arm/empty_fiq_handler.c: New test.

From-SVN: r242508
2016-11-16 18:30:56 +00:00
Jakub Jelinek 5e8d7713be re PR fortran/78299 (ICE in expand_omp_for_static_nochunk, at omp-low.c:9622)
PR fortran/78299
	* omp-low.c (expand_omp_for_static_nochunk): Don't assert
	that loop->header == body_bb if broken_loop.

	* gfortran.dg/gomp/pr78299.f90: New test.

From-SVN: r242507
2016-11-16 19:19:09 +01:00
Wilco Dijkstra dd784916f5 Looking at PR77308, one of the issues is that the bswap optimization phase doesn't work on ARM.
Looking at PR77308, one of the issues is that the bswap optimization 
phase doesn't work on ARM.  This is due to an odd check that uses
SLOW_UNALIGNED_ACCESS (which is always true on ARM).  Since the testcase
in PR77308 generates much better code with this patch (~13% fewer
instructions), it seems best to remove this check.

    gcc/
	* tree-ssa-math-opts.c (bswap_replace): Remove test
	of SLOW_UNALIGNED_ACCESS.

    testsuite/
	* gcc.dg/optimize-bswapdi-3.c: Remove xfail.
	* gcc.dg/optimize-bswaphi-1.c: Likewise. 	
	* gcc.dg/optimize-bswapsi-2.c: Likewise.

From-SVN: r242506
2016-11-16 18:10:34 +00:00
Szabolcs Nagy 0af3095468 [PR libgfortran/78314] Fix ieee_support_halting
ieee_support_halting only checked the availability of status
flags, not trapping support.  On some targets the later can
only be checked at runtime: feenableexcept reports if
enabling traps failed.

So check trapping support by enabling/disabling it.

Updated the test that enabled trapping to check if it is
supported.

gcc/testsuite/

	PR libgfortran/78314
	* gfortran.dg/ieee/ieee_6.f90: Use ieee_support_halting.

libgfortran/

	PR libgfortran/78314
	* config/fpu-glibc.h (support_fpu_trap): Use feenableexcept.

From-SVN: r242505
2016-11-16 17:27:04 +00:00
Bin Cheng e38f65725b ivopts-orig_biv-inc.c: Adjust test string according to updated dump info.
gcc/testsuite	
	* gcc.target/arm/ivopts-orig_biv-inc.c: Adjust test string
	according to updated dump info.

From-SVN: r242504
2016-11-16 17:18:46 +00:00
Alexander Monakov 5012919d0b nvptx backend prerequisites for OpenMP offloading
gcc/
	* config/nvptx/mkoffload.c (main): Check that either OpenACC or OpenMP
	is selected.  Pass -mgomp to offload compiler in OpenMP case.
	* config/nvptx/nvptx-protos.h (nvptx_shuffle_kind): Move enum
	declaration from nvptx.c.
	(nvptx_gen_shuffle): Declare.
	(nvptx_output_set_softstack): Declare.
	* config/nvptx/nvptx.c (nvptx_shuffle_kind): Move to nvptx-protos.h.
	(need_softstack_decl): New variable.
	(need_unisimt_decl): New variable.
	(diagnose_openacc_conflict): New.  Use it...
	(nvptx_option_override): ...here.  Handle TARGET_GOMP.
	(nvptx_encode_section_info): Handle "shared" attribute.
	(write_as_kernel): Restrict to OpenACC target regions.
	(init_softstack_frame): New.
	(nvptx_init_unisimt_predicate): New.
	(write_omp_entry): New.  Use it...
	(nvptx_declare_function_name): ...here to emit OpenMP target region
	entrypoints.  Handle TARGET_SOFT_STACK.  Call
	nvptx_init_unisimt_predicate.
	(nvptx_output_set_softstack): New.
	(nvptx_get_drap_rtx): Return %argp as the DRAP if needed.
	(nvptx_gen_shuffle): Export.
	(nvptx_output_call_insn): Handle COND_EXEC patterns.  Emit instruction
	predicate.
	(nvptx_print_operand): Fix handling of instruction predicates.
	(nvptx_get_unisimt_master): New helper function.
	(nvptx_get_unisimt_predicate): Ditto.
	(nvptx_call_insn_is_syscall_p): Ditto.
	(nvptx_unisimt_handle_set): Ditto.
	(nvptx_reorg_uniform_simt): New.  Transform code for -muniform-simt.
	(nvptx_reorg): Call nvptx_reorg_uniform_simt.
	(nvptx_handle_shared_attribute): New.  Use it...
	(nvptx_attribute_table): ... here (new entry).
	(nvptx_record_offload_symbol): Handle NULL attributes.
	(nvptx_file_end): Handle need_softstack_decl and need_unisimt_decl.
	(nvptx_simt_vf): New.
	(TARGET_SIMT_VF): Define.
	* config/nvptx/nvptx.h (TARGET_CPU_CPP_BUILTINS): Define
	__nvptx_softstack or __nvptx_unisimt__ when -msoft-stack, or resp.
	-muniform-simt option is active.
	(STACK_SIZE_MODE): Define.
	(FIXED_REGISTERS): Adjust.
	(SOFTSTACK_SLOT_REGNUM): New.
	(SOFTSTACK_PREV_REGNUM): New.
	(REGISTER_NAMES): Adjust.
	(struct machine_function): New fields.
	* config/nvptx/nvptx.md (UNSPEC_SET_SOFTSTACK): New.
	(UNSPEC_VOTE_BALLOT): Ditto.
	(UNSPEC_LANEID): Ditto.
	(UNSPECV_NOUNROLL): Ditto.
	(atomic): New attribute.
	(predicable): New attribute.  Generate predicated forms via
	define_cond_exec.
	(br_true): Mark as not predicable.
	(br_false): Ditto.
	(br_true_uni): Ditto.
	(br_false_uni): Ditto.
	(return): Ditto.
	(trap_if_true): Ditto.
	(trap_if_false): Ditto.
	(nvptx_fork): Ditto.
	(nvptx_forked): Ditto.
	(nvptx_joining): Ditto.
	(nvptx_join): Ditto.
	(nvptx_barsync): Ditto.
	(epilogue): Emit stack restore if TARGET_SOFT_STACK.
	(allocate_stack): Implement for TARGET_SOFT_STACK.  Remove unused code.
	(allocate_stack_<mode>): Remove unused pattern.
	(set_softstack_insn): New pattern.
	(restore_stack_block): Handle for TARGET_SOFT_STACK.
	(nvptx_vote_ballot): New pattern.
	(omp_simt_lane): Ditto.
	(omp_simt_last_lane): Ditto.
	(omp_simt_ordered): Ditto.
	(omp_simt_vote_any): Ditto.
	(omp_simt_xchg_bfly): Ditto.
	(omp_simt_xchg_idx): Ditto.
	(nvptx_nounroll): Ditto.
	(atomic_compare_and_swap<mode>_1): Mark with atomic attribute.
	(atomic_exchange<mode>): Ditto.
	(atomic_fetch_add<mode>): Ditto.
	(atomic_fetch_addsf): Ditto.
	(atomic_fetch_<logic><mode>): Ditto.
	* config/nvptx/nvptx.opt: (msoft-stack): New option.
	(muniform-simt): Ditto.
	(mgomp): Ditto.
	* config/nvptx/t-nvptx (MULTILIB_OPTIONS): New.
	* doc/extend.texi (Nvidia PTX Variable Attributes): New section.
	* doc/invoke.texi (msoft-stack): Document.
	(muniform-simt): Document
	(mgomp): Document.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: (TARGET_SIMT_VF): New hook.
	* target.def: Define it.
	* target-insns.def (omp_simt_lane): New.
	(omp_simt_last_lane): New.
	(omp_simt_ordered): New.
	(omp_simt_vote_any): New.
	(omp_simt_xchg_bfly): New.
	(omp_simt_xchg_idx): New.

libgcc/
	* config/nvptx/crt0.c (__main): Setup __nvptx_stacks and __nvptx_uni.
	* config/nvptx/mgomp.c: New file.
	* config/nvptx/t-nvptx: Add mgomp.c

gcc/testsuite/
	* lib/target-supports.exp (check_effective_target_alloca): Use a
	compile test.
	* gcc.target/nvptx/softstack.c: New test.
	* gcc.target/nvptx/decl-shared.c: New test.
	* gcc.target/nvptx/decl-shared-init.c: New test.

From-SVN: r242503
2016-11-16 20:17:00 +03:00
Maciej W. Rozycki 2fe2aba3cd MIPS/GCC: Mark text contents as code or data
gcc/
	* config/mips/mips-protos.h (mips_set_text_contents_type): New
	prototype.
	* config/mips/mips.h (ASM_OUTPUT_BEFORE_CASE_LABEL): New macro.
	(ASM_OUTPUT_CASE_END): Likewise.
	* config/mips/mips.c (mips_set_text_contents_type): New
	function.
	(mips16_emit_constants): Record the pool's initial label number
	with the `consttable' insn.  Emit a `consttable_end' insn at the
	end.
	(mips_final_prescan_insn): Call `mips_set_text_contents_type'
	for `consttable' insns.
	(mips_final_postscan_insn): Call `mips_set_text_contents_type'
	for `consttable_end' insns.
	* config/mips/mips.md (unspec): Add UNSPEC_CONSTTABLE_END enum
	value.
	(consttable): Add operand.
	(consttable_end): New insn.

	gcc/testsuite/
	* gcc.target/mips/data-sym-jump.c: New test case.
	* gcc.target/mips/data-sym-pool.c: New test case.
	* gcc.target/mips/insn-pseudo-4.c: Adjust for constant pool
	annotation.

From-SVN: r242502
2016-11-16 17:12:08 +00:00
Yuri Rumyantsev 598eaaa2a2 Support non-masked epilogue vectoriziation
gcc/

2016-11-16  Yuri Rumyantsev  <ysrumyan@gmail.com>

	* params.def (PARAM_VECT_EPILOGUES_NOMASK): New.
	* tree-if-conv.c (tree_if_conversion): Make public.
	* * tree-if-conv.h: New file.
	* tree-vect-data-refs.c (vect_analyze_data_ref_dependences) Avoid
	dynamic alias checks for epilogues.
	* tree-vect-loop-manip.c (vect_do_peeling): Return created epilog.
	* tree-vect-loop.c: include tree-if-conv.h.
	(new_loop_vec_info): Add zeroing orig_loop_info field.
	(vect_analyze_loop_2): Don't try to enhance alignment for epilogues.
	(vect_analyze_loop): Add argument ORIG_LOOP_INFO which is not NULL
	if epilogue is vectorized, set up orig_loop_info field of loop_vinfo
	using passed argument.
	(vect_transform_loop): Check if created epilogue should be returned
	for further vectorization with less vf.  If-convert epilogue if
	required. Print vectorization success for epilogue.
	* tree-vectorizer.c (vectorize_loops): Add epilogue vectorization
	if it is required, pass loop_vinfo produced during vectorization of
	loop body to vect_analyze_loop.
	* tree-vectorizer.h (struct _loop_vec_info): Add new field
	orig_loop_info.
	(LOOP_VINFO_ORIG_LOOP_INFO): New.
	(LOOP_VINFO_EPILOGUE_P): New.
	(LOOP_VINFO_ORIG_VECT_FACTOR): New.
	(vect_do_peeling): Change prototype to return epilogue.
	(vect_analyze_loop): Add argument of loop_vec_info type.
	(vect_transform_loop): Return created loop.

gcc/testsuite/

2016-11-16  Yuri Rumyantsev  <ysrumyan@gmail.com>

	* lib/target-supports.exp (check_avx2_hw_available): New.
	(check_effective_target_avx2_runtime): New.
	* gcc.dg/vect/vect-tail-nomask-1.c: New test.

From-SVN: r242501
2016-11-16 08:22:39 -08:00
Tamar Christina 03b85dcd48 Fix test names for trad.exp tests
PR testsuite/78136
	 * gcc.dg/cpp/trad/trad.exp
	 (dg-runtest): Moved $srcdir/$subdir/ to DEFAULT_TRADCPPFLAGS.

From-SVN: r242500
2016-11-16 15:53:08 +00:00
Segher Boessenkool 7157aa8583 df: Change defs in entry and uses in exit block during separate shrink-wrapping
So far all target implementations of the separate shrink-wrapping hooks
use the DF LIVE info to figure out around which basic blocks the non-
volatile registers need to be saved.  This is done by looking at the
IN+GEN+KILL sets of the basic blocks.  However, that doesn't work for
registers that DF says are defined in the entry block, or used in the
exit block.

This patch introduces a local flag DF_SCAN_EMPTY_ENTRY_EXIT that says
no registers should be defined in the entry block, and none used in the
exit block.  It also makes try_shrink_wrapping_separate use it.  The
rs6000 port is changed to use IN+GEN+KILL for the LR component.


	* config/rs6000/rs6000.c (rs6000_components_for_bb): Mark the LR
	component as used also if LR_REGNO is a live input to the bb.
	* df-scan.c (df_get_entry_block_def_set): Return immediately after
	clearing the set if DF_SCAN_EMPTY_ENTRY_EXIT is set.
	(df_get_exit_block_use_set): Ditto.
	* df.h (df_scan_flags): New enum.
	* shrink-wrap.c (try_shrink_wrapping_separate): Set
	DF_SCAN_EMPTY_ENTRY_EXIT in df_scan->local_flags, and call
	df_update_entry_block_defs and df_update_exit_block_uses
	at the start; clear the flag and call those functions at the end.

From-SVN: r242497
2016-11-16 16:23:36 +01:00
Ian Lance Taylor 307ca54339 compiler: separate incomparable types from comparable ones
Otherwise we can accidentally and incorrectly mark an actual user type
    as incomparable.  This fixes the gccgo version of
    https://golang.org/issue/17752.  The test case for gccgo is
    https://golang.org/cl/33249.
    
    Reviewed-on: https://go-review.googlesource.com/33292

From-SVN: r242494
2016-11-16 14:47:28 +00:00
Richard Sandiford 711188895e Fix nb_iterations calculation in tree-vect-loop-manip.c
We previously stored the number of loop iterations rather
than the number of latch iterations.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

	* tree-vect-loop-manip.c (slpeel_make_loop_iterate_ntimes): Set
	nb_iterations to the number of latch iterations rather than the
	number of loop iterations.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r242493
2016-11-16 14:21:32 +00:00
Richard Sandiford ae1a0866a1 An alternative fix for PR70944
The transformations made by make_compound_operation apply
only to scalar integer modes.  The fix for PR70944 had enforced
that by returning early for vector modes at the top of the
function.  However, the function is supposed to be recursive,
so we should continue to look at integer suboperands even if
the outer operation is a vector one.

This patch instead splits out the non-recursive parts
of make_compound_operation into a subroutine and checks
that the mode is a scalar integer before calling it.
The patch was originally written to help with the later
conversion to static type checking of mode classes, but it
also happened to reenable optimisation of things like
vec_duplicate operands.

Note that the gen_lowparts in the PLUS and MINUS cases
were redundant, since new_rtx already had mode "mode"
at those points.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

	* combine.c (maybe_swap_commutative_operands): New function.
	(combine_simplify_rtx): Use it.
	(change_zero_ext): Likewise.
	(make_compound_operation_int): New function, split out of...
	(make_compound_operation): ...here.  Use
	maybe_swap_commutative_operands for both.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r242492
2016-11-16 14:20:40 +00:00
Richard Earnshaw 0c012e9bf7 [arm] Add vfpv2 and neon-vfpv3
* arm/arm-fpus.def (vfpv2): New FPU, currently an alias for 'vfp'.
	(neon-vfpv3): New FPU, currently an alias for 'neon'.
	* arm/arm-tables.opt: Regenerated.
        * arm/t-aprofile (MULTILIB_REUSE): Add reuse rules for vfpv2 and
        neon-vfpv3.
	* doc/invoke.texi (ARM: -mfpu): Document new options.  Note that 'vfp'
	and 'neon' are aliases for specific implementations.

From-SVN: r242491
2016-11-16 14:02:10 +00:00
Andre Vehreschild dc9e0b66b2 re PR fortran/78356 ([OOP] segfault allocating polymorphic variable with polymorphic component with allocatable component)
gcc/fortran/ChangeLog:

2016-11-16  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/78356
	* class.c (gfc_is_class_scalar_expr): Prevent taking an array ref for
	a component ref.
	* trans-expr.c (gfc_trans_assignment_1): Ensure a reference to the
	object to copy is generated, when assigning class objects.

gcc/testsuite/ChangeLog:

2016-11-16  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/78356
	* gfortran.dg/class_allocate_23.f08: New test.

From-SVN: r242490
2016-11-16 14:45:29 +01:00
Richard Sandiford 45a9968b37 Fix vec_cmp comparison mode
vec_cmps assign the result of a vector comparison to a mask.
The optab was called with the destination having mode mask_mode
but with the source (the comparison) having mode VOIDmode,
which led to invalid rtl if the source operand was used directly.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

	* optabs.c (vector_compare_rtx): Add a cmp_mode parameter
	and use it in the final call to gen_rtx_fmt_ee.
	(expand_vec_cond_expr): Update accordingly.
	(expand_vec_cmp_expr): Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r242489
2016-11-16 13:09:12 +00:00