1. 17 Nov, 2016 4 commits
  2. 16 Nov, 2016 36 commits
    • re PR rtl-optimization/78378 (wrong code when combining shift + mult + zero_extend) · fb324f02
      	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
      Jakub Jelinek committed
    • R_MIPS_JALR failures · 8972f7e9
      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
      Alan Modra committed
    • libiberty: Add Rust symbol demangling. · 10d48c59
      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
      David Tolnay committed
    • PR c++/78373 - ICE with TREE_CONSTANT reference · 46b2baa7
      	* decl.c (cp_finish_decl): Don't set TREE_CONSTANT on a reference.
      	* typeck2.c (store_init_value): Likewise.
      
      From-SVN: r242523
      Jason Merrill committed
    • * rtl.h: Declare gt_ggc_mx and gt_pch_nx. · 2ec15cba
      From-SVN: r242522
      Jason Merrill committed
    • Commentary corrections · 23bed414
      From-SVN: r242521
      William Schmidt committed
    • re PR tree-optimization/77848 (Gimple if-conversion results in redundant comparisons) · 9e16e656
      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
      Bill Schmidt committed
    • gcc: remove unneeded global related to hot/cold partitioning · a2ea37fb
      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
      Andrew Burgess committed
    • re PR libfortran/51119 (MATMUL slow for large matrices) · d174eb65
      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
      Jerry DeLisle committed
    • MIPS16/GCC: Emit explicit JRC from `casesi_internal_mips16_<mode>' insn · 576b0863
      	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
      Maciej W. Rozycki committed
    • MIPS16/GCC: Improve `casesi_internal_mips16_<mode>'s instruction count estimate · a3be783a
      	gcc/
      	* config/mips/mips.md (casesi_internal_mips16_<mode>): Set
      	`insn_count' to 11 rather than 16.
      
      From-SVN: r242516
      Maciej W. Rozycki committed
    • MIPS16/GCC: Correct `casesi_internal_mips16_<mode>'s RTL pattern · 9d2082e7
      	gcc/
      	* config/mips/mips.md (casesi_internal_mips16_<mode>): Use the
      	`ltu' rather than `leu' operation in the RTL pattern
      
      From-SVN: r242515
      Maciej W. Rozycki committed
    • MIPS16/GCC: Fix DImode `casesi_internal_mips16_<mode>' assembly instructions · d08c0ea3
      	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
      Maciej W. Rozycki committed
    • Fix tuple decomposition decltype. · fc72d1ed
      	* 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
      Jason Merrill committed
    • microMIPS/GCC: Fix PIC call relaxation · 8e2be5ae
      	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
      Maciej W. Rozycki committed
    • re PR bootstrap/72823 (r239175 causes build failure) · 3549e181
      	PR bootstrap/72823
      	* configure.ac (ENABLE_ASSERT_CHECKING): Define if gcc configure
      	would define that macro.
      	* configure: Regenerated.
      	* config.in: Regenerated.
      
      From-SVN: r242510
      Jakub Jelinek committed
    • runtime: replace runtime1.goc with Go and C code · 350767bf
          
          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
      Ian Lance Taylor committed
    • Fix ICE on empty FIQ interrupt handler on ARM · 660e6c2c
      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
      Thomas Preud'homme committed
    • re PR fortran/78299 (ICE in expand_omp_for_static_nochunk, at omp-low.c:9622) · 5e8d7713
      	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
      Jakub Jelinek committed
    • Looking at PR77308, one of the issues is that the bswap optimization phase doesn't work on ARM. · dd784916
      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
      Wilco Dijkstra committed
    • [PR libgfortran/78314] Fix ieee_support_halting · 0af30954
      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
      Szabolcs Nagy committed
    • ivopts-orig_biv-inc.c: Adjust test string according to updated dump info. · e38f6572
      	gcc/testsuite	
      	* gcc.target/arm/ivopts-orig_biv-inc.c: Adjust test string
      	according to updated dump info.
      
      From-SVN: r242504
      Bin Cheng committed
    • nvptx backend prerequisites for OpenMP offloading · 5012919d
      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
      Alexander Monakov committed
    • MIPS/GCC: Mark text contents as code or data · 2fe2aba3
      	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
      Maciej W. Rozycki committed
    • Support non-masked epilogue vectoriziation · 598eaaa2
      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
      Yuri Rumyantsev committed
    • Fix test names for trad.exp tests · 03b85dcd
      	 PR testsuite/78136
      	 * gcc.dg/cpp/trad/trad.exp
      	 (dg-runtest): Moved $srcdir/$subdir/ to DEFAULT_TRADCPPFLAGS.
      
      From-SVN: r242500
      Tamar Christina committed
    • df: Change defs in entry and uses in exit block during separate shrink-wrapping · 7157aa85
      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
      Segher Boessenkool committed
    • compiler: separate incomparable types from comparable ones · 307ca543
          
          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
      Ian Lance Taylor committed
    • Fix nb_iterations calculation in tree-vect-loop-manip.c · 71118889
      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
      Richard Sandiford committed
    • An alternative fix for PR70944 · ae1a0866
      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
      Richard Sandiford committed
    • [arm] Add vfpv2 and neon-vfpv3 · 0c012e9b
      	* 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
      Richard Earnshaw committed
    • re PR fortran/78356 ([OOP] segfault allocating polymorphic variable with… · dc9e0b66
      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
      Andre Vehreschild committed
    • Fix vec_cmp comparison mode · 45a9968b
      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
      Richard Sandiford committed
    • Use df_read_modify_subreg_p in cprop.c · 41c7cac5
      local_cprop_find_used_regs punted on all multiword registers,
      with the comment:
      
                /* Setting a subreg of a register larger than word_mode leaves
                   the non-written words unchanged.  */
      
      But this only applies if the outer mode is smaller than the
      inner mode.  If they're the same size then writes to the subreg
      are a normal full update.
      
      This patch uses df_read_modify_subreg_p instead.  A later patch
      adds more uses of the same routine, but this part had a (positive)
      effect on code generation for the testsuite whereas the others
      seemed to be simple clean-ups.
      
      gcc/
      2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      	* cprop.c (local_cprop_find_used_regs): Use df_read_modify_subreg_p.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r242488
      Richard Sandiford committed
    • re PR middle-end/78333 (always-inline gnu-inline functions break -finstrument-functions) · d964ba07
      2016-11-16  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/78333
      	* gimplify.c (gimplify_function_tree): Do not instrument
      	GNU extern inline functions.
      
      	* gcc.dg/pr78333.c: New testcase.
      
      From-SVN: r242487
      Richard Biener committed
    • Fix PR sanitizer/78270 (part 2) · 080140bc
      	PR sanitizer/78270
      	* gimplify.c (gimplify_switch_expr): Always save previous
      	gimplify_ctxp->live_switch_vars.
      	PR sanitizer/78270
      	* gcc.dg/asan/pr78270.c: Update comment style.
      	* gcc.dg/asan/pr78270-2.c: New test.
      
      From-SVN: r242485
      Martin Liska committed