1. 07 Dec, 2017 22 commits
    • Allow _Alignas in compound literals (C11 DR#444). · 4b2b493f
      C11 DR#444 dealt with how C11 intended to allow alignment specifiers
      on struct and union members, but failed to include that in the syntax.
      The final resolution of that DR also allows alignment specifiers in
      type names in compound literals (in order to apply an increased
      alignment to the unnamed object created by the compound literal), but
      not other cases of type names.
      
      This patch implements allowing alignment specifiers in compound
      literals and adds tests for the resolution of the DR (including that
      they are allowed on struct and union members, which GCC already
      implemented).  Because the parser has to parse the parenthesized type
      name of a compound literal before it can tell that it's a compound
      literal (rather than, depending on the context, a cast expression or
      sizeof (type-name) or _Alignof (type-name)), this means _Alignas
      specifiers are allowed syntactically in those contexts and then an
      error is given once it's known to be an invalid use (whereas _Alignas
      specifiers are disallowed syntactically in other contexts where type
      names can occur and a compound literal is not possible).
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-decl.c (build_compound_literal): Add parameter alignas_align
      	and set alignment of decl if nonzero.
      	* c-parser.c (c_keyword_starts_typename): Allow RID_ALIGNAS.
      	(c_parser_declspecs): Allow RID_ALIGNAS to follow a type, like a
      	qualifier.
      	(c_parser_struct_declaration): Update syntax comment.
      	(c_parser_type_name): Add alignas_ok argument and pass it to
      	c_parser_declspecs.
      	(c_parser_cast_expression): Pass true to c_parser_type_name and
      	give error if a cast used an _Alignas specifier.
      	(c_parser_sizeof_expression): Pass true to c_parser_type_name and
      	give error if sizeof (type-name) used an _Alignas specifier.
      	(c_parser_alignof_expression): Pass true to c_parser_type_name and
      	give error if _Alignof (type-name) used an _Alignas specifier.
      	(c_parser_postfix_expression_after_paren_type): Check specified
      	alignment for a compound literal and pass it to
      	build_compound_literal.
      	* c-parser.h (c_parser_type_name): Update prototype.
      	* c-tree.h (build_compound_literal): Update prototype.
      
      gcc/testsuite:
      	* gcc.dg/c11-align-7.c, gcc.dg/c11-align-8.c,
      	gcc.dg/c11-align-9.c, gcc.dg/gnu11-align-1.c: New tests.
      	* gcc.dg/c11-align-5.c (test): Update expected error for sizeof
      	case.
      
      From-SVN: r255482
      Joseph Myers committed
    • [AArch64] Fix ICEs in aarch64_print_operand · c348cab0
      Three related regression fixes:
      
      - We can't use asserts like:
      
          gcc_assert (GET_MODE_SIZE (mode) == 16);
      
        in aarch64_print_operand because it could trigger for invalid user input.
      
      - The output_operand_lossage in aarch64_print_address_internal:
      
          output_operand_lossage ("invalid operand for '%%%c'", op);
      
        wasn't right because "op" is an rtx_code enum rather than the
        prefix character.
      
      - aarch64_print_operand_address shouldn't call output_operand_lossage
        (because it doesn't have a prefix code) but instead fall back to
        output_addr_const.
      
      2017-12-05  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_print_address_internal): Return
      	a bool success value.  Don't call output_operand_lossage here.
      	(aarch64_print_ldpstp_address): Return a bool success value.
      	(aarch64_print_operand_address): Call output_addr_const if
      	aarch64_print_address_internal fails.
      	(aarch64_print_operand): Don't assert that the mode is 16 bytes for
      	'y'; call output_operand_lossage instead.  Call output_operand_lossage
      	if aarch64_print_ldpstp_address fails.
      
      gcc/testsuite/
      	* gcc.target/aarch64/asm-2.c: New test.
      	* gcc.target/aarch64/asm-3.c: Likewise.
      
      From-SVN: r255481
      Richard Sandiford committed
    • Make more use of VECTOR_CST_ENCODED_ELT · 63570af0
      This patch makes various bits of code operate directly on the new
      VECTOR_CST encoding, instead of using VECTOR_CST_ELT on all elements
      of the vector.
      
      Previous patches handled operations that produce a new VECTOR_CST,
      while this patch handles things like predicates.  It also makes
      print_node dump the encoding instead of the full vector that
      the encoding represents.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-vector-builder.h
      	(tree_vector_builder::binary_encoded_nelts): Declare.
      	* tree-vector-builder.c
      	(tree_vector_builder::binary_encoded_nelts): New function.
      	* fold-const.c (negate_expr_p): Likewise.
      	(operand_equal_p, fold_checksum_tree): Likewise.
      	* tree-loop-distribution.c (const_with_all_bytes_same): Likewise.
      	* tree.c (integer_zerop, integer_onep, integer_all_onesp, real_zerop)
      	(real_onep, real_minus_onep, add_expr, initializer_zerop): Likewise.
      	(uniform_vector_p): Likewise.
      	* varasm.c (const_hash_1, compare_constant): Likewise.
      	* tree-ssa-ccp.c: Include tree-vector-builder.h.
      	(valid_lattice_transition): Operate directly on the VECTOR_CST
      	encoding.
      	* ipa-icf.c: Include tree-vector-builder.h.
      	(sem_variable::equals): Operate directly on the VECTOR_CST encoding.
      	* print-tree.c (print_node): Print encoding of VECTOR_CSTs.
      
      From-SVN: r255480
      Richard Sandiford committed
    • Make build_vector static · 44e1aae4
      The only remaining uses of build_vector are in the selftests in tree.c.
      This patch makes it static and moves it to the selftest part of the file.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree.c (build_vector): Delete.
      	* tree.h (build_vector): Make static and move into the self-testing
      	block.
      
      From-SVN: r255479
      Richard Sandiford committed
    • Make gimple_build_vector take a tree_vector_builder · abe73c3d
      This patch changes gimple_build_vector so that it takes a
      tree_vector_builder instead of a size and a vector of trees.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* vector-builder.h (vector_builder::derived): New const overload.
      	(vector_builder::elt): New function.
      	* tree-vector-builder.h (tree_vector_builder::type): New function.
      	(tree_vector_builder::apply_step): Declare.
      	* tree-vector-builder.c (tree_vector_builder::apply_step): New
      	function.
      	* gimple-fold.h (tree_vector_builder): Declare.
      	(gimple_build_vector): Take a tree_vector_builder instead of a
      	type and vector of elements.
      	* gimple-fold.c (gimple_build_vector): Likewise.
      	* tree-vect-loop.c (get_initial_def_for_reduction): Update call
      	accordingly.
      	(get_initial_defs_for_reduction): Likewise.
      	(vectorizable_induction): Likewise.
      
      From-SVN: r255478
      Richard Sandiford committed
    • Use tree_vector_builder::new_binary_operation for folding · b3def403
      This patch makes fold-const.c operate directly on the VECTOR_CST
      encoding when folding an operation that has two VECTOR_CST inputs.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-vector-builder.h
      	(tree_vector_builder::new_binary_operation): Declare.
      	* tree-vector-builder.c
      	(tree_vector_builder::new_binary_operation): New function.
      	* fold-const.c (fold_relational_const): Use it.
      	(const_binop): Likewise.  Check that both input vectors have
      	the same number of elements, thus excluding things like WIDEN_SUM.
      	Check whether it is possible to operate directly on the encodings
      	of stepped inputs.
      
      From-SVN: r255477
      Richard Sandiford committed
    • Use tree_vector_builder::new_unary_operation for folding · 059c18ab
      This patch makes fold-const.c operate directly on the VECTOR_CST
      encoding when folding an operation that has a single VECTOR_CST input.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* fold-const.c (fold_negate_expr_1): Use tree_vector_builder and
      	new_unary_operation, operating only on the encoded elements.
      	(const_unop): Likewise.
      	(exact_inverse): Likewise.
      	(distributes_over_addition_p): New function.
      	(const_binop): Use tree_vector_builder and new_unary_operation
      	for combinations of VECTOR_CST and INTEGER_CST.  Operate only
      	on the encoded elements unless the encoding is strided and the
      	operation does not distribute over addition.
      	(fold_convert_const):  Use tree_vector_builder and
      	new_unary_operation.  Operate only on the encoded elements
      	for truncating integer conversions, or for non-stepped encodings.
      
      From-SVN: r255476
      Richard Sandiford committed
    • Use tree_vector_builder instead of build_vector · 5ebaa477
      This patch switches most build_vector calls over to tree_vector_builder,
      using explicit encodings where appropriate.  Later patches handle
      the remaining uses of build_vector.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* config/sparc/sparc.c: Include tree-vector-builder.h.
      	(sparc_fold_builtin): Use tree_vector_builder instead of build_vector.
      	* expmed.c: Include tree-vector-builder.h.
      	(make_tree): Use tree_vector_builder instead of build_vector.
      	* fold-const.c: Include tree-vector-builder.h.
      	(const_binop): Use tree_vector_builder instead of build_vector.
      	(const_unop): Likewise.
      	(native_interpret_vector): Likewise.
      	(fold_vec_perm): Likewise.
      	(fold_ternary_loc): Likewise.
      	* gimple-fold.c: Include tree-vector-builder.h.
      	(gimple_fold_stmt_to_constant_1): Use tree_vector_builder instead
      	of build_vector.
      	* tree-ssa-forwprop.c: Include tree-vector-builder.h.
      	(simplify_vector_constructor): Use tree_vector_builder instead
      	of build_vector.
      	* tree-vect-generic.c: Include tree-vector-builder.h.
      	(add_rshift): Use tree_vector_builder instead of build_vector.
      	(expand_vector_divmod): Likewise.
      	(optimize_vector_constructor): Likewise.
      	* tree-vect-loop.c: Include tree-vector-builder.h.
      	(vect_create_epilog_for_reduction): Use tree_vector_builder instead
      	of build_vector.  Explicitly use a stepped encoding for
      	{ 1, 2, 3, ... }.
      	* tree-vect-slp.c: Include tree-vector-builder.h.
      	(vect_get_constant_vectors): Use tree_vector_builder instead
      	of build_vector.
      	(vect_transform_slp_perm_load): Likewise.
      	(vect_schedule_slp_instance): Likewise.
      	* tree-vect-stmts.c: Include tree-vector-builder.h.
      	(vectorizable_bswap): Use tree_vector_builder instead of build_vector.
      	(vect_gen_perm_mask_any): Likewise.
      	(vectorizable_call): Likewise.  Explicitly use a stepped encoding.
      	* tree.c: (build_vector_from_ctor): Use tree_vector_builder instead
      	of build_vector.
      	(build_vector_from_val): Likewise.  Explicitly use a duplicate
      	encoding.
      
      From-SVN: r255475
      Richard Sandiford committed
    • New VECTOR_CST layout · 734914b6
      This patch uses a simple compression scheme to represent the contents
      of a VECTOR_CST using its leading elements.  There are three formats:
      
      1) a repeating sequence of N values.  This is encoded using the first
         N elements.
      
      2) a "foreground" sequence of N values inserted at the beginning of
         a "background" repeating sequence of N values, such as:
         { 1, 2, 0, 0, 0, 0, ... }.  This is encoded using the first 2*N
         elements.
      
      2) a "foreground" sequence of N values inserted at the beginning of
         a "background" repeating sequence of N interleaved linear series,
         such as: { 0, 0, 8, 10, 9, 11, 10, 12, ... }.  This is encoded
         using the first 3*N elements.  In practice the foreground values
         are often part of the same series as the background values,
         such as: { 1, 11, 2, 12, 3, 13, ... }.
      
      This reduces the amount of work involved in processing simple
      vector constants and means that the encoding extends naturally
      to variable-length vectors.
      
      2017-12-07  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* doc/generic.texi (VECTOR_CST): Describe new representation of
      	vector constants.
      	* vector-builder.h: New file.
      	* tree-vector-builder.h: Likewise.
      	* tree-vector-builder.c: Likewise.
      	* Makefile.in (OBJS): Add tree-vector-builder.o.
      	* tree.def (VECTOR_CST): Update comment to refer to generic.texi.
      	* tree-core.h (tree_base): Add a vector_cst field to the u union.
      	(tree_vector): Change the number of elements to
      	vector_cst_encoded_nelts.
      	* tree.h (VECTOR_CST_NELTS): Redefine using TYPE_VECTOR_SUBPARTS.
      	(VECTOR_CST_ELTS): Delete.
      	(VECTOR_CST_ELT): Redefine using vector_cst_elt.
      	(VECTOR_CST_LOG2_NPATTERNS, VECTOR_CST_NPATTERNS): New macros.
      	(VECTOR_CST_NELTS_PER_PATTERN, VECTOR_CST_DUPLICATE_P): Likewise.
      	(VECTOR_CST_STEPPED_P, VECTOR_CST_ENCODED_ELTS): Likewise.
      	(VECTOR_CST_ENCODED_ELT): Likewise.
      	(vector_cst_encoded_nelts): New function.
      	(make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and
      	VECTOR_CST_NELTS_PER_PATTERN as arguments.
      	(vector_cst_int_elt, vector_cst_elt): Declare.
      	* tree.c: Include tree-vector-builder.h.
      	(tree_code_size): Abort if passed VECTOR_CST.
      	(tree_size): Update for new VECTOR_CST layout.
      	(make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and
      	VECTOR_CST_NELTS_PER_PATTERN as arguments.
      	(build_vector): Use tree_vector_builder.
      	(vector_cst_int_elt, vector_cst_elt): New functions.
      	(drop_tree_overflow): For VECTOR_CST, drop the TREE_OVERFLOW from the
      	encoded elements and then create the vector in the canonical form.
      	(check_vector_cst, check_vector_cst_duplicate, check_vector_cst_fill)
      	(check_vector_cst_stepped, test_vector_cst_patterns): New functions.
      	(tree_c_tests): Call test_vector_cst_patterns.
      	* lto-streamer-out.c (DFS::DFS_write_tree_body): Handle the new
      	VECTOR_CST fields.
      	(hash_tree): Likewise.
      	* tree-streamer-out.c (write_ts_vector_tree_pointers): Likewise.
      	(streamer_write_tree_header): Likewise.
      	* tree-streamer-in.c (lto_input_ts_vector_tree_pointers): Likewise.
      	(streamer_alloc_tree): Likewise.  Update call to make_vector.
      	* fold-const.c (fold_ternary_loc): Avoid using VECTOR_CST_ELTS.
      
      gcc/lto/
      	* lto.c (compare_tree_sccs_1): Compare the new VECTOR_CST flags.
      
      From-SVN: r255474
      Richard Sandiford committed
    • Add underscores to local vars in selftest macros · a0e7e36e
      Allows functions doing selftests to take parameters with names like
      "actual".
      
      2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* selftest.h (ASSERT_TRUE_AT, ASSERT_FALSE_AT, ASSERT_EQ_AT)
      	(ASSERT_NE, ASSERT_PRED1): Add underscores to local variable names
      	* selftest-rtl.h (ASSERT_RTX_EQ, ASSERT_RTX_PTR_EQ): Likewise.
      
      From-SVN: r255473
      Richard Sandiford committed
    • re PR tree-optimization/81303 (410.bwaves regression caused by r249919) · fbdec14e
      	PR tree-optimization/81303
      	* Makefile.in (gimple-loop-interchange.o): New object file.
      	* common.opt (floop-interchange): Reuse the option from graphite.
      	* doc/invoke.texi (-floop-interchange): Ditto.  New document for
      	-floop-interchange and mention it for -O3.
      	* opts.c (default_options_table): Enable -floop-interchange at -O3.
      	* gimple-loop-interchange.cc: New file.
      	* params.def (PARAM_LOOP_INTERCHANGE_MAX_NUM_STMTS): New parameter.
      	(PARAM_LOOP_INTERCHANGE_STRIDE_RATIO): New parameter.
      	* passes.def (pass_linterchange): New pass.
      	* timevar.def (TV_LINTERCHANGE): New time var.
      	* tree-pass.h (make_pass_linterchange): New declaration.
      	* tree-ssa-loop-ivcanon.c (create_canonical_iv): Change to external
      	interchange.  Record IV before/after increment in new parameters.
      	* tree-ssa-loop-ivopts.h (create_canonical_iv): New declaration.
      	* tree-vect-loop.c (vect_is_simple_reduction): Factor out reduction
      	path check into...
      	(check_reduction_path): ...New function here.
      	* tree-vectorizer.h (check_reduction_path): New declaration.
      
      	gcc/testsuite
      	* gcc.dg/tree-ssa/loop-interchange-1.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-1b.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-2.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-3.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-4.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-5.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-6.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-7.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-8.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-9.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-10.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-11.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-12.c: New test.
      	* gcc.dg/tree-ssa/loop-interchange-13.c: New test.
      
      Co-Authored-By: Richard Biener <rguenther@suse.de>
      
      From-SVN: r255472
      Bin Cheng committed
    • re PR target/83252 (Wrong code with "-march=skylake-avx512 -O3") · 75214935
      2017-12-07  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/83252
      	PR rtl-optimization/80818
      	* lra.c (add_regs_to_insn_regno_info): Make a hard reg in CLOBBER
      	always early clobbered.
      	* lra-lives.c (process_bb_lives): Check input hard regs for early
      	clobbered non-operand hard reg.
      
      From-SVN: r255471
      Vladimir Makarov committed
    • re PR middle-end/83164 (internal compiler error: verify_gimple failed) · 47f5f7e7
      	PR middle-end/83164
      	* tree-cfg.c (verify_gimple_assign_binary): Don't require
      	types_compatible_p, just that TYPE_MODE is the same.
      
      	* gcc.c-torture/compile/pr83164.c: New test.
      
      From-SVN: r255470
      Jakub Jelinek committed
    • PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted · 5d9ae53d
      PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
      PR c/81566 - invalid attribute aligned accepted on functions
      
      gcc/ada/ChangeLog:
      
      	PR c/81544
      	* gcc-interface/utils.c (gnat_internal_attribute_table): Initialize
      	new member of struct attribute_spec.
      
      gcc/c/ChangeLog:
      
      	PR c/81544
      	* c-decl.c (c_decl_attributes): Look up existing declaration and
      	pass it to decl_attributes.
      
      gcc/c-family/ChangeLog:
      
      	PR c/81544
      	PR c/81566
      	* c-attribs.c (attr_aligned_exclusions): New array.
      	(attr_alloc_exclusions, attr_cold_hot_exclusions): Same.
      	(attr_common_exclusions, attr_const_pure_exclusions): Same.
      	(attr_gnu_inline_exclusions, attr_inline_exclusions): Same.
      	(attr_noreturn_exclusions, attr_returns_twice_exclusions): Same.
      	(attr_warn_unused_result_exclusions): Same.
      	(handle_hot_attribute, handle_cold_attribute): Simplify.
      	(handle_const_attribute): Warn on function returning void.
      	(handle_pure_attribute): Same.
      	(handle_aligned_attribute): Diagnose conflicting attribute
      	specifications.
      	* c-warn.c (diagnose_mismatched_attributes): Simplify.
      
      gcc/cp/ChangeLog:
      
      	PR c/81544
      	* cp-tree.h (decls_match): Add default argument.
      	* decl.c (decls_match): Avoid calling into the target back end
      	and triggering an error.
      	* decl2.c (cplus_decl_attributes): Look up existing declaration and
      	pass it to decl_attributes.
      	* tree.c (cxx_attribute_table): Initialize new member of struct
      	attribute_spec.
      
      gcc/fortran/ChangeLog:
      
      	PR c/81544
      	* f95-lang.c (gfc_attribute_table): Initialize new member of struct
      	attribute_spec.
      
      gcc/lto/ChangeLog:
      
      	PR c/81544
      	* lto-lang.c (lto_attribute_table): Initialize new member of struct
      	attribute_spec.
      
      gcc/ChangeLog:
      
      	PR c/81544
      	* attribs.c (empty_attribute_table): Initialize new member of
      	struct attribute_spec.
      	(decl_attributes): Add argument.  Handle mutually exclusive
      	combinations of attributes.
      	(selftests::test_attribute_exclusions): New function.
      	(selftests::attribute_c_tests): Ditto.
      	* attribs.h (decl_attributes): Add default argument.
      	* selftest.h (attribute_c_tests): Declare.
      	* selftest-run-tests.c (selftest::run_tests): Call attribute_c_tests.
      	* tree-core.h (attribute_spec::exclusions, exclude): New type and
      	member.
      	* doc/extend.texi (Common Function Attributes): Update const and pure.
      
      gcc/testsuite/ChangeLog:
      
      	PR c/81544
      	* c-c++-common/Wattributes-2.c: New test.
      	* c-c++-common/Wattributes.c: New test.
      	* c-c++-common/attributes-3.c: Adjust.
      	* gcc.dg/Wattributes-6.c: New test.
      	* gcc.dg/Wattributes-7.c: New test.
      	* gcc.dg/attr-noinline.c
      	* gcc.dg/pr44964.c: Same.
      	* gcc.dg/torture/pr42363.c: Same.
      	* gcc.dg/tree-ssa/ssa-ccp-2.c: Same.
      
      From-SVN: r255469
      Martin Sebor committed
    • re PR target/82641 (Unable to enable crc32 for a certain function with target… · 1d8b0222
      re PR target/82641 (Unable to enable crc32 for a certain function with target attribute on ARM (aarch32))
      
      2017-12-07  Tamar Christina  <tamar.christina@arm.com>
      
      	PR target/82641
      	* config/arm/arm.c (INCLUDE_STRING): Define.
      	(arm_last_printed_arch_string, arm_last_printed_fpu_string): New.
      	(arm_declare_function_name): Conservatively emit .arch, .arch_extensions
      	and .fpu.
      
      gcc/testsuite/
      2017-12-07  Tamar Christina  <tamar.christina@arm.com>
      
      	PR target/82641
      	* gcc.target/arm/pragma_arch_attribute_2.c: New.
      	* gcc.target/arm/pragma_arch_attribute_2.c: New.
      	* gcc.target/arm/pragma_arch_attribute_3.c: New.
      	* gcc.target/arm/pragma_fpu_attribute.c: New.
      	* gcc.target/arm/pragma_fpu_attribute_2.c: New.
      
      From-SVN: r255468
      Tamar Christina committed
    • Add unroll and jam pass · 1cc521f1
      	* gimple-loop-jam.c: New file.
      	* Makefile.in (OBJS): Add gimple-loop-jam.o.
      	* common.opt (funroll-and-jam): New option.
      	* opts.c (default_options_table): Add unroll-and-jam at -O3.
      	* params.def (PARAM_UNROLL_JAM_MIN_PERCENT): New param.
      	(PARAM_UNROLL_JAM_MAX_UNROLL): Ditto.
      	* passes.def: Add pass_loop_jam.
      	* timevar.def (TV_LOOP_JAM): Add.
      	* tree-pass.h (make_pass_loop_jam): Declare.
      	* cfgloop.c (flow_loop_tree_node_add): Add AFTER argument.
      	* cfgloop.h (flow_loop_tree_node_add): Adjust declaration.
      	* cfgloopmanip.c (duplicate_loop): Add AFTER argument, adjust call
      	to flow_loop_tree_node_add.
      	(duplicate_subloops, copy_loops_to): Append to sibling list.
      	* cfgloopmanip.h: (duplicate_loop): Adjust declaration.
      	* doc/invoke.texi (-funroll-and-jam): Document new option.
      	(unroll-jam-min-percent, unroll-jam-max-unroll): Document new params.
      
      testsuite/
      	* gcc.dg/unroll-and-jam.c: New test.
      
      From-SVN: r255467
      Michael Matz committed
    • re PR tree-optimization/83296 (missing -Wstringop-overflow due to missing range info for MAX_EXPR) · 5a40ae3c
      2017-12-07  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/83296
      	PR tree-optimization/67769
      	* tree-ssa-phiopt.c (conditional_replacement): Do not reset
      	flow sensitive info in an unrelated BB.
      	(value_replacement): Use reset_flow_sensitive_info.
      	(minmax_replacement): Reset flow sensitive info on the def
      	we move.  Do not reset flow sensitive info in the whole BB
      	we move the stmt to.
      	(abs_replacement): Likewise.
      
      	* g++.dg/warn/Wstringop-overflow-1.C: New testcase.
      
      From-SVN: r255466
      Richard Biener committed
    • rs6000: Initialise rs6000_cpu correctly (PR43871) · d78d986b
      Finally, set rs6000_cpu based not on -mtune=, but only -mcpu= and the
      defaults.
      
      
      	PR target/43871
      	* config/rs6000/rs6000.c (rs6000_option_override_internal): Set
      	rs6000_cpu to the given -mcpu=, or to the default processor.
      
      From-SVN: r255464
      Segher Boessenkool committed
    • rs6000: Don't use rs6000_cpu_attr directly · 39f88700
      In some places in the code we currently use rs6000_cpu_attr, although
      that is a cast from rs6000_tune.  This patch changes things to be more
      regular and clearer.  Now rs6000_cpu_attr is not used any more, and
      it is deleted.
      
      
      	* config/rs6000/rs6000.h (rs6000_cpu_attr): Delete.
      	* config/rs6000/rs6000.c (rs6000_variable_issue_1): Use rs6000_tune
      	instead of rs6000_cpu_attr.
      	(rs6000_adjust_cost): Ditto.
      	(is_microcoded_insn): Ditto.
      	(rs6000_adjust_priority): Ditto.
      	(rs6000_issue_rate): Ditto.
      	(rs6000_use_sched_lookahead): Ditto.
      	(rs6000_use_sched_lookahead_guard): Ditto.
      	(rs6000_sched_reorder): Ditto.
      	(force_new_group): Ditto.
      	* config/rs6000/rs6000.md (cpu attribute): Ditto.
      	(group_ending_nop): Ditto.
      
      From-SVN: r255463
      Segher Boessenkool committed
    • rs6000: Split rs6000_cpu · 793fa2a4
      This splits rs6000_cpu into rs6000_cpu and rs6000_tune.  Both are still
      initialised identically, so there is no behaviour change.
      
      Now rs6000_cpu should be set by -mcpu=, and rs6000_tune by -mtune= (but
      both still are set by -mtune=, fixed in a later patch in the series).
      
      Also change rs6000_cpu to rs6000_tune in the appropriate cases (i.e.
      most, but not those that enable using new insns).
      
      
      	* config/rs6000/rs6000.opt (rs6000_tune): New variable.
      	* config/rs6000/rs6000.c (rs6000_option_override_internal): Also set
      	rs6000_tune.  Use rs6000_tune instead of rs6000_cpu where appropriate.
      	(rs6000_loop_align): Use rs6000_tune instead of rs6000_cpu where
      	appropriate.
      	(rs6000_reassociation_width): Ditto.
      	(rs6000_emit_epilogue): Ditto.
      	(rs6000_adjust_cost): Ditto.
      	(is_microcoded_insn): Ditto.
      	(is_cracked_insn): Ditto.
      	(rs6000_adjust_priority): Ditto.
      	(rs6000_sched_reorder): Ditto.
      	(rs6000_sched_reorder2): Ditto.
      	(insn_must_be_first_in_group): Ditto.
      	(insn_must_be_last_in_group): Ditto.
      	(rs6000_register_move_cost): Ditto.
      	* config/rs6000/rs6000.h (rs6000_cpu_attr): Use rs6000_tune instead of
      	rs6000_cpu.
      
      From-SVN: r255462
      Segher Boessenkool committed
    • Enable VAES support [2/5] · 69ddc3e5
      gcc/
      	* config.gcc: Add vaesintrin.h.
      	* config/i386/i386-builtin-types.def (V64QI_FTYPE_V64QI_V64QI): New type.
      	* config/i386/i386-builtin.def (__builtin_ia32_vaesdec_v16qi,
      	__builtin_ia32_vaesdec_v32qi, __builtin_ia32_vaesdec_v64qi): New builtins.
      	* config/i386/i386.c (ix86_expand_args_builtin): Handle new type.
      	* config/i386/immintrin.h: Include vaesintrin.h.
      	* config/i386/sse.md (vaesdec_<mode>): New pattern.
      	* config/i386/vaesintrin.h (_mm256_aesdec_epi128, _mm512_aesdec_epi128,
      	_mm_aesdec_epi128): New intrinsics.
      
      gcc/testsuite/
      	* gcc.target/i386/avx512-check.h: Handle bit_VAES.
      	* gcc.target/i386/avx512f-aesdec-2.c: New test.
      	* gcc.target/i386/avx512fvl-vaes-1.c: Ditto.
      	* gcc.target/i386/avx512vl-aesdec-2.c: Ditto.
      	* gcc.target/i386/i386.exp (check_effective_target_avx512vaes): New.
      
      From-SVN: r255461
      Julia Koval committed
    • Daily bump. · 38fed05a
      From-SVN: r255460
      GCC Administrator committed
  2. 06 Dec, 2017 18 commits
    • re PR tree-optimization/69224 (-Warray-bounds false positive with -O3 and struct pointer parameter) · 73984383
      	PR tree-optimization/69224
      	PR tree-optimization/80907
      	PR tree-optimization/82286
      	* gcc.dg/pr69224.c: New test.
      	* gcc.dg/pr80907.c: New test.
      	* gcc.dg/pr82286.c: New test.
      
      From-SVN: r255457
      Jeff Law committed
    • re PR c++/80259 (ICE deleting friend function) · 91c95da8
      	PR c++/80259
      	* decl2.c (grokfield): Diagnose = delete redefinition of a friend.
      
      	* g++.dg/cpp0x/pr80259.C: New test.
      
      From-SVN: r255456
      Jakub Jelinek committed
    • Correct argument to targetm.calls.promote_prototypes. · c25ac927
      	* call.c (convert_for_arg_passing): Pass NULL_TREE to
      	targetm.calls.promote_prototypes.
      	(type_passed_as): Likewise.
      
      From-SVN: r255455
      Jason Merrill committed
    • PR c++/82115 - ICE with variable initialized with its own address. · c965919a
      	* pt.c (value_dependent_expression_p): Add lval parameter.  Don't
      	consider DECL_INITIAL if it's true.
      
      From-SVN: r255454
      Jason Merrill committed
    • C/C++: don't suggest implementation names as spelling fixes (PR c/83236) · c79144f8
      gcc/c-family/ChangeLog:
      	PR c/83236
      	* c-common.c (selftest::c_family_tests): Call
      	selftest::c_spellcheck_cc_tests.
      	* c-common.h (selftest::c_spellcheck_cc_tests): New decl.
      	* c-spellcheck.cc: Include "selftest.h".
      	(name_reserved_for_implementation_p): New function.
      	(should_suggest_as_macro_p): New function.
      	(find_closest_macro_cpp_cb): Move the check for NT_MACRO to
      	should_suggest_as_macro_p and call it.
      	(selftest::test_name_reserved_for_implementation_p): New function.
      	(selftest::c_spellcheck_cc_tests): New function.
      	* c-spellcheck.h (name_reserved_for_implementation_p): New decl.
      
      gcc/c/ChangeLog:
      	PR c/83236
      	* c-decl.c (lookup_name_fuzzy): Don't suggest names that are
      	reserved for use by the implementation.
      
      gcc/cp/ChangeLog:
      	PR c/83236
      	* name-lookup.c (consider_binding_level): Don't suggest names that
      	are reserved for use by the implementation.
      
      gcc/testsuite/ChangeLog:
      	PR c/83236
      	* c-c++-common/spellcheck-reserved.c: New test case.
      
      From-SVN: r255453
      David Malcolm committed
    • Move macro-spellchecking code from "gcc" to new files in c-family · 613bc14f
      The code for spellchecking macros really belongs in c-family, rather
      than in gcc/spellcheck-tree.c, so this patch moves it there.
      
      gcc/ChangeLog:
      	* Makefile.in (C_COMMON_OBJS): Add c-family/c-spellcheck.o.
      	* spellcheck-tree.c (find_closest_macro_cpp_cb): Move to
      	c-family/c-spellcheck.cc.
      	(best_macro_match::best_macro_match): Likewise.
      	* spellcheck-tree.h
      	(struct edit_distance_traits<cpp_hashnode *>): Move to
      	c-family/c-spellcheck.h.
      	(class best_macro_match): Likewise.
      
      gcc/c-family/ChangeLog:
      	* c-spellcheck.cc: New file, taken from macro-handling code in
      	spellcheck-tree.c.
      	* c-spellcheck.h: New file, taken from macro-handling code in
      	spellcheck-tree.h.
      
      gcc/c/ChangeLog:
      	* c-decl.c: Include "c-family/c-spellcheck.h".
      
      gcc/cp/ChangeLog:
      	* name-lookup.c: Include "c-family/c-spellcheck.h".
      
      From-SVN: r255452
      David Malcolm committed
    • re PR tree-optimization/83293 (ICE: in gsi_insert_seq_nodes_after, at gimple-iterator.c:278) · 06f97084
      	PR tree-optimization/83293
      	* gimple-ssa-strength-reduction.c (insert_initializers): Use
      	GSI_NEW_STMT instead of GSI_SAME_STMT in gsi_insert_after that
      	might insert into empty bb.
      
      	* g++.dg/torture/pr83293.C: New test.
      
      From-SVN: r255451
      Jakub Jelinek committed
    • PR testsuite/83303 - FAIL: g++.dg/opt/new1.C on arm-none-eabi · bf8ce85a
      PR testsuite/83303 - FAIL: g++.dg/opt/new1.C on arm-none-eabi
      (extra -Walloc-size-larger-than warning
      
      	* g++.dg/opt/new1.C: Prune warning from test output.
      
      From-SVN: r255450
      Martin Sebor committed
    • re PR sanitizer/81281 (UBSAN: false positive, dropped promotion to long type.) · d7f44d4d
      	PR sanitizer/81281
      	* match.pd ((T)(P + A) - (T)P -> (T) A): Split into separate
      	simplify for plus with :c added, and pointer_plus without that.
      	((T)P - (T)(P + A) -> -(T) A): Likewise.  If type is integral
      	with undefined overflow and the conversion is not widening,
      	perform negation in utype and only convert to type afterwards.
      	((T)(P + A) - (T)(P + B) -> (T)A - (T)B): Split into separate
      	simplify for plus with :c added, and pointer_plus without that.
      	If type is integral with undefined overflow and the conversion is
      	not widening, perform minus in utype and only convert to type
      	afterwards.  Move the last pointer_diff_expr simplify into the
      	two outermost ifs.
      
      	* gcc.c-torture/execute/pr81281.c: New test.
      	* gcc.dg/pr81281-1.c: New test.
      	* gcc.dg/pr81281-2.c: New test.
      	* g++.dg/ubsan/pr81281.C: New test.
      	* g++.dg/ubsan/pr81281-aux.cc: New test.
      
      From-SVN: r255449
      Jakub Jelinek committed
    • PR tree-optimization/82646 - bogus -Wstringop-overflow with -D_FORTIFY_SOURCE=2… · 9c1caf50
      PR tree-optimization/82646 - bogus -Wstringop-overflow with -D_FORTIFY_SOURCE=2 on strncpy with range to a member array
      
      gcc/ChangeLog:
      
      	PR tree-optimization/82646
      	* builtins.c (maybe_emit_chk_warning): Use size as the bound for
      	strncpy, not maxlen.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/82646
      	* gcc.dg/builtin-stringop-chk-1.c: Adjust.
      	* gcc.dg/builtin-stringop-chk-9.c: New test.
      	* g++.dg/ext/strncpy-chk1.C: Adjust.
      
      From-SVN: r255448
      Martin Sebor committed
    • invoke.texi (-Wstringop-truncation): Mention attribute nonstring. · 8a797929
      gcc/ChangeLog:
      
      	* doc/invoke.texi (-Wstringop-truncation): Mention attribute
      	nonstring.
      
      From-SVN: r255447
      Martin Sebor committed
    • PR tree-optimization/83075 - Invalid strncpy optimization · 25b15e95
      gcc/ChangeLog:
      
      	PR tree-optimization/83075
      	* tree-ssa-strlen.c (handle_builtin_stxncpy): Avoid assuming
      	strncat/strncpy don't change length of source string.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/83075
      	* gcc.dg/tree-ssa/strncat.c: New test.
      	* gcc.dg/tree-ssa/strncpy-2.c: Same.
      
      From-SVN: r255446
      Martin Sebor committed
    • libgo: remove -fplan9-extensions from CFLAGS · 4c413747
          
          Remove -fplan9-extensions from the CFLAGS used for libgo (no
          longer needed since the runtime was converted from C to Go).
          
          Reviewed-on: https://go-review.googlesource.com/82177
      
      From-SVN: r255445
      Ian Lance Taylor committed
    • pr41305.C: Refine test option. · 8a8493ab
      	gcc/testsuite
      	* g++.dg/graphite/pr41305.C: Refine test option.
      	* gcc.dg/graphite/pr42205-1.c: Ditto.
      	* gcc.dg/graphite/pr42205-2.c: Ditto.
      	* gcc.dg/graphite/pr42211.c: Ditto.
      	* gcc.dg/graphite/pr46185.c: Ditto.
      	* gcc.dg/graphite/pr46966.c: Ditto.
      	* gcc.dg/graphite/pr59817-1.c: Ditto.
      	* gcc.dg/graphite/pr59817-2.c: Ditto.
      	* gcc.dg/graphite/pr60740.c: Ditto.
      	* gcc.dg/graphite/pr60785.c: Ditto.
      	* gcc.dg/graphite/pr68715-2.c: Ditto.
      	* gcc.dg/graphite/pr68715.c: Ditto.
      	* gcc.dg/graphite/pr70045.c: Ditto.
      	* gfortran.dg/graphite/pr14741.f90: Ditto.
      	* gfortran.dg/graphite/pr40982.f90: Ditto.
      	* gfortran.dg/graphite/pr42285.f90: Ditto.
      	* gfortran.dg/graphite/pr42334-1.f: Ditto.
      	* gfortran.dg/graphite/pr42334.f90: Ditto.
      	* gfortran.dg/graphite/pr43349.f: Ditto.
      	* gfortran.dg/graphite/pr59817.f: Ditto.
      
      From-SVN: r255444
      Bin Cheng committed
    • [ARM] testsuite: force hardfp in addr-modes-float.c · cff4e414
      gcc/testsuite/ChangeLog:
      
      <date>  Charles Baylis  <charles.baylis@linaro.org>
      
      	* gcc.target/arm/addr-modes-float.c: Place dg-add-options after
             	dg-require-effective-target.
             	(ATTR): New define.
             	(POST_STORE): Pass ATTR as 2nd argument.
             	(POST_LOAD): Likewise.
             	(POST_STORE_VEC): Likewise.
             	* gcc.target/arm/addr-modes-int.c (ATTR): New define.
             	(PRE_STORE): Pass ATTR as 2nd argument.
             	(POST_STORE): Likewise.
             	(PRE_LOAD): Likewise.
             	(POST_LOAD): Likewise.
             	* gcc.target/arm/addr-modes.h:  (PRE_STORE): New parameter.
             	(POST_STORE): Likewise.
             	(POST_STORE_VEC): Likewise.
             	(PRE_LOAD): Likewise.
             	(POST_LOAD): Likewise.
             	(POST_LOAD_VEC): Likewise.
      
      From-SVN: r255443
      Charles Baylis committed
    • compiler: handle set-and-use-temp in nilcheck code · 4c6f5562
          
          Change the code in Unary_expression::do_get_backend that introduces
          explicit nil checks for dereference operations to special case
          set-and-use-temporary expressions. For this case it is better to
          generate an explicit reference of the temp in the final conditional
          (avoids introducing tree sharing).
          
          Reviewed-on: https://go-review.googlesource.com/81915
      
      From-SVN: r255442
      Ian Lance Taylor committed
    • re PR ada/66205 (gnatbind generates invalid code when finalization is enabled in… · 40242256
      re PR ada/66205 (gnatbind generates invalid code when finalization is enabled in restricted runtime)
      
      	PR ada/66205
      	* bindgen.adb (Gen_AdaFinal): If the restriction No_Task_Termination is
      	set, generate a null body.
      
      From-SVN: r255441
      Simon Wright committed
    • Revert · 67acacee
      	2017-11-29  Martin Aberg  <maberg@gaisler.com>
      
      	* config/sparc/sparc.md (divdf3_fix): Add NOP and adjust length
      	to prevent b2bst errata sequence.
      	(sqrtdf2_fix): Likewise.
      
      From-SVN: r255439
      Eric Botcazou committed