1. 15 Nov, 2019 32 commits
    • [amdgcn] Unfix registers for frame pointer · 969089ff
      Allow the registers used for the frame pointer to be used for other purposes
      if the frame pointer is not being used.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.h (FIXED_REGISTERS): Unfix frame pointer.
      	(CALL_USED_REGISTERS): Make frame pointer callee-saved.
      
      From-SVN: r278306
      Kwok Cheung Yeung committed
    • [amdgcn] Update lower bounds for the number of registers in non-leaf kernels · 87fdbe69
      Reduce the lower limits on the number of registers requested by non-leaf
      kernels to help improve CU occupancy.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (MAX_NORMAL_SGPR_COUNT, MAX_NORMAL_VGPR_COUNT): New.
      	(gcn_conditional_register_usage): Use constants in place of hard-coded
      	values.
      	(gcn_hsa_declare_function_name): Set lower bound for number of
      	SGPRs/VGPRs in non-leaf kernels to MAX_NORMAL_SGPR_COUNT and
      	MAX_NORMAL_VGPR_COUNT.
      
      From-SVN: r278305
      Kwok Cheung Yeung committed
    • ipa: Remove stray declaration · 1ca59cbe
      2019-11-15  Martin Jambor  <mjambor@suse.cz>
      
      	* ipa-utils.h (ipa_remove_useless_jump_functions): Remove stray
      	declaration.
      
      From-SVN: r278303
      Martin Jambor committed
    • [amdgcn] Restrict registers available to non-kernel functions · 342f9464
      Restrict the number of SGPRs and VGPRs available to non-kernel functions
      to improve compute-unit occupancy with multiple threads.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (default_requested_args): New.
      	(gcn_parse_amdgpu_hsa_kernel_attribute): Initialize requested args
      	set with default_requested_args.
      	(gcn_conditional_register_usage): Limit register usage of non-kernel
      	functions.  Reassign fixed registers if a non-standard set of args is
      	requested.
      	* config/gcn/gcn.h (FIXED_REGISTERS): Fix registers according to ABI.
      
      From-SVN: r278301
      Kwok Cheung Yeung committed
    • re PR ipa/92528 (ICE in ipa_get_parm_lattices since r278219) · 1c3c3f45
      2019-11-15  Feng Xue  <fxue@os.amperecomputing.com>
      
              PR ipa/92528
              * ipa-prop.c (update_jump_functions_after_inlining): Invalidate
              aggregate jump function when inlined-to caller has no edge summary.
      
      From-SVN: r278300
      Feng Xue committed
    • [amdgcn] Reinitialize registers for every function · 3ed8f692
      gcn_conditional_register_usage needs to be called for every function
      to set the fixed registers depending on the kernel args currently
      requested.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (gcn_init_cumulative_args): Call reinit_regs.
      
      From-SVN: r278299
      Kwok Cheung Yeung committed
    • Implement P1816R0, class template argument deduction for aggregates. · 9b41ebbc
      Rather than reimplement brace elision here, we call reshape_init and then
      discard the result.  We needed to set CLASSTYPE_NON_AGGREGATE a bit more in
      this patch, since outside a template it's set in check_bases_and_members.
      
      	* pt.c (maybe_aggr_guide, collect_ctor_idx_types): New.
      	(is_spec_or_derived): Split out from do_class_deduction.
      	(build_deduction_guide): Handle aggregate guide.
      	* class.c (finish_struct): Set CLASSTYPE_NON_AGGREGATE in a
      	template.
      	* cp-tree.h (CP_AGGREGATE_TYPE_P): An incomplete class is not an
      	aggregate.
      
      From-SVN: r278298
      Jason Merrill committed
    • [amdgcn] Use first lane of v1 for zero offset · f6e20012
      Use v1 instead of v0 when a zero-valued VGPR is needed.  This frees up
      v0 for other purposes.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (gcn_expand_prologue): Remove initialization and
      	prologue use of v0.
      	(print_operand_address): Use v1 for zero vector offset.
      
      From-SVN: r278297
      Kwok Cheung Yeung committed
    • libstdc++: Fix definition of std::nostopstate object · a0e1dcd4
      Also add <stop_token> header to PCH and Doxygen config.
      
      	* doc/doxygen/user.cfg.in: Add <stop_token>.
      	* include/precompiled/stdc++.h: Likewise.
      	* include/std/stop_token: Fix definition of std::nostopstate.
      	* testsuite/30_threads/headers/stop_token/synopsis.cc: New test.
      	* testsuite/30_threads/headers/thread/types_std_c++20.cc: New test.
      	* testsuite/30_threads/stop_token/stop_source.cc: New test.
      	* testsuite/30_threads/stop_token/stop_token.cc: Remove unnecessary
      	dg-require directives. Remove I/O and inclusion of <iostream>.
      
      From-SVN: r278296
      Jonathan Wakely committed
    • Fix vector/scalar to vector/vector conversion (PR92515) · f31e515f
      r278235 broke conversions of vector/scalar shifts into vector/vector
      shifts on targets that only provide the latter.  We need to record
      whether a conversion is required in that case too.
      
      Also, the old useless_type_conversion_p condition seemed unnecessarily
      strong, since the shift amount can have a different signedness from
      the shifted value and its vector type is never assumed to be identical
      to vectype.  The patch therefore uses tree_nop_conversion_p instead.
      
      2019-11-15  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/92515
      	* tree-vect-stmts.c (vectorizable_shift): Record incompatible op1
      	types when converting a vector/scalar shift into a vector/vector one,
      	using tree_nop_conversion_p instead of useless_type_conversion_p.
      	Move the conversion code to the transform block.
      
      From-SVN: r278295
      Richard Sandiford committed
    • [mid-end][__RTL] Account for column numbers in __RTL functions · 63841daf
      
      The documentation for __RTL tests (see "(gccint) RTL Tests" info node) has the
      following snippet.
      
      ```
       The parser expects the RTL body to be in the format emitted by this
      dumping function:
      
           DEBUG_FUNCTION void
           print_rtx_function (FILE *outfile, function *fn, bool compact);
      
       when "compact" is true.  So you can capture RTL in the correct format
      from the debugger using:
      
           (gdb) print_rtx_function (stderr, cfun, true);
      
       and copy and paste the output into the body of the C function.
      ```
      
      Since r264944 print_rtx_function prints column number information, which the
      __RTL function parsing does not handle.
      
      This patch handles column number information optionally, so pre-existing __RTL
      functions still work, and the above documentation quote still holds.
      
      Note: If people would prefer to require column information I could make a
      slightly neater code and update existing tests.
      I guess this would be OK since the intended use for __RTL functions is in these
      testcases so there is no worry about other existing code.
      
      bootstrapped and regtested on aarch64
      bootstrapped and regtested on x86_64
      
      Ok for trunk?
      
      Cheers,
      Matthew
      
      gcc/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* read-rtl-function.c
      	(function_reader::add_fixup_source_location): Take additional
      	parameter of a column.
      	(function_reader::maybe_read_location): Optionally parse column
      	information and pass to add_fixup_source_location.
      
      gcc/testsuite/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c: New test.
      
      From-SVN: r278294
      Matthew Malcomson committed
    • re PR tree-optimization/92512 (ICE in gimple_op, at gimple.h:2436) · b9f71c51
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/92512
      	* tree-vect-loop.c (check_reduction_path): Fix operand index
      	computability check.  Add check for second use in COND_EXPRs.
      
      	* gcc.dg/torture/pr92512.c: New testcase.
      
      From-SVN: r278293
      Richard Biener committed
    • [rs6000] Use VIEW_CONVERT_EXPR to reinterpret vectors (PR 92515) · b6d53324
      The new tree-cfg.c checking in r278245 tripped on folds of
      ALTIVEC_BUILTIN_VPERM_*, which were using gimple_convert
      rather than VIEW_CONVERT_EXPR to reinterpret the contents
      of a vector as a different type.
      
      2019-11-15  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR target/92515
      	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Use
      	VIEW_CONVERT_EXPR to reinterpret vectors as different types.
      
      From-SVN: r278292
      Richard Sandiford committed
    • [amdgcn] Fix handling of VCC_CONDITIONAL_REG · 9ecf84e6
      Classify vcc_lo and vcc_hi into the VCC_CONDITIONAL_REG class,
      and spill them into SGPRs if necessary.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (gcn_regno_reg_class): Return VCC_CONDITIONAL_REG
      	register class for VCC_LO and VCC_HI.
      	(gcn_spill_class): Use SGPR_REGS to spill registers in
      	VCC_CONDITIONAL_REG.
      
      From-SVN: r278290
      Kwok Cheung Yeung committed
    • re PR tree-optimization/92324 (ICE in expand_direct_optab_fn, at internal-fn.c:2890) · d03431d0
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/92324
      	* tree-vect-loop.c (vect_create_epilog_for_reduction): Fix
      	singedness of SLP reduction epilouge operations.  Also reduce
      	the vector width for SLP reductions before doing elementwise
      	operations if possible.
      
      	* gcc.dg/vect/pr92324-4.c: New testcase.
      
      From-SVN: r278289
      Richard Biener committed
    • re PR fortran/69654 (ICE in gfc_trans_structure_assign) · 8eea62d8
      2019-11-15  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69654
      	* trans-expr.c (gfc_trans_structure_assign): Move assignment to
      	'cm' after treatment of C pointer types and test that the type
      	has been completely built before it. Add an assert that the
      	backend_decl for each component exists.
      
      2019-11-15  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69654
      	* gfortran.dg/derived_init_6.f90: New test.
      
      From-SVN: r278287
      Paul Thomas committed
    • libstdc++: Fix changelog whitespace · 381835c8
      From-SVN: r278286
      Jonathan Wakely committed
    • [mid-end][__RTL] Set global epilogue_completed in skip_pass · 62396659
      Set global epilogue_completed when skipping pro_and_epilogue pass
      
      When compiling RTL functions marked to start at a pass after the reload
      pass, `skip_pass` is used to mark the reload pass as having completed
      since many patterns use the `reload_completed` variable to determine
      whether to run or not.
      
      Here we do the same for the `epilogue_completed` variable and the
      pro_and_epilogue pass.
      
      Also include a testcase that relies on the availability of a
      define_split in the aarch64 backend that is conditioned on this
      `epilogue_completed` variable.
      
      regtest done on native aarch64
      regtest done on native x64_86
      
      gcc/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* passes.c (skip_pass): Set epilogue_completed if skipping the
      	pro_and_epilogue pass.
      
      gcc/testsuite/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* gcc.dg/rtl/aarch64/test-epilogue-set.c: New test.
      
      From-SVN: r278285
      Matthew Malcomson committed
    • Add tests for print from offload target. · 8916ba87
      2019-11-15  Andrew Stubbs  <ams@codesourcery.com>
      
      	libgomp/
      	* testsuite/libgomp.c/target-print-1.c: New file.
      	* testsuite/libgomp.fortran/target-print-1.f90: New file.
      	* testsuite/libgomp.oacc-c/print-1.c: New file.
      	* testsuite/libgomp.oacc-fortran/print-1.f90: New file.
      
      From-SVN: r278284
      Andrew Stubbs committed
    • [mid-end][__RTL] Clean state despite invalid __RTL startwith passes · 3739bcc8
      
      Hi there,
      
      When compiling an __RTL function that has an invalid "startwith" pass we
      currently don't run the dfinish cleanup pass. This means we ICE on the next
      function.
      
      This change ensures that all state is cleaned up for the next function
      to run correctly.
      
      As an example, before this change the following code would ICE when compiling
      the function `foo2` because the "peephole2" pass is not run at optimisation
      level -O0.
      
      When compiled with
      ./aarch64-none-linux-gnu-gcc -O0 -S missed-pass-error.c -o test.s
      
      ```
      int __RTL (startwith ("peephole2")) badfoo ()
      {
      (function "badfoo"
        (insn-chain
          (block 2
            (edge-from entry (flags "FALLTHRU"))
            (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
            (cinsn 101 (set (reg:DI x19) (reg:DI x0)))
            (cinsn 10 (use (reg/i:SI x19)))
            (edge-to exit (flags "FALLTHRU"))
          ) ;; block 2
        ) ;; insn-chain
      ) ;; function "foo2"
      }
      
      int __RTL (startwith ("final")) foo2 ()
      {
      (function "foo2"
        (insn-chain
          (block 2
            (edge-from entry (flags "FALLTHRU"))
            (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
            (cinsn 101 (set (reg:DI x19) (reg:DI x0)))
            (cinsn 10 (use (reg/i:SI x19)))
            (edge-to exit (flags "FALLTHRU"))
          ) ;; block 2
        ) ;; insn-chain
      ) ;; function "foo2"
      }
      ```
      
      Now it silently ignores the __RTL function and successfully compiles foo2.
      
      regtest done on aarch64
      regtest done on x86_64
      
      OK for trunk?
      
      gcc/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* passes.c (should_skip_pass_p): Always run "dfinish".
      
      gcc/testsuite/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* gcc.dg/rtl/aarch64/missed-pass-error.c: New test.
      
      From-SVN: r278283
      Matthew Malcomson committed
    • ipa-inline.c (inline_small_functions): Move assignment to next before call destroying edge. · 2e98ac86
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	* ipa-inline.c (inline_small_functions): Move assignment
      	to next before call destroying edge.
      
      From-SVN: r278282
      Richard Biener committed
    • re PR tree-optimization/92039 (Spurious -Warray-bounds warnings building 32-bit glibc) · f0af4848
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/92039
      	PR tree-optimization/91975
      	* tree-ssa-loop-ivcanon.c (constant_after_peeling): Revert
      	previous change, treat invariants consistently as non-constant.
      	(tree_estimate_loop_size): Ternary ops with just the first op
      	constant are not optimized away.
      
      	* gcc.dg/tree-ssa/cunroll-2.c: Revert to state previous to
      	unroller adjustment.
      	* g++.dg/tree-ssa/ivopts-3.C: Likewise.
      
      From-SVN: r278281
      Richard Biener committed
    • gimplify.c (gimplify_call_expr): Don't call omp_resolve_declare_variant after gimplification. · 0227ffa9
      	* gimplify.c (gimplify_call_expr): Don't call
      	omp_resolve_declare_variant after gimplification.
      	* omp-general.c (omp_context_selector_matches): For isa that might
      	match in some other function, defer if in declare simd function.
      	(omp_context_compute_score): Don't look for " score" in construct
      	trait set.  Set *score to -1 if it can't ever match.
      	(omp_resolve_declare_variant): If any variants need to be deferred,
      	don't punt immediately, but compute scores of all variants and if
      	ther eis a score winner that doesn't need to be deferred, return that.
      
      	* c-c++-common/gomp/declare-variant-13.c: New test.
      
      From-SVN: r278280
      Jakub Jelinek committed
    • re PR testsuite/92520 (new test case gcc/testsuite/gcc.dg/ipa/inline-9.c in r278220 is unresolved) · 1c9676e2
      	PR testsuite/92520
      	* gcc.dg/ipa/inline-9.c: Fix template.
      
      From-SVN: r278279
      Jan Hubicka committed
    • Fix comments typo · 53dd3bcc
      gcc/ChangeLog:
      
      	2019-11-15  Luo Xiong Hu  <luoxhu@linux.ibm.com>
      
      	* ipa-comdats.c: Fix comments typo.
      	* ipa-profile.c: Fix comments typo.
      	* tree-profile.c (gimple_gen_ic_profiler): Use the new variable
      	__gcov_indirect_call.counters and __gcov_indirect_call.callee.
      	(gimple_gen_ic_func_profiler): Likewise.
      	(pass_ipa_tree_profile::gate): Fix comments typo.
      
      From-SVN: r278278
      Luo Xiong Hu committed
    • Update iterator of next · 2aae99f7
      next is initialized only in the loop before, it is never updated
      in it's own loop.
      
      gcc/ChangeLog:
      
      	2019-11-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>
      
      	* ipa-inline.c (inline_small_functions): Update iterator of next.
      
      From-SVN: r278277
      Xiong Hu Luo committed
    • compiler: fix buglet in function inlining related to sink names · f543bdd3
          
          When the compiler writes an inlinable function to the export data,
          parameter names are written out (in Export::write_name) using the
          Gogo::message_name as opposed to a raw/encoded name. This means that
          sink parameters (those named "_") get created with the name "_"
          instead of "._" (the name created by the lexer/parser). This confuses
          Gogo::is_sink_name, which looks for the latter sequence and not just
          "_". This can cause issues later on if an inlinable function is
          imported and fed through the rest of the compiler (things that are
          sinks are no recognized as such). To fix these issues, change
          Gogo::is_sink_name to return true for either variants ("_" or "._").
          
          Fixes golang/go#35586.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207259
      
      From-SVN: r278275
      Ian Lance Taylor committed
    • Support for jthread and stop_token · 942c4b32
              * include/Makefile.am: Add <stop_token> header.
              * include/Makefile.in: Regenerate.
              * include/std/condition_variable: Add overloads for stop_token support
              to condition_variable_any.
              * include/std/stop_token: New file.
              * include/std/thread: Add jthread type.
              * include/std/version (__cpp_lib_jthread): New value.
              * testsuite/30_threads/condition_variable_any/stop_token/1.cc: New test.
              * testsuite/30_threads/condition_variable_any/stop_token/2.cc: New test.
              * testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc: New test.
              * testsuite/30_threads/jthread/1.cc: New test.
              * testsuite/30_threads/jthread/2.cc: New test.
              * testsuite/30_threads/jthread/jthread.cc: New test.
              * testsuite/30_threads/stop_token/1.cc: New test.
              * testsuite/30_threads/stop_token/2.cc: New test.
              * testsuite/30_threads/stop_token/stop_token.cc: New test.
      
      From-SVN: r278274
      Thomas Rodgers committed
    • Improve checks on C2x fallthrough attribute. · f8aea5e3
      When adding C2x attribute support, some [[fallthrough]] support
      appeared as a side-effect because of code for that attribute going
      through separate paths from the normal attribute handling.
      
      However, going through those paths without the normal attribute
      handlers meant that certain checks, such as for the invalid usage
      [[fallthrough()]], did not operate.  This patch improves checks by
      adding this attribute to the standard attribute table, so that the
      parser knows it expects no arguments, along with adding an explicit
      check for "[[fallthrough]];" attribute-declarations at top level.  As
      with other attributes, there are still cases where warnings should be
      pedwarns because C2x constraints are violated, but this patch improves
      the attribute handling.
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-decl.c (std_attribute_table): Add fallthrough.
      	* c-parser.c (c_parser_declaration_or_fndef): Diagnose fallthrough
      	attribute at top level.
      
      gcc/c-family:
      	* c-attribs.c (handle_fallthrough_attribute): Remove static.
      	* c-common.h (handle_fallthrough_attribute): Declare.
      
      gcc/testsuite:
      	* gcc.dg/c2x-attr-fallthrough-2.c,
      	gcc.dg/c2x-attr-fallthrough-3.c: New tests.
      
      From-SVN: r278273
      Joseph Myers committed
    • Daily bump. · d3cb8f00
      From-SVN: r278272
      GCC Administrator committed
    • Implement the <array> part of C++20 p1032 Misc constexpr bits. · 1c09b664
      2019-11-14  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement the <array> part of C++20 p1032 Misc constexpr bits.
      	* include/std/array (fill, swap): Make constexpr.
      	* testsuite/23_containers/array/requirements/constexpr_fill.cc: New.
      	* testsuite/23_containers/array/requirements/constexpr_swap.cc: New.
      
      From-SVN: r278269
      Edward Smith-Rowland committed
    • Support C2x [[deprecated]] attribute. · 2cc94aa8
      This patch adds support for the C2x [[deprecated]] attribute.  All the
      actual logic for generating warnings can be identical to the GNU
      __attribute__ ((deprecated)), as can the attribute handler, so this is
      just a matter of wiring things up appropriately and adding the checks
      specified in the standard.  Unlike for C++, this patch gives
      "deprecated" an entry in a table of standard attributes rather than
      remapping it internally to the GNU attribute, as that seems a cleaner
      approach to me.
      
      Specifically, the only form of arguments to the attribute permitted in
      the standard is (string-literal); empty parentheses are not permitted
      in the case of no arguments, and a string literal (which includes
      concatenated adjacent string literals, because concatenation is an
      earlier phase of translation) cannot have further redundant
      parentheses around it.  For the case of empty parentheses, this patch
      makes the C parser disallow them for all known attributes using the
      [[]] syntax, as done for C++.  For string literals (where the C++
      front end is missing the check to avoid redundant parentheses, 92521
      filed for that issue), a special case is inserted in the C parser.
      
      A known issue that I think can be addressed later as a bug fix is that
      the warnings for the attribute being ignored in certain cases
      (attribute declarations, statements, most uses on types) ought to be
      pedwarns, as those usages are constraint violations.
      
      Bad handling of wide string literals with this attribute is also a
      pre-existing bug (91182 - although that's filed as a C++ bug, the code
      in question is language-independent, in tree.c).
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-decl.c (std_attribute_table): New.
      	(c_init_decl_processing): Register attributes from
      	std_attribute_table.
      	* c-parser.c (c_parser_attribute_arguments): Add arguments
      	require_string and allow_empty_args.  All callers changed.
      	(c_parser_std_attribute): Set require_string argument for
      	"deprecated" attribute.
      
      gcc/c-family:
      	* c-attribs.c (handle_deprecated_attribute): Remove static.
      	* c-common.h (handle_deprecated_attribute): Declare.
      
      gcc/testsuite:
      	* gcc.dg/c2x-attr-deprecated-1.c, gcc.dg/c2x-attr-deprecated-2.c,
      	gcc.dg/c2x-attr-deprecated-3.c: New tests.
      
      From-SVN: r278268
      Joseph Myers committed
  2. 14 Nov, 2019 8 commits
    • Check suitability of spill register for mode · 1a4ec325
      2019-11-14  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* lra-spills.c (assign_spill_hard_regs): Check that the spill
      	register is suitable for the mode.
      
      From-SVN: r278267
      Kwok Cheung Yeung committed
    • Change fold_range to return a boolean result. · f674b4a7
      2019-11-14  Andrew MacLeod  <amacleod@redhat.com>
      
      	* range-op.h (range_operator::fold_range): Return a bool.
      	* range-op.cc (range_operator::wi_fold): Assert supported type.
      	(range_operator::fold_range): Assert supported type and return true.
      	(operator_equal::fold_range): Return true.
      	(operator_not_equal::fold_range): Same.
      	(operator_lt::fold_range): Same.
      	(operator_le::fold_range): Same.
      	(operator_gt::fold_range): Same.
      	(operator_ge::fold_range): Same.
      	(operator_plus::op1_range): Adjust call to fold_range.
      	(operator_plus::op2_range): Same.
      	(operator_minus::op1_range): Same.
      	(operator_minus::op2_range): Same.
      	(operator_exact_divide::op1_range): Same.
      	(operator_lshift::fold_range): Return true and adjust fold_range call.
      	(operator_rshift::fold_range): Same.
      	(operator_cast::fold_range): Return true.
      	(operator_logical_and::fold_range): Same.
      	(operator_logical_or::fold_range): Same.
      	(operator_logical_not::fold_range): Same.
      	(operator_bitwise_not::fold_range): Adjust call to fold_range.
      	(operator_bitwise_not::op1_range): Same.
      	(operator_cst::fold_range): Return true.
      	(operator_identity::fold_range): Return true.
      	(operator_negate::fold_range): Return true and adjust fold_range call.
      	(operator_addr_expr::fold_range): Return true.
      	(operator_addr_expr::op1_range): Adjust call to fold_range.
      	(range_cast): Same.
      	* tree-vrp.c (range_fold_binary_symbolics_p): Adjust call to fold_range.
      	(range_fold_unary_symbolics_p): Same.
      
      From-SVN: r278266
      Andrew MacLeod committed
    • Support UTF-8 character constants for C2x. · 7c5890cc
      C2x adds u8'' character constants to C.  This patch adds the
      corresponding GCC support.
      
      Most of the support was already present for C++ and just needed
      enabling for C2x.  However, in C2x these constants have type unsigned
      char, which required corresponding adjustments in the compiler and the
      preprocessor to give them that type for C.
      
      For C, it seems clear to me that having type unsigned char means the
      constants are unsigned in the preprocessor (and thus treated as having
      type uintmax_t in #if conditionals), so this patch implements that.  I
      included a conditional in the libcpp change to avoid affecting
      signedness for C++, but I'm not sure if in fact these constants should
      also be unsigned in the preprocessor for C++ in which case that
      !CPP_OPTION (pfile, cplusplus) conditional would not be needed.
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-parser.c (c_parser_postfix_expression)
      	(c_parser_check_literal_zero): Handle CPP_UTF8CHAR.
      	* gimple-parser.c (c_parser_gimple_postfix_expression): Likewise.
      
      gcc/c-family:
      	* c-lex.c (lex_charconst): Make CPP_UTF8CHAR constants unsigned
      	char for C.
      
      gcc/testsuite:
      	* gcc.dg/c11-utf8char-1.c, gcc.dg/c2x-utf8char-1.c,
      	gcc.dg/c2x-utf8char-2.c, gcc.dg/c2x-utf8char-3.c,
      	gcc.dg/gnu2x-utf8char-1.c: New tests.
      
      libcpp:
      	* charset.c (narrow_str_to_charconst): Make CPP_UTF8CHAR constants
      	unsigned for C.
      	* init.c (lang_defaults): Set utf8_char_literals for GNUC2X and
      	STDC2X.
      
      From-SVN: r278265
      Joseph Myers committed
    • Tweak gcc.dg/vect/bb-slp-4[01].c (PR92366) · 37710332
      gcc.dg/vect/bb-slp-40.c was failing on some targets because the
      explicit dg-options overrode things like -maltivec.  This patch
      uses dg-additional-options instead.
      
      Also, it seems safer not to require exactly 1 instance of each message,
      since that depends on the target vector length.
      
      gcc.dg/vect/bb-slp-41.c contained invariant constructors that are
      vectorised on AArch64 (foo) and constructors that aren't (bar).
      This meant that the number of times we print "Found vectorizable
      constructor" depended on how many vector sizes we try, since we'd
      print it for each failed attempt.
      
      In foo, we create invariant { b[0], ... } and { b[1], ... },
      and the test is making sure that the two separate invariant vectors
      can be fed from the same vector load at b.  This is a different case
      from bb-slp-40.c, where the constructors are naturally separate.
      (The expected count is 4 rather than 2 because we can vectorise the
      epilogue too.)
      
      However, due to limitations in the loop vectoriser, we still do the
      addition of { b[0], ... } and { b[1], ... } in the loop.  Hopefully
      that'll be fixed at some point, so this patch adds an alternative test
      that directly needs 4 separate invariant constructors.  E.g. with Joel's
      SLP optimisation, the new test generates:
      
              ldr     q4, [x1]
              dup     v7.4s, v4.s[0]
              dup     v6.4s, v4.s[1]
              dup     v5.4s, v4.s[2]
              dup     v4.4s, v4.s[3]
      
      instead of the somewhat bizarre:
      
              ldp     s6, s5, [x1, 4]
              ldr     s4, [x1, 12]
              ld1r    {v7.4s}, [x1]
              dup     v6.4s, v6.s[0]
              dup     v5.4s, v5.s[0]
              dup     v4.4s, v4.s[0]
      
      The patch then disables vectorisation of the original foo in
      bb-vect-slp-41.c, so that we get the same correctness testing
      for bar but don't need to test for specific counts.
      
      2019-11-14  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/testsuite/
      	PR testsuite/92366
      	* gcc.dg/vect/bb-slp-40.c: Use dg-additional-options instead
      	of dg-options.  Remove expected counts.
      	* gcc.dg/vect/bb-slp-41.c: Remove dg-options and explicit
      	dg-do run.  Suppress vectorization of foo.
      	* gcc.dg/vect/bb-slp-42.c: New test.
      
      From-SVN: r278262
      Richard Sandiford committed
    • re PR tree-optimization/92506 (Wrong code with -fwrapv since r277979) · bbc85eb9
      2019-11-14  Andrew MacLeod  <amacleod@redhat.com>
      
      	PR tree-optimization/92506
      	* range-op.cc (range_operator::fold_range): Start with range undefined.
      	(operator_abs::wi_fold): Fix wrong line copy... With wrapv, abs with
      	overflow is varying.
      
      From-SVN: r278259
      Andrew MacLeod committed
    • Remove range_intersect, range_invert, and range_union. · fae08a05
      From-SVN: r278258
      Aldy Hernandez committed
    • libstdc++: Implement new predicate concepts from P1716R3 · 270082a7
      	* include/bits/iterator_concepts.h (__iter_concept_impl): Add
      	comments.
      	(indirect_relation): Rename to indirect_binary_predicate and adjust
      	definition as per P1716R3.
      	(indirect_equivalence_relation): Define.
      	(indirectly_comparable): Adjust definition.
      	* include/std/concepts (equivalence_relation): Define.
      	* testsuite/std/concepts/concepts.callable/relation.cc: Add tests for
      	equivalence_relation.
      
      From-SVN: r278256
      Jonathan Wakely committed
    • libstdc++: Rename disable_sized_sentinel [P1871R1] · d99828ee
      	* include/bits/iterator_concepts.h (disable_sized_sentinel): Rename to
      	disable_sized_sentinel_for.
      	* testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Adjust.
      
      From-SVN: r278255
      Jonathan Wakely committed