1. 23 Oct, 2016 5 commits
    • re PR fortran/54730 (ICE in gfc_typenode_for_spec, at fortran/trans-types.c:1066) · 87c9fca5
      2016-10-23  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/54730
      	PR fortran/78033
      	* array.c (gfc_match_array_constructor): Remove checkpointing
      	introduced in r196416 (original fix for PR fortran/54730).  Move
      	initialization to top of function.
      	* match.c (gfc_match_type_spec): Special case matching for REAL.
      
      2016-10-23  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/54730
      	PR fortran/78033
      	* gfortran.dg/pr78033.f90: New test.
      
      From-SVN: r241451
      Steven G. Kargl committed
    • re PR fortran/69834 ([OOP] Collision in derived type hashes) · dfd6231e
      2016-10-23  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69834
      	* class.c (gfc_find_derived_vtab): Obtain the gsymbol for the
      	derived type's module. If the gsymbol is present and the top
      	level namespace corresponds to a module, use the gsymbol name
      	space. In the search to see if the vtable exists, try the gsym
      	namespace first.
      	* dump-parse-tree (show_code_node): Modify select case dump to
      	show select type construct.
      	* resolve.c (build_loc_call): New function.
      	(resolve_select_type): Add check for repeated type is cases.
      	Retain selector expression and use it later instead of expr1.
      	Exclude deferred length TYPE IS cases and emit error message.
      	Store the address for the vtable in the 'low' expression and
      	the hash value in the 'high' expression, for each case. Do not
      	call resolve_select.
      	* trans.c(trans_code) : Call gfc_trans_select_type.
      	* trans-stmt.c (gfc_trans_select_type_cases): New function.
      	(gfc_trans_select_type): New function.
      	* trans-stmt.h : Add prototype for gfc_trans_select_type.
      
      2016-10-23  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69834
      	* gfortran.dg/select_type_1.f03: Change error for overlapping
      	TYPE IS cases.
      	* gfortran.dg/select_type_36.f03: New test.
      
      From-SVN: r241450
      Paul Thomas committed
    • sparc-c.c (sparc_target_macros): Replace TARGET_64BIT with TARGET_ARCH64. · fb4ab5f0
      	* config/sparc/sparc-c.c (sparc_target_macros): Replace TARGET_64BIT
      	with TARGET_ARCH64.  Define __VIS to 0x400 if TARGET_VIS4.
      
      From-SVN: r241446
      Eric Botcazou committed
    • 2016-10-22 François Dumont <fdumont@gcc.gnu.org> · 35518d76
      	* include/bits/c++config (_GLIBCXX_BEGIN_NAMESPACE_ALGO)
      	(_GLIBCXX_END_NAMESPACE_ALGO): Default to respectively
      	_GLIBCXX_BEGIN_NAMESPACE_VERSION and _GLIBCXX_END_NAMESPACE_VERSION.
      	(_GLIBCXX_BEGIN_NAMESPACE_CONTAINER, _GLIBCXX_END_NAMESPACE_CONTAINER):
      	Likewise.
      
      From-SVN: r241445
      François Dumont committed
    • Daily bump. · 8c2430bb
      From-SVN: r241444
      GCC Administrator committed
  2. 22 Oct, 2016 6 commits
    • * gcc.dg/tree-ssa/pr71347.c: Remove XFAIL on SPARC. · 66ccff98
      From-SVN: r241441
      Eric Botcazou committed
    • re PR fortran/78021 (Wrong result with optimization on character constant) · 15876cee
      2016-10-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/78021
      	* gfc_compare_functions:  Strings with different lengths in
      	argument lists compare unequal.
      
      2016-10-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/78021
      	* gfortran.dg/string_length_3.f90:  New test.
      
      From-SVN: r241440
      Thomas Koenig committed
    • re PR fortran/43366 ([OOP][F08] Intrinsic assign to polymorphic variable) · 574284e9
      gcc/fortran/ChangeLog:
      
      2016-10-22  Andre Vehreschild  <vehre@gcc.gnu.org>
      
      	PR fortran/43366
      	PR fortran/51864
      	PR fortran/57117
      	PR fortran/61337
      	PR fortran/61376
      	* primary.c (gfc_expr_attr): For transformational functions on classes
      	get the attrs from the class argument.
      	* resolve.c (resolve_ordinary_assign): Remove error message due to
      	feature implementation.  Rewrite POINTER_ASSIGNS to ordinary ones when
      	the right-hand side is scalar class object (with some restrictions).
      	* trans-array.c (trans_array_constructor): Create the temporary from
      	class' inner type, i.e., the derived type.
      	(build_class_array_ref): Add support for class array's storage of the
      	class object or the array descriptor in the decl saved descriptor.
      	(gfc_conv_expr_descriptor): When creating temporaries for class objects
      	add the class object's handle into the decl saved descriptor.
      	(structure_alloc_comps): Use the common way to get the _data component.
      	(gfc_is_reallocatable_lhs): Add notion of allocatable class objects.
      	* trans-expr.c (gfc_find_and_cut_at_last_class_ref): Remove the only ref
      	only when the expression's type is BT_CLASS.
      	(gfc_trans_class_init_assign): Correctly handle class arrays.
      	(gfc_trans_class_assign): Joined into gfc_trans_assignment_1.
      	(gfc_conv_procedure_call): Support for class types as arguments.
      	(trans_get_upoly_len): For unlimited polymorphics retrieve the _len
      	component's tree.
      	(trans_class_vptr_len_assignment): Catch all ways to assign the _vptr
      	and _len components of a class object correctly.
      	(pointer_assignment_is_proc_pointer): Identify assignments of
      	procedure pointers.
      	(gfc_trans_pointer_assignment): Enhance support for class object pointer
      	assignments.
      	(gfc_trans_scalar_assign): Removed assert.
      	(trans_class_assignment): Assign to a class object.
      	(gfc_trans_assignment_1): Treat class objects correctly.
      	(gfc_trans_assignment): Propagate flags to trans_assignment_1.
      	* trans-stmt.c (gfc_trans_allocate): Use gfc_trans_assignment now
      	instead of copy_class_to_class.
      	* trans-stmt.h: Function prototype removed.
      	* trans.c (trans_code): Less special casing for class objects.
      	* trans.h: Added flags to gfc_trans_assignment () prototype.
      
      gcc/testsuite/ChangeLog:
      
      2016-10-22  Andre Vehreschild  <vehre@gcc.gnu.org>
      
              Forgot to add on original commit.
              * gfortran.dg/coarray_alloc_comp_2.f08: New test.
      
      2016-10-22  Andre Vehreschild  <vehre@gcc.gnu.org>
      
      	PR fortran/43366
      	PR fortran/57117
      	PR fortran/61337
      	* gfortran.dg/alloc_comp_class_5.f03: New test.
      	* gfortran.dg/class_allocate_21.f90: New test.
      	* gfortran.dg/class_allocate_22.f90: New test.
      	* gfortran.dg/realloc_on_assign_27.f08: New test.
      
      From-SVN: r241439
      Andre Vehreschild committed
    • Ignore perms::symlink_nofollow on non-symlinks · 4e04812d
      	* src/filesystem/ops.cc (permissions(const path&, perms, error_code&)):
      	Ignore symlink_nofollow flag if file is not a symlink.
      	* testsuite/experimental/filesystem/operations/permissions.cc: Test
      	symlink_nofollow on non-symlinks.
      
      From-SVN: r241438
      Jonathan Wakely committed
    • aarch64-cores.def: Rewrite so IMP and PART are integer constants. · 2e721daa
      2016-10-21  Andrew Pinski  <apinski@cavium.com>
      
              * config/aarch64/aarch64-cores.def: Rewrite so IMP and PART are
              integer constants.
              * config/aarch64/driver-aarch64.c (struct aarch64_core_data): Change
              implementer_id to unsigned char.
              Change part_no to unsigned int.
              (AARCH64_BIG_LITTLE): New define.
              (INVALID_IMP): New define.
              (INVALID_CORE): New define.
              (cpu_data): Change the last element's implementer_id and part_no to
              integers.
              (valid_bL_string_p): Rewrite to ..
              (valid_bL_core_p): this for integers instead of strings.
              (parse_field): New function.
              (contains_string_p): Rewrite to ...
              (contains_core_p): this for integers and only for the part_no.
              (host_detect_local_cpu): Rewrite handling of implementation and
              par num to be integers; simplifying the code.
      
      From-SVN: r241437
      Andrew Pinski committed
    • Daily bump. · e1454b8c
      From-SVN: r241436
      GCC Administrator committed
  3. 21 Oct, 2016 29 commits
    • libgo: keep c0 and c1 out of runtime.inc · 15ca61bc
          
          The constants named c0 and c1 turn up as macros in runtime.inc.  This
          reportedly breaks building on Solaris 11, where there is a system struct
          that has a field named c1.  The constants aren't needed by the runtime C
          code, so avoid the problem by grepping them out.
          
          Reviewed-on: https://go-review.googlesource.com/31730
      
      From-SVN: r241432
      Ian Lance Taylor committed
    • libgo: leave Int64Align as 8 on 32-bit SPARC · 6156a05a
          
          Verified by testing on SPARC Solaris.
          
          Reviewed-on: https://go-review.googlesource.com/31675
      
      From-SVN: r241430
      Ian Lance Taylor committed
    • re PR tree-optimization/71947 (x ^ y not folded to 0 if x == y by DOM) · 20276dc9
      	* PR tree-optimization/71947
      	* gcc.dg/tree-ssa/pr71947-4.c: Avoid x86 opcode.
      	* gcc.dg/tree-ssa/pr71947-5.c: Likewise.
      	* gcc.dg/tree-ssa/pr71947-6.c: Make it opt-in rather than opt-out.
      
      From-SVN: r241429
      Jeff Law committed
    • ADDR_EXPR and nonnull · f7503699
      ADDR_EXPR and nonnull
      gcc/ChangeLog:
      
      2016-10-21  Kugan Vivekanandarajah  <kuganv@linaro.org>
      
      	* ipa-prop.c (ipa_compute_jump_functions_for_edge): Create nonzero
      	value range for pointers in more cases.
      
      gcc/testsuite/ChangeLog:
      
      2016-10-21  Kugan Vivekanandarajah  <kuganv@linaro.org>
      
      	* gcc.dg/ipa/vrp5.c: New test.
      	* gcc.dg/ipa/vrp6.c: New test.
      
      From-SVN: r241428
      Kugan Vivekanandarajah committed
    • runtime: copy lfstack code from Go 1.7 runtime · e597e053
          
          Note that lfstack_64bit.go was modified for Solaris support in a
          different, and better, way than the superseded lfstack.goc code.
          
          Reviewed-on: https://go-review.googlesource.com/31673
      
      From-SVN: r241427
      Ian Lance Taylor committed
    • re PR c++/77656 (64-bit integral template parameter gets incorrectly sized as 32-bits) · 16b61424
      	PR c++/77656
      	* pt.c (convert_template_argument): Call convert_nontype_argument
      	on value-dependent but not type-dependent arguments.
      	(convert_nontype_argument): Handle value-dependent arguments.
      	(canonicalize_expr_argument): New.
      	(deducible_expression, unify): Skip CONVERT_EXPR.
      	* error.c (dump_template_argument): Likewise.
      	* mangle.c (write_expression): Likewise.
      
      From-SVN: r241425
      Jason Merrill committed
    • re PR libfortran/78055 (Many new gfortran test failures) · 8b729f5c
      2016-10-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
      
      	PR libfortran/78055
      	* io/io.h (st_parameter_dt): Restore GFC_IO_INT to maintain
      	alignment.
      
      From-SVN: r241422
      Jerry DeLisle committed
    • Really add the test this time... · c82bc7ed
          testsuite/
      	* gcc.target/aarch64/test_frame_17.c: New test.
      
      From-SVN: r241421
      Wilco Dijkstra committed
    • Improve stack adjustment by reusing a temporary move immediate from the epilog... · 5be6b295
      Improve stack adjustment by reusing a temporary move immediate from the epilog
      if the register is still valid in the epilog.  This generates smaller code for
      leaf functions with a stack size of more then 4KB.
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_add_constant_internal):
      	Add extra argument to allow emitting the move immediate.
      	Use add/sub with positive immediate.
      	(aarch64_add_constant): Add inline function.
      	(aarch64_add_sp): Likewise.
      	(aarch64_sub_sp): Likewise.
      	(aarch64_expand_prologue): Call aarch64_sub_sp.
      	(aarch64_expand_epilogue): Call aarch64_add_sp.
      	Decide when to leave out move.
      	(aarch64_output_mi_thunk): Call aarch64_add_constant.
      
      testsuite/
      	* gcc.target/aarch64/test_frame_17.c: New test.
      
      From-SVN: r241420
      Wilco Dijkstra committed
    • If the number of integer callee-saves is odd, any FP callee-saves use 8-byte aligned LDP/STP. · 4b0685d9
      If the number of integer callee-saves is odd, any FP callee-saves use 8-byte
      aligned LDP/STP.  Since 16-byte alignment may be faster on some CPUs, align
      the FP callee-saves to 16 bytes and use the alignment gap for the last FP
      callee-save when possible.
      
          gcc/
              * config/aarch64/aarch64.c (aarch64_layout_frame):
              Align FP callee-saves.
      
      From-SVN: r241419
      Wilco Dijkstra committed
    • LWG2720 implement filesystem::perms::symlink_nofollow · d17f7088
      	* include/experimental/bits/fs_fwd.h (perms::resolve_symlinks):
      	Replace with symlink_nofollow (LWG 2720).
      	* src/filesystem/ops.cc (permissions(const path&, perms, error_code&)):
      	Handle symlink_nofollow.
      	* testsuite/experimental/filesystem/operations/create_symlink.cc: New
      	test.
      	* testsuite/experimental/filesystem/operations/permissions.cc: Test
      	overload taking error_code.
      
      From-SVN: r241418
      Jonathan Wakely committed
    • LWG2725 Fix error reporting for filesystem::exists · 2be92127
      	* include/experimental/bits/fs_ops.h
      	(exists(const path&, error_code&)): Clear error if status is known
      	(LWG 2725).
      	(status(const path&, error_code&)): Handle EOVERFLOW.
      	* testsuite/experimental/filesystem/operations/exists.cc: Test
      	overload taking an error_code.
      
      From-SVN: r241417
      Jonathan Wakely committed
    • LWG2707 init filesystem::path from string_type&& · e59e183f
      	* include/experimental/bits/fs_path.h (path::path(string_type&&))
      	(path::operator=(string&&), path::assign(string_type&&)): Define
      	construction and assignment from string_type rvalues (LWG 2707).
      
      From-SVN: r241416
      Jonathan Wakely committed
    • re PR preprocessor/71681 (header.gcc file lookup is broken for -remap) · 67a6cac7
      2016-10-21  Andris Pavenis  <andris.pavenis@iki.fi>
      
      	PR preprocessor/71681
      	* gcc.dg/cpp/pr71681-1.c: New testcase
      	* gcc.dg/cpp/pr71681-2.c: Likewise
      	* gcc.dg/cpp/remap/header.gcc: File for added test-cases
      	* gcc.dg/cpp/remap/a/header.gcc: Likewise
      	* gcc.dg/cpp/remap/a/t_1.h: Likewise
      	* gcc.dg/cpp/remap/a/t_2.h: Likewise
      
      From-SVN: r241415
      Andris Pavenis committed
    • Optimize RNG use in std::sample selection sampling · 9d8ff2f6
      2016-10-21  Eelis van der Weegen  <eelis@eelis.net>
      
      	* include/bits/stl_algo.h (__gen_two_uniform_ints): Move logic out
      	of shuffle into new function.
      	(shuffle): Call __gen_two_uniform_ints.
      	(__sample<ForwardIterator, OutputIterator, Cat, Size, URBG>): Use
      	__gen_two_uniform_ints and perform two samples at a time.
      
      From-SVN: r241414
      Eelis van der Weegen committed
    • re PR preprocessor/71681 (header.gcc file lookup is broken for -remap) · 58f30963
      2016-10-21  Andris Pavenis  <andris.pavenis@iki.fi>
      
      	PR preprocessor/71681
      	* files.c (remap_filename): Fix handling -remap in subdirectories.
      
      From-SVN: r241413
      Andris Pavenis committed
    • adxintrin.h (_subborrow_u32, [...]): Formatting fixes. · 810cb191
      	* config/i386/adxintrin.h (_subborrow_u32, _addcarry_u32,
      	_addcarryx_u32, _subborrow_u64, _addcarry_u64, _addcarryx_u64):
      	Formatting fixes.
      	* config/i386/rdseedintrin.h (_rdseed16_step, _rdseed32_step,
      	_rdseed64_step): Likewise.
      	* config/i386/tbmintrin.h (__bextri_u32): Likewise.
      
      From-SVN: r241412
      Jakub Jelinek committed
    • re PR target/78057 (FAIL: gcc.target/i386/bmi-{4,5,6}.c) · 9c4c8b7b
      	PR target/78057
      	* config/i386/i386.c: Include fold-const-call.h, tree-vrp.h
      	and tree-ssanames.h.
      	(ix86_fold_builtin): Fold IX86_BUILTIN_[LT]ZCNT{16,32,64}
      	with INTEGER_CST argument.
      	(ix86_gimple_fold_builtin): New function.
      	(TARGET_GIMPLE_FOLD_BUILTIN): Define.
      
      	* gcc.target/i386/pr78057.c: New test.
      
      From-SVN: r241411
      Jakub Jelinek committed
    • Split <functional> into smaller pieces · c05986b9
      	* include/Makefile.am: Add <bits/refwrap.h> and <bits/std_function.h>.
      	Order alphabetically.
      	* include/Makefile.in: Regenerate.
      	* include/bits/refwrap.h: New header.
      	(_Maybe_get_result_type,_Weak_result_type_impl, _Weak_result_type)
      	(_Reference_wrapper_base_impl, _Reference_wrapper_base)
      	(reference_wrapper, ref, cref): Move here from <functional>.
      	* include/bits/shared_ptr_base.h: Include <bits/refwrap.h> and
      	<bits/stl_function.h> instead of <functional>.
      	* include/bits/std_function.h: New header.
      	(_Maybe_unary_or_binary_function, bad_function_call)
      	(__is_location_invariant, _Nocopy_types, _Any_data)
      	(_Simple_type_wrapper, _Function_base, _Function_handler, function):
      	Move here from <functional>.
      	* include/bits/unique_ptr.h: Include <bits/stl_function.h>.
      	* include/std/functional: Include new headers and move components to
      	them.
      	* include/std/future: Include <bits/std_function.h> instead of
      	<functional>.
      	* include/std/mutex: Likewise.
      	* include/std/regex: Likewise.
      	* src/c++11/compatibility-thread-c++0x.cc: Include <functional>.
      	* testsuite/20_util/default_delete/48631_neg.cc: Adjust dg-error line.
      	* testsuite/20_util/default_delete/void_neg.cc: Likewise.
      	* testsuite/20_util/unique_ptr/assign/48635_neg.cc: Adjust dg-error
      	lines.
      	* testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc: Likewise.
      	* testsuite/30_threads/packaged_task/49668.cc: Include <functional>.
      
      From-SVN: r241410
      Jonathan Wakely committed
    • dwarf2out.c (ranges_table): Change into vec<dw_ranges, va_gc> *. · 75a434a9
      	* dwarf2out.c (ranges_table): Change into vec<dw_ranges, va_gc> *.
      	(ranges_by_label): Change into vec<dw_ranges_by_label, va_gc> *.
      	(ranges_table_allocated, ranges_table_in_use,
      	ranges_by_label_allocated, ranges_by_label_in_use,
      	RANGES_TABLE_INCREMENT): Removed.
      	(add_ranges_num): Use vec_safe_push into ranges_table.
      	(add_ranges_by_labels): Use vec_safe_push into ranges_by_label.
      	(output_ranges): Adjust for ranges_table and ranges_by_label
      	conversion from arrays to vec.
      	(add_high_low_attributes, dwarf2out_finish): Adjust for range_table
      	conversion from arrays to vec.
      	(dwarf2out_c_finalize): Don't clear ranges_table_allocated,
      	ranges_table_in_use, ranges_by_label_allocated and
      	ranges_by_label_in_use.  Set ranges_by_label to NULL instead of 0.
      
      From-SVN: r241409
      Jakub Jelinek committed
    • dwarf2out.c (gen_variable_die): Emit DW_AT_const_expr attribute if needed. · 8e6982f7
      	* dwarf2out.c (gen_variable_die): Emit DW_AT_const_expr attribute
      	if needed.  Re-add origin_die variable and its initialization.
      cp/
      	* cp-objcp-common.c (cp_decl_dwarf_attribute): Handle
      	DW_AT_const_expr.
      testsuite/
      	* g++.dg/debug/dwarf2/constexpr-var-1.C: New test.
      
      From-SVN: r241408
      Jakub Jelinek committed
    • gimplify.c (gimplify_bind_expr): Handle oacc_declare_returns even for… · f9faea37
      gimplify.c (gimplify_bind_expr): Handle oacc_declare_returns even for -fstack-reuse=none, or for volatile vars etc.
      
      	* gimplify.c (gimplify_bind_expr): Handle oacc_declare_returns
      	even for -fstack-reuse=none, or for volatile vars etc.
      
      From-SVN: r241407
      Jakub Jelinek committed
    • Start adding selftests for print_rtx · e2ce9e83
      gcc/ChangeLog:
      	* print-rtl-function.c (flag_compact): Move extern decl to...
      	* print-rtl.h (flag_compact): ...here.
      	* rtl-tests.c (selftests::assert_rtl_dump_eq): New function.
      	(ASSERT_RTL_DUMP_EQ): New macro.
      	(selftest::test_dumping_regs): New function.
      	(selftest::test_dumping_insns): New function.
      	(selftest::test_uncond_jump): Add uses of ASSERT_RTL_DUMP_EQ on
      	the insns.
      	(selftest::rtl_tests_c_tests): Call the new test functions.
      
      From-SVN: r241405
      David Malcolm committed
    • Use global operator new in std::make_exception_ptr · 6652a944
      	* libsupc++/exception_ptr.h (make_exception_ptr): Qualify new.
      	* testsuite/18_support/exception_ptr/make_exception_ptr_2.cc: New
      	test.
      
      From-SVN: r241404
      Jonathan Wakely committed
    • re PR fortran/69566 ([OOP] Failure of SELECT TYPE with unlimited polymorphic function result) · de514d40
      2016-10-21  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69566
      	* resolve.c (fixup_array_ref): New function.
      	(resolve_select_type): Gather up the rank and array reference,
      	if any, from the selector. Fix up the 'associate name' and the
      	'associate entities' as necessary.
      	* trans-expr.c (gfc_conv_class_to_class): If the symbol backend
      	decl is a FUNCTION_DECL, use the 'fake_result_decl' instead.
      
      2016-10-21  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69566
      	* gfortran.dg/select_type_37.f03: New test.
      
      From-SVN: r241403
      Paul Thomas committed
    • make tablejump_p return the label as a rtx_insn * · dfe08bc4
      gcc/ChangeLog:
      
      2016-10-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
      
      	* cfgcleanup.c (merge_blocks_move_successor_nojumps): Adjust.
      	(outgoing_edges_match): Likewise.
      	(try_crossjump_to_edge): Likewise.
      	* cfgrtl.c (try_redirect_by_replacing_jump): Likewise.
      	(rtl_tidy_fallthru_edge): Likewise.
      	* rtl.h (tablejump_p): Adjust prototype.
      	* rtlanal.c (tablejump_p): Return the label as a rtx_insn *.
      
      From-SVN: r241402
      Trevor Saunders committed
    • make LABEL_REF_LABEL a rtx_insn * · 04a121a7
      While changing LABEL_REF_LABEL it might as well become an inline
      function, so that its clearer what types are involved.  Unfortunately
      because it is still possible to use XEXP and related macros on a
      LABEL_REF rtx you can still set the field to be a non insn rtx.  The
      other unfortunate thing is that the generators actually create LABEL_REF
      rtx that refer to MATCH_x rtx, so there we actually need to use XEXP to
      bypass the checking this patch adds.
      
      gcc/ChangeLog:
      
      2016-10-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
      
      	* rtl.h (label_ref_label): New function.
      	(set_label_ref_label): New function.
      	(LABEL_REF_LABEL): Delete.
      	* alias.c (rtx_equal_for_memref_p): Adjust.
      	* cfgbuild.c (make_edges): Likewise.
      	(purge_dead_tablejump_edges): Likewise.
      	* cfgexpand.c (convert_debug_memory_address): Likewise.
      	* cfgrtl.c (patch_jump_insn): Likewise.
      	* combine.c (distribute_notes): Likewise.
      	* cse.c (hash_rtx_cb): Likewise.
      	(exp_equiv_p): Likewise.
      	(fold_rtx): Likewise.
      	(check_for_label_ref): Likewise.
      	* cselib.c (rtx_equal_for_cselib_1): Likewise.
      	(cselib_hash_rtx): Likewise.
      	* emit-rtl.c (mark_label_nuses): Likewise.
      	* explow.c (convert_memory_address_addr_space_1): Likewise.
      	* final.c (output_asm_label): Likewise.
      	(output_addr_const): Likewise.
      	* gcse.c (add_label_notes): Likewise.
      	* genconfig.c (walk_insn_part): Likewise.
      	* genrecog.c (validate_pattern): Likewise.
      	* ifcvt.c (cond_exec_get_condition): Likewise.
      	(noce_emit_store_flag): Likewise.
      	(noce_get_alt_condition): Likewise.
      	(noce_get_condition): Likewise.
      	* jump.c (maybe_propagate_label_ref): Likewise.
      	(mark_jump_label_1): Likewise.
      	(redirect_exp_1): Likewise.
      	(rtx_renumbered_equal_p): Likewise.
      	* lra-constraints.c (operands_match_p): Likewise.
      	* print-rtl.c (print_value): Likewise.
      	* reload.c (find_reloads): Likewise.
      	* reload1.c (set_label_offsets): Likewise.
      	* reorg.c (get_branch_condition): Likewise.
      	* rtl-tests.c (test_uncond_jump): Likewise.
      	* rtl.c (rtx_equal_p_cb): Likewise.
      	(rtx_equal_p): Likewise.
      	* rtlanal.c (reg_mentioned_p): Likewise.
      	(rtx_referenced_p): Likewise.
      	(get_condition): Likewise.
      	* varasm.c (const_hash_1): Likewise.
      	(compare_constant): Likewise.
      	(const_rtx_hash_1): Likewise.
      	(output_constant_pool_1): Likewise.
      
      From-SVN: r241401
      Trevor Saunders committed
    • Fix PR 71627 - unable to find a register to spill · 1d64ceb0
      Tweak find_valid_class_1 to consider a reg class if atleast one regno in
      that class is ok.
      
      Previously, even if no regno was in_hard_reg_set_p, the code goes ahead and
      considers rclass as valid. bad was set only if a regno was in the reg
      class *and* HARD_REGNO_MODE_OK was false - if both were false, bad wasn't
      set and the reload got a wrong rclass. If that happened to be the best
      one, this eventually lead to find_reg running out of registers to
      spill, because the chosen rclass wouldn't have enough regs.
      
      Also, it expected every regno in rclass to be valid for mode 
      i.e., if any regno fails HARD_REGNO_MODE_OK, it rejected the rclass. The
      comments in the original commit for find_valid_class_1 say atleast one
      regno is ok. This was updated to say "class which contains only
      registers" when in_hard_reg_set_p was introduced in place of just
      TEST_HARD_REG_BIT.
      
      This commit fixes both of the above problems by not breaking out of the loop
      on first unavailable regno. Instead, it computes the rclass size consisting
      of all regnos in that class valid for the current mode. 
      
      If that computed size is zero, the rclass would be skipped, as it won't 
      beat best_size. Otherwise, the computed size is used to choose the best 
      rclass, instead of the static size from reg_class_size.
      
      gcc/
      
      2016-10-21  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
      
      	PR target/71627
      	* reload.c (find_valid_class_1): Allow regclass if atleast one
      	regno in regclass is ok. Compute and use rclass size based on
      	actually available regnos for mode in rclass.
      
      gcc/testsuite/
      
      2016-10-21  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
      
      	PR target/71627
      	* gcc.target/avr/pr71627.c: New test
      
      From-SVN: r241400
      Senthil Kumar Selvaraj committed