aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-05-18Daily bump.GCC Administrator1-1/+1
From-SVN: r260347
2018-05-17line-map.c (linemap_init): Use placement new.Jason Merrill3-1/+10
* line-map.c (linemap_init): Use placement new. * system.h: #include <new>. From-SVN: r260343
2018-05-17RISC-V: Optimize switch with sign-extended index.Jim Wilson6-4/+74
gcc/ * expr.c (do_tablejump): When converting index to Pmode, if we have a sign extended promoted subreg, and the range does not have the sign bit set, then do a sign extend. * config/riscv/riscv.c (riscv_extend_comparands): In unsigned QImode test, check for sign extended subreg and/or constant operands, and do a sign extend in that case. gcc/testsuite/ * gcc.target/riscv/switch-qi.c: New. * gcc.target/riscv/switch-si.c: New. From-SVN: r260340
2018-05-17thunderx2t99.md (thunderx2t99_ls_both): Delete.Steve Ellcey2-50/+95
2018-05-17 Steve Ellcey <sellcey@cavium.com> * config/aarch64/thunderx2t99.md (thunderx2t99_ls_both): Delete. (thunderx2t99_multiple): Delete psuedo-units from used cpus. Add untyped. (thunderx2t99_alu_shift): Remove alu_shift_reg, alus_shift_reg. Change logics_shift_reg to logics_shift_imm. (thunderx2t99_fp_loadpair_basic): Delete. (thunderx2t99_fp_storepair_basic): Delete. (thunderx2t99_asimd_int): Add neon_sub and neon_sub_q types. (thunderx2t99_asimd_polynomial): Delete. (thunderx2t99_asimd_fp_simple): Add neon_fp_mul_s_scalar_q and neon_fp_mul_d_scalar_q. (thunderx2t99_asimd_fp_conv): Add *int_to_fp* types. (thunderx2t99_asimd_misc): Delete neon_dup and neon_dup_q. (thunderx2t99_asimd_recip_step): Add missing *sqrt* types. (thunderx2t99_asimd_lut): Add missing tbl types. (thunderx2t99_asimd_ext): Delete. (thunderx2t99_asimd_load1_1_mult): Delete. (thunderx2t99_asimd_load1_2_mult): Delete. (thunderx2t99_asimd_load1_ldp): New. (thunderx2t99_asimd_load1): New. (thunderx2t99_asimd_load2): Add missing *load2* types. (thunderx2t99_asimd_load3): New. (thunderx2t99_asimd_load4): New. (thunderx2t99_asimd_store1_1_mult): Delete. (thunderx2t99_asimd_store1_2_mult): Delete. (thunderx2t99_asimd_store2_mult): Delete. (thunderx2t99_asimd_store2_onelane): Delete. (thunderx2t99_asimd_store_stp): New. (thunderx2t99_asimd_store1): New. (thunderx2t99_asimd_store2): New. (thunderx2t99_asimd_store3): New. (thunderx2t99_asimd_store4): New. From-SVN: r260335
2018-05-17arm_cmse.h (cmse_nsfptr_create, [...]): Remove #include <stdint.h>.Jerome Lambourg4-5/+15
2018-05-17 Jerome Lambourg <lambourg@adacore.com> gcc/ * config/arm/arm_cmse.h (cmse_nsfptr_create, cmse_is_nsfptr): Remove #include <stdint.h>. Replace intptr_t with __INTPTR_TYPE__. libgcc/ * config/arm/cmse.c (cmse_check_address_range): Replace UINTPTR_MAX with __UINTPTR_MAX__ and uintptr_t with __UINTPTR_TYPE__. From-SVN: r260330
2018-05-17re PR tree-optimization/85698 (CPU2017 525.x264_r fails starting with r257581)Pat Haugen4-1/+92
PR target/85698 * config/rs6000/rs6000.c (rs6000_output_move_128bit): Check dest operand. * gcc.target/powerpc/pr85698.c: New test. Co-Authored-By: Segher Boessenkool <segher@kernel.crashing.org> From-SVN: r260329
2018-05-17PR libstdc++/85818 ensure path::preferred_separator is definedJonathan Wakely3-1/+40
Because path.cc is compiled with -std=gnu++17 the static constexpr data member is implicitly 'inline' and so no definition gets emitted unless it gets used in that translation unit. Other translation units built as C++11 or C++14 still require a namespace-scope definition of the variable, so mark the definition as used. PR libstdc++/85818 * src/filesystem/path.cc (path::preferred_separator): Add used attribute. * testsuite/experimental/filesystem/path/preferred_separator.cc: New. From-SVN: r260326
2018-05-17PR libstdc++/85812 fix memory leak in std::make_exception_ptrJonathan Wakely3-9/+27
PR libstdc++/85812 * libsupc++/cxxabi_init_exception.h (__cxa_free_exception): Declare. * libsupc++/exception_ptr.h (make_exception_ptr) [__cpp_exceptions]: Refactor to separate non-throwing and throwing implementations. [__cpp_rtti && !_GLIBCXX_HAVE_CDTOR_CALLABI]: Deallocate the memory if constructing the object throws. From-SVN: r260323
2018-05-17tree-ssa-dse.c (dse_classify_store): Fix iterator increment for pruning loop ↵Richard Biener2-3/+15
and prune defs feeding only already... 2018-05-17 Richard Biener <rguenther@suse.de> * tree-ssa-dse.c (dse_classify_store): Fix iterator increment for pruning loop and prune defs feeding only already visited PHIs. From-SVN: r260322
2018-05-17tree-ssa-sccvn.c (vn_reference_lookup_3): Improve memset handling.Richard Biener4-10/+81
2018-05-17 Richard Biener <rguenther@suse.de> * tree-ssa-sccvn.c (vn_reference_lookup_3): Improve memset handling. * gcc.dg/tree-ssa/ssa-fre-63.c: New testcase. From-SVN: r260318
2018-05-17re PR tree-optimization/85793 ([AARCH64] ICE in verify_gimple during GIMPLE ↵Bin Cheng4-0/+28
pass vect.) PR tree-optimization/85793 * tree-vect-stmts.c (vectorizable_load): Handle 1 element-wise load for VMAT_ELEMENTWISE. gcc/testsuite * gcc.dg/vect/pr85793.c: New test. Co-Authored-By: Richard Biener <rguenther@suse.de> From-SVN: r260317
2018-05-17Gimple FE support for internal functionsRichard Sandiford13-15/+141
This patch gets the gimple FE to parse calls to internal functions. The only non-obvious thing was how the functions should be written to avoid clashes with real function names. One option would be to go the magic number of underscores route, but we already do that for built-in functions, and it would be good to keep them visually distinct. In the end I borrowed the local/internal label convention from asm and used: x = .SQRT (y); 2018-05-17 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * internal-fn.h (lookup_internal_fn): Declare * internal-fn.c (lookup_internal_fn): New function. * gimple.c (gimple_build_call_from_tree): Handle calls to internal functions. * gimple-pretty-print.c (dump_gimple_call): Print "." before internal function names. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-scopedtables.c (expr_hash_elt::print): Likewise. gcc/c/ * gimple-parser.c: Include internal-fn.h. (c_parser_gimple_statement): Treat a leading CPP_DOT as a call. (c_parser_gimple_call_internal): New function. (c_parser_gimple_postfix_expression): Use it to handle CPP_DOT. Fix typos in comment. gcc/testsuite/ * gcc.dg/gimplefe-28.c: New test. * gcc.dg/asan/use-after-scope-9.c: Adjust expected output for internal function calls. * gcc.dg/goacc/loop-processing-1.c: Likewise. From-SVN: r260316
2018-05-17Allow gimple_build with internal functionsRichard Sandiford5-63/+79
This patch makes the function versions of gimple_build and gimple_simplify take combined_fns rather than built_in_codes, so that they work with internal functions too. The old gimple_builds were unused, so no existing callers need to be updated. 2018-05-17 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * gimple-fold.h (gimple_build): Make the function forms take combined_fn rather than built_in_function. (gimple_simplify): Likewise. * gimple-match-head.c (gimple_simplify): Likewise. * gimple-fold.c (gimple_build): Likewise. * tree-vect-loop.c (get_initial_def_for_reduction): Use gimple_build rather than gimple_build_call_internal. (get_initial_defs_for_reduction): Likewise. (vect_create_epilog_for_reduction): Likewise. (vectorizable_live_operation): Likewise. From-SVN: r260315
2018-05-17Fix GNU coding style for G_.Martin Liska6-18/+33
2018-05-17 Martin Liska <mliska@suse.cz> * gimple-ssa-sprintf.c (format_directive): Do not use space in between 'G_' and '('. 2018-05-17 Martin Liska <mliska@suse.cz> * c-warn.c (overflow_warning): Do not use space in between 'G_' and '('. 2018-05-17 Martin Liska <mliska@suse.cz> * gcc.dg/plugin/ggcplug.c (plugin_init): Do not use space in between 'G_' and '('. From-SVN: r260314
2018-05-17re PR target/85323 (SSE/AVX/AVX512 shift by 0 not optimized away)Jakub Jelinek6-11/+559
PR target/85323 * config/i386/i386.c (ix86_fold_builtin): Handle masked shifts even if the mask is not all ones. * gcc.target/i386/pr85323-7.c: New test. * gcc.target/i386/pr85323-8.c: New test. * gcc.target/i386/pr85323-9.c: New test. From-SVN: r260313
2018-05-17re PR target/85323 (SSE/AVX/AVX512 shift by 0 not optimized away)Jakub Jelinek6-8/+382
PR target/85323 * config/i386/i386.c (ix86_fold_builtin): Fold shift builtins by vector. (ix86_gimple_fold_builtin): Likewise. * gcc.target/i386/pr85323-4.c: New test. * gcc.target/i386/pr85323-5.c: New test. * gcc.target/i386/pr85323-6.c: New test. From-SVN: r260312
2018-05-17re PR target/85323 (SSE/AVX/AVX512 shift by 0 not optimized away)Jakub Jelinek6-0/+653
PR target/85323 * config/i386/i386.c: Include tree-vector-builder.h. (ix86_vector_shift_count): New function. (ix86_fold_builtin): Fold shift builtins by scalar count. (ix86_gimple_fold_builtin): Likewise. * gcc.target/i386/pr85323-1.c: New test. * gcc.target/i386/pr85323-2.c: New test. * gcc.target/i386/pr85323-3.c: New test. From-SVN: r260311
2018-05-17avx512fintrin.h (_mm512_set_epi16, [...]): New intrinsics.Jakub Jelinek14-1/+1333
* config/i386/avx512fintrin.h (_mm512_set_epi16, _mm512_set_epi8, _mm512_setzero): New intrinsics. * gcc.target/i386/avx512f-set-v32hi-1.c: New test. * gcc.target/i386/avx512f-set-v32hi-2.c: New test. * gcc.target/i386/avx512f-set-v32hi-3.c: New test. * gcc.target/i386/avx512f-set-v32hi-4.c: New test. * gcc.target/i386/avx512f-set-v32hi-5.c: New test. * gcc.target/i386/avx512f-set-v64qi-1.c: New test. * gcc.target/i386/avx512f-set-v64qi-2.c: New test. * gcc.target/i386/avx512f-set-v64qi-3.c: New test. * gcc.target/i386/avx512f-set-v64qi-4.c: New test. * gcc.target/i386/avx512f-set-v64qi-5.c: New test. * gcc.target/i386/avx512f-setzero-1.c: New test. From-SVN: r260310
2018-05-17[patch AArch64] Do not perform a vector splat for vector initialisation if ↵James Greenhalgh5-3/+136
it is not useful In the testcase in this patch we create an SLP vector with only two elements. Our current vector initialisation code will first duplicate the first element to both lanes, then overwrite the top lane with a new value. This duplication can be clunky and wasteful. Better would be to simply use the fact that we will always be overwriting the remaining bits, and simply move the first element to the corrcet place (implicitly zeroing all other bits). This reduces the code generation for this case, and can allow more efficient addressing modes, and other second order benefits for AArch64 code which has been vectorized to V2DI mode. Note that the change is generic enough to catch the case for any vector mode, but is expected to be most useful for 2x64-bit vectorization. Unfortunately, on its own, this would cause failures in gcc.target/aarch64/load_v2vec_lanes_1.c and gcc.target/aarch64/store_v2vec_lanes.c , which expect to see many more vec_merge and vec_duplicate for their simplifications to apply. To fix this, add a special case to the AArch64 code if we are loading from two memory addresses, and use the load_pair_lanes patterns directly. We also need a new pattern in simplify-rtx.c:simplify_ternary_operation to catch: (vec_merge:OUTER (vec_duplicate:OUTER x:INNER) (subreg:OUTER y:INNER 0) (const_int N)) And simplify it to: (vec_concat:OUTER x:INNER y:INNER) or (vec_concat y x) This is similar to the existing patterns which are tested in this function, without requiring the second operand to also be a vec_duplicate. * config/aarch64/aarch64.c (aarch64_expand_vector_init): Modify code generation for cases where splatting a value is not useful. * simplify-rtx.c (simplify_ternary_operation): Simplify vec_merge across a vec_duplicate and a paradoxical subreg forming a vector mode to a vec_concat. * gcc.target/aarch64/vect-slp-dup.c: New. Co-Authored-By: Kyrylo Tkachov <kyrylo.tkachov@arm.com> From-SVN: r260309
2018-05-17re PR c++/85713 (ICE in dependent_type_p, at cp/pt.c:24582 on valid code)Paolo Carlini2-1/+13
2018-05-17 Paolo Carlini <paolo.carlini@oracle.com> PR c++/85713 * g++.dg/cpp1y/lambda-generic-85713-2.C: New. From-SVN: r260308
2018-05-17config.gcc: Support "goldmont-plus".Olga Makhotina14-31/+112
2018-05-17 Olga Makhotina <olga.makhotina@intel.com> gcc/ * config.gcc: Support "goldmont-plus". * config/i386/driver-i386.c (host_detect_local_cpu): Detect "goldmont-plus". * config/i386/i386-c.c (ix86_target_macros_internal): Handle PROCESSOR_GOLDMONT_PLUS. * config/i386/i386.c (m_GOLDMONT_PLUS): Define. (processor_target_table): Add "goldmont-plus". (PTA_GOLDMONT_PLUS): Define. (ix86_lea_outperforms): Add TARGET_GOLDMONT_PLUS. (get_builtin_code_for_version): Handle PROCESSOR_GOLDMONT_PLUS. (fold_builtin_cpu): Add M_INTEL_GOLDMONT_PLUS. (fold_builtin_cpu): Add "goldmont-plus". (ix86_add_stmt_cost): Add TARGET_GOLDMONT_PLUS. (ix86_option_override_internal): Add "goldmont-plus". * config/i386/i386.h (processor_costs): Define TARGET_GOLDMONT_PLUS. (processor_type): Add PROCESSOR_GOLDMONT_PLUS. * config/i386/x86-tune.def: Add m_GOLDMONT_PLUS. * doc/invoke.texi: Add goldmont-plus as x86 -march=/-mtune= CPU type. libgcc/ * config/i386/cpuinfo.h (processor_types): Add INTEL_GOLDMONT_PLUS. * config/i386/cpuinfo.c (get_intel_cpu): Detect Goldmont Plus. gcc/testsuite/ * gcc.target/i386/builtin_target.c: Test goldmont-plus. * gcc.target/i386/funcspec-56.inc: Test arch=goldmont-plus. From-SVN: r260307
2018-05-17re PR tree-optimization/85757 (tree optimizers fail to fully clean up ↵Richard Biener4-8/+54
fixed-size memcpy) 2018-05-17 Richard Biener <rguenther@suse.de> PR tree-optimization/85757 * tree-ssa-dse.c (dse_classify_store): Record a PHI def and remove defs that only feed that PHI from further processing. * gcc.dg/tree-ssa/ssa-dse-34.c: New testcase. From-SVN: r260306
2018-05-17Daily bump.GCC Administrator1-1/+1
From-SVN: r260304
2018-05-16re PR c++/85363 (Throwing exception from member constructor (brace ↵Marek Polacek6-7/+85
initializer vs initializer list)) PR c++/85363 * call.c (set_flags_from_callee): Handle AGGR_INIT_EXPRs too. * tree.c (bot_manip): Call set_flags_from_callee for AGGR_INIT_EXPRs too. * g++.dg/cpp0x/initlist-throw1.C: New test. * g++.dg/cpp0x/initlist-throw2.C: New test. From-SVN: r260300
2018-05-16RISC-V: Minor pattern name cleanup.Jim Wilson2-4/+10
gcc/ * config/riscv/riscv.md (<optab>si3_mask, <optab>si3_mask_1): Prepend asterisk to name. (<optab>di3_mask, <optab>di3_mask_1): Likewise. From-SVN: r260299
2018-05-16DWARF: Add header for .debug_str_offsets table for dwarf_version 5.Mark Wielaard2-0/+46
DWARF5 defines a small header for .debug_str_offsets. Since we only use it for split dwarf .dwo files we don't need to keep track of the actual index offset in an attribute. gcc/ChangeLog * dwarf2out.c (count_index_strings): New function. (output_indirect_strings): Call count_index_strings and generate header for dwarf_version >= 5. From-SVN: r260298
2018-05-16DWARF: Emit DWARF5 forms for indirect addresses and string offsets.Mark Wielaard2-15/+52
We already emit DWARF5 attributes and tables for indirect addresses and string offsets, but still use GNU forms. Add a new helper function dwarf_FORM () for emitting the right form. Currently we only use the uleb128 forms. But DWARF5 also allows 1, 2, 3 and 4 byte forms (DW_FORM_strx[1234] and DW_FORM_addrx[1234]) which might be more space efficient. gcc/ChangeLog * dwarf2out.c (dwarf_FORM): New function. (set_indirect_string): Use dwarf_FORM. (reset_indirect_string): Likewise. (size_of_die): Likewise. (value_format): Likewise. (output_die): Likewise. (add_skeleton_AT_string): Likewise. (output_macinfo_op): Likewise. (index_string): Likewise. (output_index_string_offset): Likewise. (output_index_string): Likewise. From-SVN: r260297
2018-05-16rs6000.md (prefetch): Generate ISA 2.06 instructions dcbt and dcbtstt with ↵Carl Love2-6/+16
TH=16 if... gcc/ChangeLog: 2018-05-16 Carl Love <cel@us.ibm.com> * config/rs6000/rs6000.md (prefetch): Generate ISA 2.06 instructions dcbt and dcbtstt with TH=16 if operands[2] is 0 and Power 8 or newer. From-SVN: r260296
2018-05-16Remove unused function ipa_free_edge_args_substructuresMartin Jambor3-11/+5
2018-05-16 Martin Jambor <mjambor@suse.cz> * ipa-prop.c (ipa_free_all_edge_args): Remove. * ipa-prop.h (ipa_free_all_edge_args): Likewise. From-SVN: r260295
2018-05-16vsx-vector-6-be.c: Remove file.Carl Love3-32/+16
gcc/testsuite/ChangeLog: 2018-05-16 Carl Love <cel@us.ibm.com> * gcc.target/powerpc/vsx-vector-6-be.c: Remove file. * gcc.target/powerpc/vsx-vector-6-be.p7.c: New test file. * gcc.target/powerpc/vsx-vector-6-be.p8.c: New test file. * gcc.target/powerpc/vsx-vector-6-le.c (dg-final): Update counts for xvcmpeqdp., xvcmpgtdp., xvcmpgedp., xxlxor, xvrdpi. From-SVN: r260294
2018-05-16[AArch64] Improve register allocation of fmaWilco Dijkstra2-26/+75
This patch improves register allocation of fma by preferring to update the accumulator register. This is done by adding fma insns with operand 1 as the accumulator. The register allocator considers copy preferences only in operand order, so if the first operand is dead, it has the highest chance of being reused as the destination. As a result code using fma often has a better register allocation. Performance of SPECFP2017 improves by over 0.5% on some implementations, while it had no effect on other implementations. Fma is more readable too, in a simple example we now generate: fmadd s16, s2, s1, s16 fmadd s7, s17, s16, s7 fmadd s6, s16, s7, s6 fmadd s5, s7, s6, s5 instead of: fmadd s16, s16, s2, s1 fmadd s7, s7, s16, s6 fmadd s6, s6, s7, s5 fmadd s5, s5, s6, s4 gcc/ * config/aarch64/aarch64.md (fma<mode>4): Change into expand pattern. (fnma<mode>4): Likewise. (fms<mode>4): Likewise. (fnms<mode>4): Likewise. (aarch64_fma<mode>4): Rename insn, reorder accumulator operand. (aarch64_fnma<mode>4): Likewise. (aarch64_fms<mode>4): Likewise. (aarch64_fnms<mode>4): Likewise. (aarch64_fnmadd<mode>4): Likewise. From-SVN: r260292
2018-05-16* tree.c (warn_deprecated_use): Return bool. Simplify logic.Jason Merrill3-40/+26
From-SVN: r260290
2018-05-16tree-vectorizer.h (struct stmt_info_for_cost): Add where member.Richard Biener6-558/+611
2018-05-16 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (struct stmt_info_for_cost): Add where member. (dump_stmt_cost): Declare. (add_stmt_cost): Dump cost we add. (add_stmt_costs): New function. (vect_model_simple_cost, vect_model_store_cost, vect_model_load_cost): No longer exported. (vect_analyze_stmt): Adjust prototype. (vectorizable_condition): Likewise. (vectorizable_live_operation): Likewise. (vectorizable_reduction): Likewise. (vectorizable_induction): Likewise. * tree-vect-loop.c (vect_analyze_loop_operations): Create local cost vector to pass to vectorizable_ and record afterwards. (vect_model_reduction_cost): Take cost vector argument and adjust. (vect_model_induction_cost): Likewise. (vectorizable_reduction): Likewise. (vectorizable_induction): Likewise. (vectorizable_live_operation): Likewise. * tree-vect-slp.c (vect_create_new_slp_node): Initialize SLP_TREE_NUMBER_OF_VEC_STMTS. (vect_analyze_slp_cost_1): Remove. (vect_analyze_slp_cost): Likewise. (vect_slp_analyze_node_operations): Take visited args and a target cost vector. Avoid processing already visited stmt sets. (vect_slp_analyze_operations): Use a local cost vector to gather costs and register those of non-discarded instances. (vect_bb_vectorization_profitable_p): Use add_stmt_costs. (vect_schedule_slp_instance): Remove copying of SLP_TREE_NUMBER_OF_VEC_STMTS. Instead assert that it is not zero. * tree-vect-stmts.c (record_stmt_cost): Remove path directly adding cost. Record cost entry location. (vect_prologue_cost_for_slp_op): Function to compute cost of a constant or invariant generated for SLP vect in the prologue, split out from vect_analyze_slp_cost_1. (vect_model_simple_cost): Make static. Adjust for SLP costing. (vect_model_promotion_demotion_cost): Likewise. (vect_model_store_cost): Likewise, make static. (vect_model_load_cost): Likewise. (vectorizable_bswap): Add cost vector arg and adjust. (vectorizable_call): Likewise. (vectorizable_simd_clone_call): Likewise. (vectorizable_conversion): Likewise. (vectorizable_assignment): Likewise. (vectorizable_shift): Likewise. (vectorizable_operation): Likewise. (vectorizable_store): Likewise. (vectorizable_load): Likewise. (vectorizable_condition): Likewise. (vectorizable_comparison): Likewise. (can_vectorize_live_stmts): Likewise. (vect_analyze_stmt): Likewise. (vect_transform_stmt): Adjust calls to vectorizable_*. * tree-vectorizer.c: Include gimple-pretty-print.h. (dump_stmt_cost): New function. From-SVN: r260289
2018-05-16params.def (PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE): New param.Richard Biener8-51/+118
2018-05-16 Richard Biener <rguenther@suse.de> * params.def (PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE): New param. * doc/invoke.texi (dse-max-alias-queries-per-store): Document. * tree-ssa-dse.c: Include tree-ssa-loop.h. (check_name): New callback. (dse_classify_store): Track cycles via a visited bitmap of PHI defs and simplify handling of in-loop and across loop dead stores and properly fail for loop-variant refs. Handle byte-tracking with multiple defs. Use PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE for limiting the walk. * gcc.dg/tree-ssa/ssa-dse-32.c: New testcase. * gcc.dg/tree-ssa/ssa-dse-33.c: Likewise. * gcc.dg/uninit-pr81897-2.c: Use -fno-tree-dse. From-SVN: r260288
2018-05-16Handle vector boolean types when calculating the SLP unroll factorRichard Sandiford10-473/+637
The SLP unrolling factor is calculated by finding the smallest scalar type for each SLP statement and taking the number of required lanes from the vector versions of those scalar types. E.g. for an int32->int64 conversion, it's the vector of int32s rather than the vector of int64s that determines the unroll factor. We rely on tree-vect-patterns.c to replace boolean operations like: bool a, b, c; a = b & c; with integer operations of whatever the best size is in context. E.g. if b and c are fed by comparisons of ints, a, b and c will become the appropriate size for an int comparison. For most targets this means that a, b and c will end up as int-sized themselves, but on targets like SVE and AVX512 with packed vector booleans, they'll instead become a small bitfield like :1, padded to a byte for memory purposes. The SLP code would then take these scalar types and try to calculate the vector type for them, causing the unroll factor to be much higher than necessary. This patch tries to make the SLP code use the same approach as the loop vectorizer, by splitting out the code that calculates the statement vector type and the vector type that should be used for the number of units. 2018-05-16 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * tree-vectorizer.h (vect_get_vector_types_for_stmt): Declare. (vect_get_mask_type_for_stmt): Likewise. * tree-vect-slp.c (vect_two_operations_perm_ok_p): New function, split out from... (vect_build_slp_tree_1): ...here. Use vect_get_vector_types_for_stmt to determine the statement's vector type and the vector type that should be used for calculating nunits. Deal with cases in which the type has to be deferred. (vect_slp_analyze_node_operations): Use vect_get_vector_types_for_stmt and vect_get_mask_type_for_stmt to calculate STMT_VINFO_VECTYPE. * tree-vect-loop.c (vect_determine_vf_for_stmt_1) (vect_determine_vf_for_stmt): New functions, split out from... (vect_determine_vectorization_factor): ...here. * tree-vect-stmts.c (vect_get_vector_types_for_stmt) (vect_get_mask_type_for_stmt): New functions, split out from vect_determine_vectorization_factor. gcc/testsuite/ * gcc.target/aarch64/sve/vcond_10.c: New test. * gcc.target/aarch64/sve/vcond_10_run.c: Likewise. * gcc.target/aarch64/sve/vcond_11.c: Likewise. * gcc.target/aarch64/sve/vcond_11_run.c: Likewise. From-SVN: r260287
2018-05-16tree-cfg.c (verify_gimple_assign_ternary): Properly verify the ↵Richard Biener2-0/+11
[VEC_]COND_EXPR embedded comparison. 2018-05-16 Richard Biener <rguenther@suse.de> * tree-cfg.c (verify_gimple_assign_ternary): Properly verify the [VEC_]COND_EXPR embedded comparison. From-SVN: r260283
2018-05-15PR tree-optimization/85753 - missing -Wrestrict on memcpy into a member arrayMartin Sebor5-20/+122
gcc/ChangeLog: PR tree-optimization/85753 * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Handle RECORD_TYPE in addition to ARRAY_TYPE. gcc/testsuite/ChangeLog: PR tree-optimization/85753 * gcc.dg/Wrestrict-10.c: Adjust. * gcc.dg/Wrestrict-16.c: New test. From-SVN: r260280
2018-05-15cp-tree.h (cp_expr): Remove copy constructor.Jason Merrill3-3/+7
* cp-tree.h (cp_expr): Remove copy constructor. * mangle.c (struct releasing_vec): Declare copy constructor. From-SVN: r260279
2018-05-16Daily bump.GCC Administrator1-1/+1
From-SVN: r260277
2018-05-15* constexpr.c (cxx_eval_vec_init_1): Pass tf_none if ctx->quiet.Jason Merrill2-7/+8
From-SVN: r260273
2018-05-15PR c++/64372 - CWG 1560, gratuitous lvalue-rvalue conversion in ?:Jason Merrill3-37/+36
* call.c (build_conditional_expr_1): Don't force_rvalue when one arm is a throw-expression. From-SVN: r260272
2018-05-15PR middle-end/85643 - attribute nonstring fails to squash ↵Martin Sebor4-1/+105
-Wstringop-truncation warning gcc/ChangeLog: PR middle-end/85643 * calls.c (get_attr_nonstring_decl): Handle MEM_REF. gcc/testsuite/ChangeLog: PR middle-end/85643 * c-c++-common/attr-nonstring-7.c: New test. From-SVN: r260271
2018-05-15re PR lto/85583 (lto1: internal compiler error: in lto_balanced_map, at ↵Jan Hubicka2-4/+26
lto/lto-partition.c:833) PR lto/85583 * lto-partition.c (account_reference_p): Do not account references from aliases; do not account refernces from external initializers. From-SVN: r260266
2018-05-15cp-tree.h (DECL_MAYBE_IN_CHARGE_CDTOR_P): New.Paolo Carlini9-19/+27
2018-05-15 Paolo Carlini <paolo.carlini@oracle.com> * cp-tree.h (DECL_MAYBE_IN_CHARGE_CDTOR_P): New. (FOR_EACH_CLONE): Update. * decl.c (grokdeclarator): Use it. * decl2.c (vague_linkage_p): Likewise. * mangle.c (mangle_decl): Likewise. * method.c (lazily_declare_fn): Likewise. * optimize.c (can_alias_cdtor, maybe_clone_body): Likewise. * repo.c (repo_emit_p): Likewise. * tree.c (decl_linkage): Likewise. From-SVN: r260264
2018-05-15PR libstdc++/85749 constrain seed sequences for random number enginesJonathan Wakely13-37/+704
Constrain constructors and member functions of random number engines so that functions taking seed sequences can only be called with types that meet the seed sequence requirements. PR libstdc++/85749 * include/bits/random.h (__detail::__is_seed_seq): New SFINAE helper. (linear_congruential_engine, mersenne_twister_engine) (subtract_with_carry_engine, discard_block_engine) (independent_bits_engine, shuffle_order_engine): Use __is_seed_seq to constrain function templates taking seed sequences. * include/bits/random.tcc (linear_congruential_engine::seed(_Sseq&)) (mersenne_twister_engine::seed(_Sseq&)) (subtract_with_carry_engine::seed(_Sseq&)): Change return types to match declarations. * include/ext/random (simd_fast_mersenne_twister_engine): Use __is_seed_seq to constrain function templates taking seed sequences. * include/ext/random.tcc (simd_fast_mersenne_twister_engine::seed): Change return type to match declaration. * testsuite/26_numerics/random/discard_block_engine/cons/seed_seq2.cc: New. * testsuite/26_numerics/random/independent_bits_engine/cons/ seed_seq2.cc: New. * testsuite/26_numerics/random/linear_congruential_engine/cons/ seed_seq2.cc: New. * testsuite/26_numerics/random/mersenne_twister_engine/cons/ seed_seq2.cc: New. * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno. * testsuite/26_numerics/random/shuffle_order_engine/cons/seed_seq2.cc: New. * testsuite/26_numerics/random/subtract_with_carry_engine/cons/ seed_seq2.cc: New. * testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/ seed_seq2.cc: New. From-SVN: r260263
2018-05-15PR libstdc++/83891 fix path::is_absolute() for non-POSIX targetsJonathan Wakely6-23/+135
The correct definition seems to be has_root_directory() for all systems we care about. PR libstdc++/83891 * include/bits/fs_path.h (path::is_absolute()): Use same definition for all operating systems. * include/experimental/bits/fs_path.h (path::is_absolute()): Likewise. * testsuite/27_io/filesystem/path/query/is_absolute.cc: New. * testsuite/27_io/filesystem/path/query/is_relative.cc: Fix comment. * testsuite/experimental/filesystem/path/query/is_absolute.cc: New. From-SVN: r260259
2018-05-15Remove unused headers from testsJonathan Wakely23-22/+35
* testsuite/27_io/filesystem/path/decompose/extension.cc: Remove unused <vector> header. * testsuite/27_io/filesystem/path/query/empty.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_extension.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_filename.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_parent_path.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_relative_path.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_root_directory.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_root_name.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_root_path.cc: Likewise. * testsuite/27_io/filesystem/path/query/has_stem.cc: Likewise. * testsuite/27_io/filesystem/path/query/is_relative.cc: Likewise. * testsuite/experimental/filesystem/path/decompose/extension.cc: Likewise. * testsuite/experimental/filesystem/path/query/empty.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_extension.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_filename.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_parent_path.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_relative_path.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_root_directory.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_root_name.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_root_path.cc: Likewise. * testsuite/experimental/filesystem/path/query/has_stem.cc: Likewise. * testsuite/experimental/filesystem/path/query/is_relative.cc: Likewise. From-SVN: r260256
2018-05-15PR libstdc++/84159 fix appending strings to pathsJonathan Wakely6-50/+268
The path::operator/=(const Source&) and path::append overloads were still following the semantics of the Filesystem TS not C++17. Only the path::operator/=(const path&) overload was correct. This change adds more tests for path::operator/=(const path&) and adds new tests to verify that the other append operations have equivalent behaviour. PR libstdc++/84159 * include/bits/fs_path.h (path::operator/=, path::append): Construct temporary path before calling _M_append. (path::_M_append): Change parameter to path and implement C++17 semantics. * testsuite/27_io/filesystem/path/append/path.cc: Add helper function and more examples from the standard. * testsuite/27_io/filesystem/path/append/source.cc: New. * testsuite/27_io/filesystem/path/decompose/filename.cc: Add comment. * testsuite/27_io/filesystem/path/nonmember/append.cc: New. From-SVN: r260255
2018-05-15Qualify std::__invoke in <variant> to prevent ADLJonathan Wakely2-3/+7
* include/std/variant (__gen_vtable_impl::__visit_invoke): Qualify __invoke to prevent ADL. From-SVN: r260254
2018-05-15tree-ssa-dse.c (dse_classify_store): Remove use_stmt parameter, add ↵Richard Biener4-42/+94
by_clobber_p one. 2018-05-15 Richard Biener <rguenther@suse.de> * tree-ssa-dse.c (dse_classify_store): Remove use_stmt parameter, add by_clobber_p one. Change algorithm to collect all defs representing uses we need to walk and try reducing them to a single one before failing. (dse_dom_walker::dse_optimize_stmt): Adjust. * gcc.dg/tree-ssa/ssa-dse-31.c: New testcase. From-SVN: r260253