Jakub Jelinek [Wed, 11 Jul 2018 20:57:15 +0000 (22:57 +0200)]
avx512bitalgintrin.h (_mm512_mask_bitshuffle_epi64_mask): Use __mmask64 type instead of __mmask8 for __M argument.
* config/i386/avx512bitalgintrin.h (_mm512_mask_bitshuffle_epi64_mask):
Use __mmask64 type instead of __mmask8 for __M argument.
* config/i386/avx512fintrin.h (_mm512_mask_xor_epi64,
_mm512_maskz_xor_epi64): Use __mmask8 type instead of __mmask16 for
__U argument.
(_mm512_mask_cmpneq_epi64_mask): Use __mmask8 type instead of
__mmask16 for __M argument.
(_mm512_maskz_insertf32x4, _mm512_maskz_inserti32x4,
_mm512_mask_insertf32x4, _mm512_mask_inserti32x4): Cast last argument
to __mmask16 instead of __mmask8.
* config/i386/avx512vlintrin.h (_mm_mask_add_ps, _mm_maskz_add_ps,
_mm256_mask_add_ps, _mm256_maskz_add_ps, _mm_mask_sub_ps,
_mm_maskz_sub_ps, _mm256_mask_sub_ps, _mm256_maskz_sub_ps,
_mm256_maskz_cvtepi32_ps, _mm_maskz_cvtepi32_ps): Use __mmask8 type
instead of __mmask16 for __U argument.
* config/i386/avx512vlbwintrin.h (_mm_mask_cmp_epi8_mask): Use
__mmask16 instead of __mmask8 for __U argument.
(_mm256_mask_cmp_epi8_mask): Use __mmask32 instead of __mmask16 for
__U argument.
(_mm256_cmp_epi8_mask): Use __mmask32 return type instead of
__mmask16.
(_mm_mask_cmp_epu8_mask): Use __mmask16 instead of __mmask8 for __U
argument.
(_mm256_mask_cmp_epu8_mask): Use __mmask32 instead of __mmask16 for
__U argument.
(_mm256_cmp_epu8_mask): Use __mmask32 return type instead of
__mmask16.
(_mm_mask_cmp_epi16_mask): Cast last argument to __mmask8 instead
of __mmask16.
(_mm256_mask_cvtepi8_epi16): Use __mmask16 instead of __mmask32 for
__U argument.
(_mm_mask_cvtepi8_epi16): Use __mmask8 instead of __mmask32 for
__U argument.
(_mm256_mask_cvtepu8_epi16): Use __mmask16 instead of __mmask32 for
__U argument.
(_mm_mask_cvtepu8_epi16): Use __mmask8 instead of __mmask32 for
__U argument.
(_mm256_mask_cmpneq_epu8_mask, _mm256_mask_cmplt_epu8_mask,
_mm256_mask_cmpge_epu8_mask, _mm256_mask_cmple_epu8_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask32.
(_mm256_mask_cmpneq_epu16_mask, _mm256_mask_cmplt_epu16_mask,
_mm256_mask_cmpge_epu16_mask, _mm256_mask_cmple_epu16_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask16.
(_mm256_mask_cmpneq_epi8_mask, _mm256_mask_cmplt_epi8_mask,
_mm256_mask_cmpge_epi8_mask, _mm256_mask_cmple_epi8_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask32.
(_mm256_mask_cmpneq_epi16_mask, _mm256_mask_cmplt_epi16_mask,
_mm256_mask_cmpge_epi16_mask, _mm256_mask_cmple_epi16_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask16.
* config/i386/avx512vbmi2vlintrin.h (_mm_mask_shrdi_epi32,
_mm_mask_shldi_epi32): Cast last argument to __mmask8 instead of
__mmask16.
* gcc.target/i386/avx512bw-vpcmpb-2.c (CMP): Use SIZE macro instead
of hardcoding size. Cast (rel) to MASK_TYPE.
* gcc.target/i386/avx512bw-vpcmpub-2.c (CMP): Likewise.
* gcc.target/i386/avx512f-vinserti32x4-3.c: New test.
* gcc.target/i386/avx512f-vinsertf32x4-3.c: New test.
* gcc.target/i386/avx512vl-vpcmpnequb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgeub-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpleb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgeb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltub-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpleub-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpneqb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpnequw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgeuw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmplew-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgew-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltuw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpleuw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpneqw-2.c: New test.
2018-07-11 Grazvydas Ignotas <notasas@gmail.com>
* config/i386/avx512bwintrin.h: (_mm512_mask_cmp_epi8_mask,
_mm512_mask_cmp_epu8_mask): Use __mmask64 type instead of __mmask32
for __U argument.
* gcc.target/i386/avx512bw-vpcmpb-2.c (SIZE): Define to
(AVX512F_LEN / 8) instead of (AVX512F_LEN / 16).
* gcc.target/i386/avx512bw-vpcmpub-2.c (SIZE): Likewise.
Jan Hubicka [Wed, 11 Jul 2018 16:38:27 +0000 (18:38 +0200)]
lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream DECL_ORIGINAL_TYPE.
* lto-streamer-out.c (DFS::DFS_write_tree_body): Do not
stream DECL_ORIGINAL_TYPE.
(DFS::DFS_write_tree_body): Drop hack handling local external decls.
(hash_tree): Do not walk DECL_ORIGINAL_TYPE.
* tree-streamer-in.c (lto_input_ts_decl_non_common_tree_pointers):
Do not walk original type.
* tree-streamer-out.c (streamer_write_chain): Drop hack handling
external decls.
(write_ts_decl_non_common_tree_pointers): Do not stream
DECL_ORIGINAL_TYPE
* tree.c (free_lang_data_in_decl): Clear DECL_ORIGINAL_TYPE.
(find_decls_types_r): Do not walk DEC_ORIGINAL_TYPE.
Richard Earnshaw [Wed, 11 Jul 2018 15:27:55 +0000 (15:27 +0000)]
[arm] Put CPU's FPU capabilities directly in the ISA specification
As part of the transition from the original support for named FPUs to
general FPU properties I defined an entry in the CPU definitions in
arm-cpus.in to use a named FPU. However, that has now outlived its
usefulness and increasingly we are likely to find that newer cores do
not fit the legacy FPU names very well. Furthermore it is now possible
to encode all the FPU capatilities directly in the ISA definitions, often
as simply as using +fp or +simd.
So this patch removes the fpu field from the "define cpu" entries and
instead encodes the same information in the isa field. This also alows us
to remove a bit of now-dead code from parsecpu.awk.
* config/arm/arm-cpus.in: Move information from fpu field of each
cpu definition to the isa field.
* config/arm/parsecpu.awk (fpu): Delete match rule.
(gen_comm_data): Don't add bits from the CPU's FPU entry.
Ian Lance Taylor [Wed, 11 Jul 2018 14:22:12 +0000 (14:22 +0000)]
compiler: fix evaluation order of LHS index expressions
The spec says that when an index expression appears on the left hand
side of an assignment, the operands should be evaluated. The
gofrontend code was assuming that that only referred to the index
operand. But discussion of https://golang.org/issue/23188 has
clarified that this means both the slice/map/string operand and the
index operand. Adjust the gofrontend code accordingly.
Richard Biener [Wed, 11 Jul 2018 07:08:54 +0000 (07:08 +0000)]
re PR debug/86457 (ICE in add_dwarf_attr, at dwarf2out.c:4405 since r251448)
2018-07-11 Richard Biener <rguenther@suse.de>
PR debug/86457
* dwarf2out.c (init_sections_and_labels): Use
output_asm_line_debug_info consistently.
(dwarf2out_early_finish): Likewise.
(dwarf2out_finish): Remove DW_AT_stmt_list from early generated
type units.
Richard Biener [Wed, 11 Jul 2018 07:04:59 +0000 (07:04 +0000)]
tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): Rework father_bb setting in a way to avoid propagating constants multiple times...
2018-07-10 Richard Biener <rguenther@suse.de>
* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1):
Rework father_bb setting in a way to avoid propagating constants
multiple times on a loop body.
Mark Wielaard [Tue, 10 Jul 2018 22:44:30 +0000 (22:44 +0000)]
PR debug/86459 - Fix -gsplit-dwarf -g3 gcc_assert
There was a typo in the output_macinfo_op gcc_assert.
The function is called dwarf_FORM, not dwarf_form.
Add the provided testcase from the bug to test -gsplit-dwarf -g3.
gcc/ChangeLog:
PR debug/86459
* dwarf2out.c (output_macinfo_op): Fix dwarf_FORM typo in gcc_assert.
Jakub Jelinek [Tue, 10 Jul 2018 07:27:37 +0000 (09:27 +0200)]
re PR fortran/86421 (OpenMP declare simd linear ref in module causes gfortran to bail out)
PR fortran/86421
* module.c (omp_declare_simd_clauses): Add LINEAR with _REF, _VAL and
_UVAL suffixes.
(mio_omp_declare_simd): Save and restore ref, val and uval modifiers
on linear clauses. Initialize n->where to gfc_current_locus.
Jakub Jelinek [Tue, 10 Jul 2018 07:12:37 +0000 (09:12 +0200)]
re PR c++/86443 (ICEs on #pragma omp distribute parallel for with class iterators)
PR c++/86443
* gimplify.c (find_combined_omp_for): Add DATA argument, in addition
to finding the inner OMP_FOR/OMP_SIMD stmt find non-trivial wrappers,
BLOCKs with BLOCK_VARs, OMP_PARALLEL in between, OMP_FOR in between.
(gimplify_omp_for): For composite loops, move outer
OMP_{DISTRIBUTE,TASKLOOP,FOR,PARALLEL} right around innermost
OMP_FOR/OMP_SIMD if there are any non-trivial wrappers. For class
iterators add any needed clauses. Allow OMP_FOR_ORIG_DECLS to contain
TREE_LIST for both the original class iterator and the "last" helper
var. Gimplify OMP_FOR_PRE_BODY before the outermost composite
loop, remember has_decl_expr from outer composite loops for the
innermost OMP_SIMD in TREE_PRIVATE bit on OMP_FOR_INIT.
gcc/c-family/
* c-omp.c (c_omp_check_loop_iv_r, c_omp_check_loop_iv): Allow declv
to contain TREE_LIST for both the original class iterator and the
"last" helper var.
gcc/cp/
* semantics.c (handle_omp_for_class_iterator): Remove lastp argument,
instead of setting *lastp turn orig_declv elt into a TREE_LIST.
(finish_omp_for): Adjust handle_omp_for_class_iterator caller.
* pt.c (tsubst_omp_for_iterator): Allow OMP_FOR_ORIG_DECLS to contain
TREE_LIST for both the original class iterator and the "last" helper
var.
libgomp/
* testsuite/libgomp.c++/for-15.C: New test.
Ian Lance Taylor [Tue, 10 Jul 2018 00:55:28 +0000 (00:55 +0000)]
compiler: fix double evaluation with interface field expression
In Interface_field_reference_expression, the interface expression
is used in two places, so a temporary variable is used. Previously,
we used a Set_and_use_temporary_expression, which, when evaluated
twice, causes double evaluation of the underlying expression. Fix
by setting the temporary once and use Temporary_reference_expression
instead.
Martin Sebor [Mon, 9 Jul 2018 20:33:48 +0000 (20:33 +0000)]
PR middle-end/77357 - strlen of constant strings not folded
gcc/ChangeLog:
PR middle-end/77357
PR middle-end/86428
* builtins.c (c_strlen): Avoid out-of-bounds warnings when
accessing implicitly initialized array elements.
* expr.c (string_constant): Handle string initializers of
character arrays within aggregates.
* gimple-fold.c (fold_array_ctor_reference): Add argument.
Store element offset. As a special case, handle zero size.
(fold_nonarray_ctor_reference): Same.
(fold_ctor_reference): Add argument. Store subobject offset.
* gimple-fold.h (fold_ctor_reference): Add argument.
gcc/testsuite/ChangeLog:
PR middle-end/77357
* gcc.dg/strlenopt-49.c: New test.
* gcc.dg/strlenopt-50.c: New test.
* gcc.dg/strlenopt-51.c: New test.
* gcc.dg/strlenopt-52.c: New test.
Paul Koning [Mon, 9 Jul 2018 14:00:52 +0000 (10:00 -0400)]
Improve code generation for pdp11 target.
* config/pdp11/pdp11.c (pdp11_addr_cost): New function.
(pdp11_insn_cost): New function.
(pdp11_md_asm_adjust): New function.
(TARGET_INVALID_WITHIN_DOLOOP): Define.
(pdp11_rtx_costs): Update to match machine better.
(output_addr_const_pdp11): Correct format mismatch warnings.
* config/pdp11/pdp11.h (SLOW_BYTE_ACCESS): Correct definition.
* config/pdp11/pdp11.md: General change to add base_cost and/or
length attributes for use by new pdp11_insn_cost function.
(MIN_BRANCH): Correct definition.
(MIN_SOB): Ditto.
(doloop_end): Use standard pattern name for looping pattern.
(doloop_end_nocc): New.
(movsf): Add another constraint alternative.
(zero_extendqihi2): Add constraint alternatives for not in place
extend.
(zero_extendhisi2): Remove.
(shift patterns): Add CC handling variants.
(bswaphi2): New.
(bswapsi2): New.
(rothi3): New.
(define_peephole2): New peephole to recognize mov that sets CC for
subsequent test.
Jakub Jelinek [Mon, 9 Jul 2018 10:56:47 +0000 (12:56 +0200)]
re PR c/86420 (nextafter(0x1p-1022,0) is constant folded)
PR c/86420
* real.c (real_nextafter): Return true if result is denormal.
* gcc.dg/nextafter-1.c (TEST): Adjust the tests that expect denormals
to be returned and when first argument is not 0, so that they don't do
anything for NEED_EXC or NEED_ERRNO.
Tom de Vries [Mon, 9 Jul 2018 07:17:45 +0000 (07:17 +0000)]
[debug] Handle debug references to skipped params
When compiling guality/vla-1.c with -O3 -g, vla a in f1 is optimized away, but
f1 still contains a debug expression describing the upper bound of the vla
(D.1914):
...
__attribute__((noinline))
f1 (intD.6 iD.1900)
{
<bb 2>
saved_stack.1_2 = __builtin_stack_save ();
# DEBUG BEGIN_STMT
# DEBUG D#3 => i_1(D) + 1
# DEBUG D#2 => (long intD.8) D#3
# DEBUG D#1 => D#2 + -1
# DEBUG D.1914 => (sizetype) D#1
...
Then f1 is cloned to a version f1.constprop with no parameters, eliminating
parameter i, and 'DEBUG D#3 => i_1(D) + 1' turns into 'D#3 => NULL'.
This patch fixes that by defining debug expressions for default defs of
eliminated parameters in remap_ssa_name:
...
__attribute__((noinline))
f1.constprop ()
{
intD.6 iD.1949;
Eric Botcazou [Sat, 7 Jul 2018 10:46:10 +0000 (10:46 +0000)]
c-ada-spec.c (to_ada_name): Remove index parameter.
* c-ada-spec.c (to_ada_name): Remove index parameter.
(pp_ada_tree_identifier): Likewise.
(dump_ada_macros): Adjust call to to_ada_name.
(struct overloaded_name_hash): Delete.
(struct overloaded_name_hasher): Likewise.
(overloaded_names): Likewise.
(compute_overloading_index): Likewise.
(dump_ada_decl_name): Do not call compute_overloading_index and
adjust calls to pp_ada_tree_identifier.
(dump_ada_double_name): Adjust calls to pp_ada_tree_identifier.
(dump_ada_import): Add spc parameter and switch to aspect syntax.
(dump_ada_function_declaration): Adjust call to pp_ada_tree_identifier.
(dump_ada_enum_type): Remove type and display_convention parameters.
Adjust calls to pp_ada_tree_identifier.
(dump_ada_node): Likewise and for dump_ada_structure.
(dump_nested_type) <ENUMERAL_TYPE>: Adjust call to dump_ada_enum_type
and tidy up.
<RECORD_TYPE>: Adjust call to dump_ada_structure and switch to aspect
syntax.
(print_constructor): Adjust call to pp_ada_tree_identifier.
(print_destructor): Likewise.
(dump_ada_declaration): Switch to aspect syntax.
(dump_ada_structure): Likewise and tidy up. Replace display_convention
parameter with nested parameter.
(dump_ads): Emit pragma Ada_2012 in lieu of pragma Ada_2005.
(dump_ada_specs): Do not delete overloaded_names table.
Eric Botcazou [Sat, 7 Jul 2018 10:36:54 +0000 (10:36 +0000)]
decl.c (gnat_to_gnu_entity): Add GNAT_DECL local variable and use it throughout.
* gcc-interface/decl.c (gnat_to_gnu_entity): Add GNAT_DECL local
variable and use it throughout.
<E_Variable>: If the nominal subtype of the object is unconstrained,
compute the Ada size separately and put in on the padding type if the
size is not fixed.
<E_Record_Type>: Minor tweak.
* gcc-interface/misc.c (gnat_type_max_size): Rename max_size_unit
into max_size_unit throughout.
Eric Botcazou [Sat, 7 Jul 2018 10:20:12 +0000 (10:20 +0000)]
gigi.h (add_decl_expr): Adjust prototype.
* gcc-interface/gigi.h (add_decl_expr): Adjust prototype.
* gcc-interface/decl.c (gnat_to_gnu_entity): Remove useless test.
* gcc-interface/trans.c (add_stmt_with_node): Remove exceptions.
(add_decl_expr): Change type of second parameter and rename it.
(renaming_from_instantiation_p): New function moved from...
(set_expr_location_from_node): Test for exceptions here and add one
for actual subtypes built for unconstrained composite actuals.
* gcc-interface/utils.c (renaming_from_instantiation_p): ...here.
Eric Botcazou [Sat, 7 Jul 2018 10:06:08 +0000 (10:06 +0000)]
decl.c (gnat_to_gnu_param): Minor tweak.
* gcc-interface/decl.c (gnat_to_gnu_param): Minor tweak.
(gnat_to_gnu_subprog_type): New pure_flag local variable. Set it for
a pure Ada function with a by-ref In parameter. Propagate it onto the
function type by means of the TYPE_QUAL_RESTRICT flag.
* gcc-interface/utils.c (finish_subprog_decl): Set DECL_PURE_P if the
function type has the TYPE_QUAL_RESTRICT flag set.
Jakub Jelinek [Sat, 7 Jul 2018 07:47:10 +0000 (09:47 +0200)]
re PR target/84711 (AArch32 big-endian fails when taking subreg of a vector mode to a scalar mode.)
PR target/84711
* gcc.dg/vect/pr84711.c: Remove unnecessary sse
dg-require-effective-target. Add -msse not just on i386-*, but
on all i?86-* and x86_64-*.
* gcc.dg/tree-ssa/phi-opt-16.c: New test.
* gcc.dg/tree-ssa/phi-opt-17.c: New test.
* gcc.dg/tree-ssa/phi-opt-18.c: New test.
* gcc.dg/tree-ssa/phi-opt-19.c: New test.
* gcc.dg/tree-ssa/popcount3.c: New test.
Jakub Jelinek [Fri, 6 Jul 2018 21:42:41 +0000 (23:42 +0200)]
re PR tree-optimization/86401 (The "For constants M and N, if M == (1LL << cst) - 1 && (N & M) == M,..." opts are only in fold-const.c and in RTL)
PR tree-optimization/86401
* fold-const.c (fold_binary_loc) <case BIT_AND_EXPR>: Move the
((A & N) + B) & M -> (A + B) & M etc. optimization into ...
(fold_bit_and_mask): ... here. New helper function for match.pd.
* fold-const.h (fold_bit_and_mask): Declare.
* match.pd (((A & N) + B) & M -> (A + B) & M): New optimization.
* gcc.dg/tree-ssa/pr86401-1.c: New test.
* gcc.dg/tree-ssa/pr86401-2.c: New test.
* c-c++-common/rotate-9.c: New test.
Jonathan Wakely [Fri, 6 Jul 2018 14:16:13 +0000 (15:16 +0100)]
PR libstdc++/84928 use std::move in <numeric> algorithms
P0616R0 altered the effects of the <numeric> algorithms to use std::move
on the accumulator values (resolving LWG 2055). This implements the
change for C++2a, but retains the previous behaviour for older
standards.
* include/bits/stl_numeric.h (_GLIBCXX_MOVE_IF_20): Define macro to
conditionally move, according to __cplusplus value.
(accumulate, inner_product, partial_sum, adjacent_difference): Use
_GLIBCXX_MOVE_IF_20.
* testsuite/26_numerics/accumulate/lwg2055.cc: New test.
* testsuite/26_numerics/adjacent_difference/lwg2055.cc: New test.
* testsuite/26_numerics/inner_product/lwg2055.cc: New test.
* testsuite/26_numerics/partial_sum/lwg2055.cc: New test.
This is the last remaining piece of P0935R0. This adds a default
constructor to each of the streambuf and stream types in <sstream> so
that default construction does not use the 'explicit' constructor that
has a single, defaulted argument.
Paul Thomas [Thu, 5 Jul 2018 16:27:38 +0000 (16:27 +0000)]
re PR fortran/86408 (bogus error: ABSTRACT INTERFACE must not have an assumed character length result (F2003: C418))
2018-07-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86408
* resolve.c.c (resolve_contained_fntype): Reference to C418 is
in F2008 and not F2003.
(resolve_function): Ditto in error message. Also, exclude
deferred character length results from the error.
2018-07-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86408
* gfortran.dg/deferred_character_20.f90: New test.
Jonathan Wakely [Thu, 5 Jul 2018 15:56:06 +0000 (16:56 +0100)]
PR libstdc++/58265 implement LWG 2063 for COW strings
For COW strings the default constructor does not allocate when
_GLIBCXX_FULLY_DYNAMIC_STRING == 0, so can be noexcept. The move
constructor and swap do not allocate when the allocators are equal, so
add conditional noexcept using allocator_traits::is_always_equal.
Fritz Reese [Thu, 5 Jul 2018 15:39:27 +0000 (15:39 +0000)]
re PR fortran/83183 (Out of memory with option -finit-derived)
2018-07-05 Fritz Reese <fritzoreese@gmail.com>
gcc/fortran/ChangeLog:
PR fortran/83183
PR fortran/86325
* expr.c (class_allocatable, class_pointer, comp_allocatable,
comp_pointer): New helpers.
(component_initializer): Generate EXPR_NULL for allocatable or pointer
components. Do not generate initializers for components within BT_CLASS.
Do not assign to comp->initializer.
(gfc_generate_initializer): Use new helpers; move code to generate
EXPR_NULL for class allocatable components into component_initializer().
gcc/testsuite/ChangeLog:
PR fortran/83183
PR fortran/86325
* gfortran.dg/init_flag_18.f90: New testcase.
* gfortran.dg/init_flag_19.f03: New testcase.
Carl Love [Thu, 5 Jul 2018 14:48:51 +0000 (14:48 +0000)]
rs6000-c.c: Map ALTIVEC_BUILTIN_VEC_UNPACKH for float argument to VSX_BUILTIN_DOUBLEH_V4SF.
gcc/ChangeLog:
2018-07-05 Carl Love <cel@us.ibm.com>
* config/rs6000/rs6000-c.c: Map ALTIVEC_BUILTIN_VEC_UNPACKH for
float argument to VSX_BUILTIN_DOUBLEH_V4SF.
Map ALTIVEC_BUILTIN_VEC_UNPACKL for float argument to
VSX_BUILTIN_DOUBLEL_V4SF.
gcc/testsuite/ChangeLog:
2018-07-05 Carl Love <cel@us.ibm.com>
* gcc.target/altivec-1-runnable.c: New test file.
* gcc.target/altivec-2-runnable.c: New test file.
* gcc.target/vsx-7.c (main2): Change expected expected instruction
for tests.
Tamar Christina [Thu, 5 Jul 2018 10:31:04 +0000 (10:31 +0000)]
Simplify movmem code by always doing overlapping copies when larger than 8 bytes on AArch64.
This changes the movmem code in AArch64 that does copy for data between 4 and 7
bytes to use the smallest possible mode capable of copying the remaining bytes in one
go and then overlapping the reads if needed.
This means that if we're copying 5 bytes we would issue an SImode and QImode
load instead of two SImode loads.
This does smaller memory accesses but also gives the mid-end a chance to realise
that it can CSE the loads in certain circumstances. e.g. when you have something
like
return foo;
where foo is a struct. This would be transformed by the mid-end into SSA form as
D.XXXX = foo;
return D.XXXX;
This movmem routine will handle the first copy, but it's usually not needed,
the mid-end would do SImode and QImode stores into X0 for the 5 bytes example
but without the first copies being in the same mode, it doesn't know it doesn't
need the stores at all.
PR sanitizer/84250
* config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static
libasan.
* gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan.
Jonathan Wakely [Wed, 4 Jul 2018 20:15:01 +0000 (21:15 +0100)]
P0646R1 Improving the Return Value of Erase-Like Algorithms I
In C++2a the remove, remove_if and unique members of std::list and
std::forward_list have been changed to return the number of elements
removed. This is an ABI change for the remove members and the
non-template unique members, so an abi-tag is used to give those symbols
new mangled names in C++2a mode. For the function templates the return
type is part of the mangled name so no abi-tag is needed.
* include/bits/forward_list.h (__cpp_lib_list_remove_return_type):
Define.
(forward_list::__remove_return_type): Define typedef as size_type or
void, according to __cplusplus value.
(_GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
empty, according to __cplusplus value.
(forward_list::remove, forward_list::unique): Use typedef and macro
to change return type and add abi-tag for C++2a.
(forward_list::remove_if<Pred>, forward_list::unique<BinPred>): Use
typedef to change return type for C++2a.
* include/bits/forward_list.tcc (_GLIBCXX20_ONLY): Define macro.
(forward_list::remove, forward_list::remove_if<Pred>)
(forward_list::unique<BinPred>): Return number of removed elements
for C++2a.
* include/bits/list.tcc (_GLIBCXX20_ONLY): Define macro.
(list::remove, list::unique, list::remove_if<Predicate>)
(list::unique<BinaryPredicate>): Return number of removed elements
for C++2a.
* include/bits/stl_list.h (__cpp_lib_list_remove_return_type): Define.
(list::__remove_return_type): Define typedef as size_type or
void, according to __cplusplus value.
(_GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
empty, according to __cplusplus value.
(list::remove, list::unique): Use typedef and macro to change return
type and add abi-tag for C++2a.
(list::remove_if<Predicate>, list::unique<BinaryPredicate>): Use
typedef to change return type for C++2a.
* include/std/version (__cpp_lib_list_remove_return_type): Define.
* testsuite/23_containers/forward_list/operations/
remove_cxx20_return.cc: New.
* testsuite/23_containers/forward_list/operations/
unique_cxx20_return.cc: New.
PR sanitizer/84250
* config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static
libasan.
* gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan.