1. 12 Jun, 2019 1 commit
  2. 11 Jun, 2019 19 commits
  3. 10 Jun, 2019 20 commits
    • compiler: support inlining functions that use index expressions · e898243c
          
          Also move the determine_types pass on an inlined function body to one
          place, rather than doing it ad hoc as needed.
          
          This adds 79 new inlinable functions in the standard library, such as
          bytes.HasPrefix and bytes.LastIndexByte.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181261
      
      From-SVN: r272133
      Ian Lance Taylor committed
    • compiler: make heap expression's write barrier conditional · 35c19de6
          
          Heap_expression::do_get_backend emits an unconditional write
          barrier if the type has pointers and it is not a stack allocation.
          This CL changes it to use a write barrier for the assignment only
          when write barriers are enabled. While here, also change it to
          call gcWriteBarrier instead of typedmemmove for pointer-shaped
          types.
          
          For this to work, Function::build needs to be adjusted so that
          Heap_expression::do_get_backend is called when there is a parent
          block.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181540
      
      From-SVN: r272132
      Ian Lance Taylor committed
    • compiler: permit inlining functions with labels and goto statements · fc917b42
          
          This permits inlining functions with for loops and some switches, as
          they are lowered to if and goto statements before exporting them.
          
          This by itself only adds three new inlinable functions in the standard
          library: sort.Search, context.(*emptyCtx).String, and
          cmd/go/internal/work.(*Builder).disableBuildID.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181197
      
      From-SVN: r272131
      Ian Lance Taylor committed
    • compiler: use gcWriteBarrier for pointer-shaped struct/array · d480455f
          
          If a struct/array is pointer-shaped (i.e. having a single field
          that is pointer-shaped), we can use gcWriteBarrier instead of
          typedmemmove for the write barrier.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181539
      
      From-SVN: r272130
      Ian Lance Taylor committed
    • re PR c++/87250 (Internal compiler error with -Os -fsyntax-only) · fa237d91
      	PR c++/87250
      	* g++.dg/cpp0x/pr87250.C: New test.
      
      From-SVN: r272129
      Matthew Beliveau committed
    • constexpr.c (free_constructor): New. · 620adbec
      	* constexpr.c (free_constructor): New.
      
      	(cxx_eval_call_expression): Free parameter value CONSTRUCTORs.
      
      From-SVN: r272127
      Jason Merrill committed
    • Reduce unsharing in constexpr call evaluation. · 9b9eb42a
      	* constexpr.c (unshare_constructor): Only unshare if T is itself a
      	CONSTRUCTOR.
      	(cxx_eval_call_expression): Don't call it on the result here.
      
      From-SVN: r272126
      Jason Merrill committed
    • Reduce constexpr_call memory consumption. · 3c961dc7
      	* constexpr.c (cxx_bind_parameters_in_call): Use TREE_VEC rather
      	than TREE_LIST.
      	(constexpr_call_hasher::equal, cxx_bind_parameters_in_call)
      	(cxx_eval_call_expression): Adjust.
      
      From-SVN: r272125
      Jason Merrill committed
    • compiler: make escape analysis work with imported inlineable functions · c2f879e1
          
          The escape analysis was written before we import inlineable
          function bodies, and in some places it skipped functions that are
          not in the local package. Now that there are imported function
          bodies, make the escape analysis work with them.
          
          Note that it is necessary for the escape analysis to run on
          imported function bodies, even if they are already tagged. The
          tags only have the information of the parameters (receiver,
          results), but not the internal nodes, e.g. local variables. We
          still need to do the analysis to get all the information. (In the
          future maybe we could export/import escape info for internal
          nodes also, then we don't need to redo the analysis.)
          
          Also add assertions to ensure that if we analyze the same
          function in multiple places, they'd better agree with each other.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181537
      
      From-SVN: r272124
      Ian Lance Taylor committed
    • i386-protos.h (ix86_split_fp_absneg_operator): New prototype. · f359611b
      	* config/i386/i386-protos.h (ix86_split_fp_absneg_operator):
      	New prototype.
      	* config/i386/i386-expand.c (ix86_expand_fp_absneg_operator):
      	Emit clobber also for non-sse operations.
      	(ix86_split_fp_absneg_operator): New function.
      	* config/i386/i386.md (SSEMODEF): New mode iterator.
      	(ssevecmodef): New mode attribute.
      	(<code>tf2): Use absneg code iterator.
      	(*<code>tf2_1): Rename from *absnegtf3_sse. Use absneg code iterator.
      	Add three-operand AVX alternatives.
      	(*<code><mode>2_i387_1): Rename from *absnegxf2_i387.
      	Use absneg code iterator and X87MODEF mode iterator.
      	(absneg fp_reg non-sse splitter): Call absneg code iterator
      	and X87MODEF mode iterator.
      	(absneg general_reg non-sse splitter): Use absneg code iterator
      	and X87MODEF mode iterator.  Use ix86_split_fp_absneg_operator.
      	(*<code><mode>2_1): Rename from *absneg<mode>2.  Use absneg
      	code iterator.  Add three-operand AVX alternative.
      	(absneg sse_reg splitter): Use absneg code iterator
      	and SSEMODEF mode iterator.  Handle AVX operands.
      	(absneg fp_reg splitter): Use absneg code iterator
      	and MODEF mode iterator.
      	(absneg general_reg splitter): Merge splitters using MODEF mode
      	iterator.  Use absneg code iterator.  Call
      	ix86_split_fp_absneg_operator.
      	(*<code><mode>2_i387): Rename from *<code><mode>2_1.
      	Do not enable for non-sse modes before reload.
      	(CSGNMODE): Remove.
      	(CSGNVMODE): Ditto.
      	(copysing<mode>3): Use SSEMODEF instead of CSGNMODE and
      	ssevecmodef mode attribute instaed of CSGNVMODE.
      	(copysign<mode>3_const): Ditto.
      	(copysign<mode>3_var): Ditto.
      	* config/i386/i386.md (*<code><mode>2): Rename from *absneg<mode>2.
      	Use absneg code iterator.  Simplify code using std::swap.
      	* config/i386/predicates.md (absneg_operator): Remove.
      
      From-SVN: r272123
      Uros Bizjak committed
    • re PR testsuite/90772 (g++.dg/cpp1y/feat-cxx14.C and several others fails starting with r272011) · f2ee751d
      	PR testsuite/90772
      	* g++.dg/cpp1y/feat-cxx14.C: Use std::size_t instead of size_t.
      	* g++.dg/cpp1z/feat-cxx1z.C: Likewise.
      	* g++.dg/cpp2a/feat-cxx2a.C: Likewise.
      	* g++.dg/cpp1z/pr85569.C: Include <functional>.
      	* g++.dg/tree-ssa/pr80293.C: Include <cstdint>.
      	* g++.dg/tree-ssa/pr69336.C: Include <stdexcept>.
      
      From-SVN: r272122
      Jakub Jelinek committed
    • PR other/90695 reduce testcase to remove library dependency · 39d1184b
      This reproduces the original ICE fixed by r178857 (tested at r178852 and
      r178860), without depending on a libstdc++ header that keeps changing.
      
      The number of errors differs between C++14 and C++17 modes, so the fixed
      test uses dg-excess-errors to match any number of them. The precise
      errors aren't what's being tested for here anyway, the point of the test
      is to verify the ICE in PR 50391 is fixed.
      
      	PR other/90695
      	* g++.dg/cpp0x/noexcept15.C: Remove dependency on library header.
      
      From-SVN: r272121
      Jonathan Wakely committed
    • gimple-fold.c (get_range_strlen): Update comment that didn't make it into… · 97623b52
      gimple-fold.c (get_range_strlen): Update comment that didn't make it into r267503 or related commits.
      
      
      gcc/ChangeLog:
      
      	* gimple-fold.c (get_range_strlen): Update comment that didn't
      	make it into r267503 or related commits.
      
      From-SVN: r272120
      Martin Sebor committed
    • gcov-tool: Mark {merge,rewrite}_usage with noreturn attribute · c31783fd
      2019-06-10  Vladislav Ivanishin  <vlad@ispras.ru>
      
      	* gcov-tool.c (merge_usage, rewrite_usage): Mark with
      	ATTRIBUTE_NORETURN thus making consistent with overlap_usage.
      
      From-SVN: r272119
      Vladislav Ivanishin committed
    • tree.def (OMP_SCAN): New tree code. · bf38f7e9
      	* tree.def (OMP_SCAN): New tree code.
      	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_INCLUSIVE and
      	OMP_CLAUSE_EXCLUSIVE.
      	* tree.h (OMP_CLAUSES): Use OMP_SCAN instead of OMP_TASKGROUP.
      	(OMP_SCAN_BODY, OMP_SCAN_CLAUSES): Define.
      	* tree.c (omp_clause_num_ops, omp_clause_code_name): Add entries for
      	OMP_CLAUSE_{IN,EX}CLUSIVE.
      	(walk_tree_1): Handle OMP_CLAUSE_{IN,EX}CLUSIVE.
      	* tree-nested.c (convert_nonlocal_reference_stmt,
      	convert_local_reference_stmt, convert_gimple_call): Handle
      	GIMPLE_OMP_SCAN.
      	* tree-pretty-print.c (dump_omp_clause): Handle
      	OMP_CLAUSE_{IN,EX}CLUSIVE.
      	(dump_generic_node): Handle OMP_SCAN.
      	* gimple.def (GIMPLE_OMP_SCAN): New gimple code.
      	* gimple.h (gomp_scan): New type.
      	(is_a_helper <gomp_scan *>::test,
      	is_a_helper <const gomp_scan *>::test): New templates.
      	(gimple_build_omp_scan): Declare.
      	(gimple_omp_scan_clauses, gimple_omp_scan_clauses_ptr,
      	gimple_omp_scan_set_clauses): New inline functions.
      	(CASE_GIMPLE_OMP): Add case GIMPLE_OMP_SCAN:.
      	* gimple.c (gimple_build_omp_scan): New function.
      	(gimple_copy): Handle GIMPLE_OMP_SCAN.
      	* gimple-walk.c (walk_gimple_op, walk_gimple_stmt): Likewise.
      	* gimple-pretty-print.c (dump_gimple_omp_block): Don't handle
      	GIMPLE_OMP_TASKGROUP.
      	(dump_gimple_omp_scan): New function.
      	(pp_gimple_stmt_1): Handle GIMPLE_OMP_SCAN.
      	* gimple-low.c (lower_stmt): Handle GIMPLE_OMP_SCAN.
      	* tree-inline.c (remap_gimple_stmt, estimate_num_insns): Likewise.
      	* gimplify.c (enum gimplify_omp_var_data): Add GOVD_REDUCTION_INSCAN.
      	(is_gimple_stmt): Handle OMP_SCAN.
      	(gimplify_scan_omp_clauses): Reject inscan reductions on constructs
      	other than OMP_FOR or OMP_SIMD.  Handle OMP_CLAUSE_{IN,EX}CLUSIVE.
      	(gimplify_adjust_omp_clauses): Diagnose inscan reductions not
      	mentioned in nested #pragma omp scan.  Handle
      	OMP_CLAUSE_{IN,EX}CLUSIVE.
      	(gimplify_expr): Handle OMP_SCAN.
      	* omp-low.c (check_omp_nesting_restrictions): For parent context,
      	look through GIMPLE_OMP_SCAN context.  Allow #pragma omp scan in
      	simd constructs.
      	(scan_omp_1_stmt, lower_omp_1, diagnose_sb_1, diagnose_sb_2): Handle
      	GIMPLE_OMP_SCAN.
      c-family/
      	* c-pragma.h (enum pragma_kind): Add PRAGMA_OMP_SCAN.
      	* c-pragma.c (omp_pragmas_simd): Add #pragma omp scan.
      	* c-omp.c (c_omp_split_clauses): Diagnose inscan reductions on
      	combined/composite constructs where it is not allowed.  Copy over
      	OMP_CLAUSE_REDUCTION_INSCAN.
      c/
      	* c-parser.c (c_parser_pragma): Reject PRAGMA_OMP_SCAN.
      	(c_parser_omp_clause_reduction): Don't sorry_at on inscan reductions.
      	(c_parser_omp_scan_loop_body): New function.
      	(c_parser_omp_for_loop): Call c_parser_omp_scan_loop_body if there are
      	inscan reduction clauses.
      	* c-typeck.c (c_finish_omp_clauses): Reject mixing inscan with
      	non-inscan reductions on the same construct, or inscan reductions with
      	ordered or schedule clauses, or inscan array reductions.
      cp/
      	* parser.c (cp_parser_omp_clause_reduction): Don't sorry_at on inscan
      	reductions.
      	(cp_parser_omp_scan_loop_body): New function.
      	(cp_parser_omp_for_loop): Call cp_parser_omp_scan_loop_body if there
      	are inscan reduction clauses.
      	(cp_parser_pragma): Reject PRAGMA_OMP_SCAN.
      	* semantics.c (finish_omp_clauses): Reject mixing inscan with
      	non-inscan reductions on the same construct, or inscan reductions with
      	ordered or schedule clauses, or inscan array reductions.
      	* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_{IN,EX}CLUSIVE.
      	(tsubst_expr): Handle OMP_SCAN.
      testsuite/
      	* c-c++-common/gomp/scan-1.c: New test.
      	* c-c++-common/gomp/scan-2.c: New test.
      	* c-c++-common/gomp/scan-3.c: New test.
      	* c-c++-common/gomp/scan-4.c: New test.
      
      From-SVN: r272117
      Jakub Jelinek committed
    • Update __gcov_* scanned function name in a test-case. · 07ca30a0
      2019-06-10  Martin Liska  <mliska@suse.cz>
      
      	* gcc.dg/no_profile_instrument_function-attr-1.c: Fix
      	function name.
      
      From-SVN: r272116
      Martin Liska committed
    • Reduce SCCs in IPA postorder. · 97e59627
      2019-06-10  Martin Liska  <mliska@suse.cz>
      
      	* ipa-cp.c (ignore_edge_p): New function.
      	(build_toporder_info): Use it.
      	* ipa-inline.c (ignore_edge_p): New function/
      	(inline_small_functions): Use it.
      	* ipa-pure-const.c (ignore_edge_for_nothrow):
      	Verify opt_for_fn for caller and callee.
      	(ignore_edge_for_pure_const): Likewise.
      	* ipa-reference.c (ignore_edge_p): Extend to check
      	for opt_for_fn.
      	* ipa-utils.c (searchc): Refactor.
      	* ipa-utils.h: Fix coding style.
      
      From-SVN: r272115
      Martin Liska committed
    • Add missing ATTR_UNUSED (PR bootstrap/90808). · 54e2d83c
      2019-06-10  Martin Liska  <mliska@suse.cz>
      
      	PR bootstrap/90808
      	* libgcov.h: Add ATTRIBUTE_UNUSED.
      
      From-SVN: r272114
      Martin Liska committed
    • [ARC] Update RTX costs. · d797b115
      Update RTX costs to reflect better the ARC architecture.
      
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc.c (arc_rtx_costs): Update costs.
      
      /gcc/testsuite
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* gcc.target/arc/jumptables.c: Update test.
      
      From-SVN: r272113
      Claudiu Zissulescu committed