When an abbreviation ends with a dot followed by whitespace, Texinfo
thinks the dot ends a sentence, and applies spacing rules etc. based
on that. To prevent this, there is the @: macro.
This patch puts @: after every vs., e.g., and i.e. where it is needed.
In a few cases there was "@ " already, or "@\n", but @: is slightly
better, and more consistent.
* target.def: Put @: after every vs., e.g., and i.e. where it is
followed by whitespace.
* doc/extend.texi: Ditto.
* doc/fragments.texi: Ditto.
* doc/gimple.texi: Ditto.
* doc/implement-c.texi: Ditto.
* doc/install.texi: Ditto.
* doc/invoke.texi: Ditto.
* doc/md.texi: Ditto.
* doc/plugins.texi: Ditto.
* doc/rtl.texi: Ditto.
* doc/sourcebuild.texi: Ditto.
* doc/tm.texi.in: Ditto.
* doc/ux.texi: Ditto.
* doc/tm.texi: Regenerate.
Kyrylo Tkachov [Wed, 7 Nov 2018 17:56:51 +0000 (17:56 +0000)]
[arm] Add support for Arm Ares
This adds support for the Arm Ares CPU for in the arm port.
It implements the Armv8.2-A architecture with the optional features
of statistical profiling, dot product and FP16 on by default.
Note: Ares is a codename to enable early adopters and in time
we will add the final product name once it's announced.
Kyrylo Tkachov [Wed, 7 Nov 2018 17:55:27 +0000 (17:55 +0000)]
[AArch64] Add -mcpu/-mtune support for Arm Ares
This adds support for the Arm Ares CPU for AArch64.
It implements the Armv8.2-A architecture with the optional features
of statistical profiling, dot product and FP16 on by default.
Note: Ares is a codename to enable early adopters and in time
we will add the final product name once it's announced.
* config/aarch64/aarch64-cores.def (ares): Define.
* config/aarch64/aarch64-tune.md: Regenerate.
* doc/invoke.texi (AArch64 Options): Document ares value for mtune.
* tree.c (fld_incomplete_type_of): Clear TREE_ADDRESSABLE.
(free_lang_data_in_decl): Set TREE_ADDRESSABLE for public vars and
functions; clear TYPE_DECL_SUPPRESS_DEBUG and DECL_MODE for
TYPE_DECL.
Richard Biener [Wed, 7 Nov 2018 15:01:09 +0000 (15:01 +0000)]
re PR tree-optimization/87914 (gcc fails to vectorize bitreverse code)
2018-11-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/87914
* tree-vect-loop.c (vect_is_simple_reduction): Improve detection
of nested cycles.
(vectorizable_reduction): Handle shifts and rotates by dispatching
to vectorizable_shift.
* tree-vect-stmts.c (vect_get_vec_def_for_operand_1): Handle
in-loop uses of vect_nested_cycle defs. Merge cycle and internal
def cases.
(vectorizable_shift): Export and handle being called as
vect_nested_cycle.
(vect_analyze_stmt): Call vectorizable_shift after
vectorizable_reduction.
* tree-vectorizer.h (vectorizable_shift): Declare.
* lib/target-supports.exp (check_effective_target_vect_var_shift): New.
(check_avx2_available): Likewise.
* g++.dg/vect/pr87914.cc: New testcase.
Jan Hubicka [Wed, 7 Nov 2018 14:12:20 +0000 (15:12 +0100)]
ipa-devirt.c (odr_types_equivalent_p): Expect constants than const decls in TREE_VALUE of enum.
* ipa-devirt.c (odr_types_equivalent_p): Expect constants
than const decls in TREE_VALUE of enum.
(dump_type_inheritance_graph): Improve duplicate dumping.
(free_enum_values): New.
(build_type_inheritance_graph): Use it.
* tree.c (free_lang_data_in_type): Free TYPE_VALUES of enums
which are not main variants or not ODR types.
(verify_type_variant): Expect variants to have no TYPE_VALUES.
Joseph Myers [Wed, 7 Nov 2018 13:49:03 +0000 (13:49 +0000)]
Update libquadmath fmaq from glibc, fix nanq issues.
This patch extends update-quadmath.py to update fmaq from glibc.
The issue in that function was that quadmath-imp.h had a struct in a
union with mant_high and mant_low fields (up to 64-bit) whereas glibc
has mantissa0, mantissa1, mantissa2 and mantissa3 (up to 32-bit). The
patch changes those fields to be the same as in glibc, moving printf /
strtod code that also uses those fields back to closer to the glibc
form. This allows fmaq to be updated automatically from glibc (which
brings in at least one bug fix from glibc from 2015).
nanq was also using the mant_high field name, and had other issues: it
only partly initialized the union from which a value was returned, and
setting mant_high to 1 meant a signaling NaN would be returned rather
than a quiet NaN. This patch fixes those issues as part of updating
it to use the changed interfaces (but does not fix the issue of not
using the argument).
Bootstrapped with no regressions on x86_64-pc-linux-gnu.
* quadmath-imp.h (ieee854_float128): Use mantissa0, mantissa1,
mantissa2 and mantissa3 fields instead of mant_high and mant_low.
Change nan field to ieee_nan.
* update-quadmath.py (update_sources): Also update fmaq.c.
* math/nanq.c (nanq): Use ieee_nan field of union.
Zero-initialize f. Set quiet_nan field.
* printf/flt1282mpn.c, printf/printf_fphex.c, strtod/mpn2flt128.c,
strtod/strtoflt128.c: Use mantissa0, mantissa1, mantissa2 and
mantissa3 fields. Use ieee_nan and quiet_nan field.
* math/fmaq.c: Regenerate from glibc sources with
update-quadmath.py.
Jan Hubicka [Wed, 7 Nov 2018 12:25:35 +0000 (13:25 +0100)]
tree.c (fld_type_variant_equal_p): Skip TYPE_ALIGN check when building incomplete variant of complete type.
* tree.c (fld_type_variant_equal_p): Skip TYPE_ALIGN check when
building incomplete variant of complete type.
(fld_type_variant): Do not copy TYPE_ALIGN when building incomplete
variant of complete type.
Jan Hubicka [Wed, 7 Nov 2018 10:13:15 +0000 (11:13 +0100)]
tree.c (free_lang_data_in_type): Add fld parameter; simplify return and parameter types of function and method types.
* tree.c (free_lang_data_in_type): Add fld parameter; simplify
return and parameter types of function and method types.
(free_lang_data_in_cgraph): Update.
Martin Liska [Wed, 7 Nov 2018 09:33:22 +0000 (10:33 +0100)]
Fix UBSAN in postreload-gcse.c (PR rtl-optimization/87868).
2018-11-07 Martin Liska <mliska@suse.cz>
PR rtl-optimization/87868
* postreload-gcse.c (eliminate_partially_redundant_load): Set
threshold to max_count if we would overflow.
* profile-count.h: Make max_count a public constant.
Chenghua Xu [Wed, 7 Nov 2018 08:47:21 +0000 (08:47 +0000)]
Add support for Loongson 3A1000 processor.
gcc/
* config/mips/loongson3a.md: Rename to ...
* config/mips/gs464.md: ... here.
* config/mips/mips-cpus.def: Define gs464; Add loongson3a
as an alias of gs464 processor.
* config/mips/mips-tables.opt: Regenerate.
* config/mips/mips.c (mips_issue_rate): Use PROCESSOR_GS464
instead of PROCESSOR_LOONGSON_3A.
(mips_multipass_dfa_lookahead): Use TUNE_GS464 instead of
TUNE_LOONGSON_3A.
(mips_option_override): Enable MMI and EXT for gs464.
* config/mips/mips.h: Rename TARGET_LOONGSON_3A to TARGET_GS464;
Rename TUNE_LOONGSON_3A to TUNE_GS464.
(MIPS_ISA_LEVEL_SPEC): Infer mips64r2 from gs464.
(ISA_HAS_ODD_SPREG, ISA_AVOID_DIV_HILO, ISA_HAS_FUSED_MADD4,
ISA_HAS_UNFUSED_MADD4): Use TARGET_GS464 instead of
TARGET_LOONGSON_3A.
* config/mips/mips.md: Include gs464.md instead of loongson3a.md.
(processor): Add gs464;
* doc/invoke.texi: Add gs464 to supported architectures.
Chenghua Xu [Wed, 7 Nov 2018 08:25:17 +0000 (08:25 +0000)]
Add support for Loongson MMI instructions.
gcc/
* config.gcc (extra_headers): Add loongson-mmiintrin.h.
* config/mips/loongson.md: Move to ...
* config/mips/loongson-mmi.md: here; Adjustment.
* config/mips/loongson.h: Move to ...
State as deprecated. Include loongson-mmiintrin.h for back
compatibility and warning.
* config/mips/loongson-mmiintrin.h: ... here.
* config/mips/mips.c (mips_hard_regno_mode_ok_uncached,
mips_vector_mode_supported_p, AVAIL_NON_MIPS16): Use
TARGET_LOONGSON_MMI instead of TARGET_LOONGSON_VECTORS.
(mips_option_override): Make sure MMI use hard float;
(mips_shift_truncation_mask, mips_expand_vpc_loongson_even_odd,
mips_expand_vpc_loongson_pshufh, mips_expand_vpc_loongson_bcast,
mips_expand_vector_init): Use TARGET_LOONGSON_MMI instead of
TARGET_LOONGSON_VECTORS.
* gcc/config/mips/mips.h (TARGET_LOONGSON_VECTORS): Delete.
(TARGET_CPU_CPP_BUILTINS): Add __mips_loongson_mmi.
(MIPS_ASE_DSP_SPEC, MIPS_ASE_LOONGSON_MMI_SPEC): New.
(BASE_DRIVER_SELF_SPECS): march=loongson2e/2f/3a implies
-mloongson-mmi.
(SHIFT_COUNT_TRUNCATED): Use TARGET_LOONGSON_MMI instead of
TARGET_LOONGSON_VECTORS.
* gcc/config/mips/mips.md (MOVE64, MOVE128): Use
TARGET_LOONGSON_MMI instead of TARGET_LOONGSON_VECTORS.
(Loongson MMI patterns): Include loongson-mmi.md instead of
loongson.md.
* gcc/config/mips/mips.opt (-mloongson-mmi): New option.
* gcc/doc/invoke.texi (-mloongson-mmi): Document.
gcc/testsuite/
* gcc.target/mips/loongson-shift-count-truncated-1.c
(dg-options): Run under -mloongson-mmi option.
Include loongson-mmiintrin.h instead of loongson.h.
* gcc.target/mips/loongson-simd.c: Likewise.
* gcc.target/mips/mips.exp (mips_option_groups): Add
-mloongson-mmi option.
(mips-dg-options): Add mips_option_dependency options "-mips16" vs
"-mno-loongson-mmi", "-mmicromips" vs "-mno-loongson-mmi",
"-msoft-float" vs "-mno-loongson-mmi".
(mips-dg-init): Add -mloongson-mmi option.
* lib/target-supports.exp: Rename check_mips_loongson_hw_available
to check_mips_loongson_mmi_hw_available.
Rename check_effective_target_mips_loongson_runtime to
check_effective_target_mips_loongson_mmi_runtime.
(check_effective_target_vect_int): Use mips_loongson_mmi instead
of mips_loongson when check et-is-effective-target.
(add_options_for_mips_loongson_mmi): New proc.
Rename check_effective_target_mips_loongson to
check_effective_target_mips_loongson_mmi.
(check_effective_target_vect_shift,
check_effective_target_whole_vector_shift,
check_effective_target_vect_no_int_min_max,
check_effective_target_vect_no_align,
check_effective_target_vect_short_mult,
check_vect_support_and_set_flags):Use mips_loongson_mmi instead
of mips_loongson when check et-is-effective-target.
Alexandre Oliva [Wed, 7 Nov 2018 06:25:30 +0000 (06:25 +0000)]
[PR87874] avoid const-wide-int subreg in LRA
Just like CONST_INT, CONST_WIDE_INT is VOIDmode, so LRA might be
tempted to build a SUBREG to "convert" it to the wanted mode. That's
no use. Test for CONST_SCALAR_INT_P instead of CONST_INT_P so that we
skip the subreg creation for both.
for gcc/ChangeLog
PR rtl-optimization/87874
* lra.c (lra_substitute_pseudo): Do not create a subreg for
const wide ints.
Aaron Sawdey [Tue, 6 Nov 2018 21:21:10 +0000 (21:21 +0000)]
rs6000.md (bswap<mode>2): Force address into register if not in indexed or indirect form.
2018-11-06 Aaron Sawdey <acsawdey@linux.ibm.com>
* config/rs6000/rs6000.md (bswap<mode>2): Force address into register
if not in indexed or indirect form.
(bswap<mode>2_load): Change predicate to indexed_or_indirect_operand.
(bswap<mode>2_store): Ditto.
aarch64 - Set the mode for the unspec in speculation_tracker insn.
The speculation tracker insn in my recent patch set for CVE-2017-5753
was missing a mode on the UNSPEC. Although this didn't break the
build, it did cause an unnecessary warning from the MD parsing
mechanism that I missed at the time. It's a trivial fix, as follows:
* config/aarch64/aarch64.md (speculation_tracker): Set the mode for
the UNSPEC.
In order to properly fix PR87762, we need to distinguish between
instructions which support relative addressing and instructions which
don't. We could check whether the existing "type" attribute is equal to
"larl", but there are notable exceptions (lrl, for example), and
changing them makes scheduling worse on z10. We could also check
whether the existing "op_type" attribute is equal to "RIL-b" or "RIL-c".
However, adding a new attribute provides more flexibility, since we
don't depend idiosyncrasies which might be introduced into PoP in the
future.
Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
libgomp/
* oacc-mem.c (memcpy_tofrom_device): New function, combined from
acc_memcpy_to/from_device functions, now with async parameter.
(acc_memcpy_to_device): Modify to use memcpy_tofrom_device.
(acc_memcpy_from_device): Likewise.
(acc_memcpy_to_device_async): New API function.
(acc_memcpy_from_device_async): Likewise.
(present_create_copy): Add async parameter and async setting/unsetting.
(acc_create): Adjust present_create_copy call.
(acc_copyin): Likewise.
(acc_present_or_create): Likewise.
(acc_present_or_copyin): Likewise.
(acc_create_async): New API function.
(acc_copyin_async): New API function.
(delete_copyout): Add async parameter and async setting/unsetting.
(acc_delete): Adjust delete_copyout call.
(acc_copyout): Likewise.
(acc_delete_async): New API function.
(acc_copyout_async): Likewise.
(update_dev_host): Add async parameter and async setting/unsetting.
(acc_update_device): Adjust update_dev_host call.
(acc_update_self): Likewise.
(acc_update_device_async): New API function.
(acc_update_self_async): Likewise.
* openacc.h (acc_copyin_async): Declare new API function.
(acc_create_async): Likewise.
(acc_copyout_async): Likewise.
(acc_delete_async): Likewise.
(acc_update_device_async): Likewise.
(acc_update_self_async): Likewise.
(acc_memcpy_to_device_async): Likewise.
(acc_memcpy_from_device_async): Likewise.
* openacc_lib.h (acc_copyin_async_32_h): New subroutine.
(acc_copyin_async_64_h): New subroutine.
(acc_copyin_async_array_h): New subroutine.
(acc_create_async_32_h): New subroutine.
(acc_create_async_64_h): New subroutine.
(acc_create_async_array_h): New subroutine.
(acc_copyout_async_32_h): New subroutine.
(acc_copyout_async_64_h): New subroutine.
(acc_copyout_async_array_h): New subroutine.
(acc_delete_async_32_h): New subroutine.
(acc_delete_async_64_h): New subroutine.
(acc_delete_async_array_h): New subroutine.
(acc_update_device_async_32_h): New subroutine.
(acc_update_device_async_64_h): New subroutine.
(acc_update_device_async_array_h): New subroutine.
(acc_update_self_async_32_h): New subroutine.
(acc_update_self_async_64_h): New subroutine.
(acc_update_self_async_array_h): New subroutine.
* openacc.f90 (acc_copyin_async_32_h): New subroutine.
(acc_copyin_async_64_h): New subroutine.
(acc_copyin_async_array_h): New subroutine.
(acc_create_async_32_h): New subroutine.
(acc_create_async_64_h): New subroutine.
(acc_create_async_array_h): New subroutine.
(acc_copyout_async_32_h): New subroutine.
(acc_copyout_async_64_h): New subroutine.
(acc_copyout_async_array_h): New subroutine.
(acc_delete_async_32_h): New subroutine.
(acc_delete_async_64_h): New subroutine.
(acc_delete_async_array_h): New subroutine.
(acc_update_device_async_32_h): New subroutine.
(acc_update_device_async_64_h): New subroutine.
(acc_update_device_async_array_h): New subroutine.
(acc_update_self_async_32_h): New subroutine.
(acc_update_self_async_64_h): New subroutine.
(acc_update_self_async_array_h): New subroutine.
* libgomp.map (OACC_2.5): Add acc_copyin_async*, acc_copyout_async*,
acc_copyout_finalize_async*, acc_create_async*, acc_delete_async*,
acc_delete_finalize_async*, acc_memcpy_from_device_async*,
acc_memcpy_to_device_async*, acc_update_device_async*, and
acc_update_self_async* entries.
* testsuite/libgomp.oacc-c-c++-common/lib-94.c: New test.
* testsuite/libgomp.oacc-c-c++-common/lib-95.c: New test.
* testsuite/libgomp.oacc-fortran/lib-16.f90: New test.
Jan Hubicka [Tue, 6 Nov 2018 12:46:46 +0000 (13:46 +0100)]
ipa-pure-const.c (check_decl): Do not test TYPE_NEEDS_CONSTRUCTING.
* ipa-pure-const.c (check_decl): Do not test TYPE_NEEDS_CONSTRUCTING.
* lto-streamer-out.c (hash_tree): Do not hash TYPE_NEEDS_CONSTRUCTING.
* tree-streamer-in.c (unpack_ts_type_common_value_fields): Do not
stream TYPE_NEEDS_CONSTRUCTING.
* tree-streamer-out.c (pack_ts_type_common_value_fields): Likewise.
* tree.c (free_lang_data_in_type): Clear TYPE_NEEDS_CONSTRUCTING.
Alexandre Oliva [Tue, 6 Nov 2018 05:33:40 +0000 (05:33 +0000)]
gOlogy: fix debug binds in auto-inc-dec
As auto_inc_dec pass combines incs and mems from different insns, it
often causes regs to temporarily hold a value different from the one
it would before the transformation. Debug insns within that range
would therefore end up binding to the wrong expression after the
transformation.
This patch adjusts debug binds in the affected range.
for gcc/ChangeLog
* auto-inc-dec.c: Include valtrack.h. Improve comments.
(reg_next_debug_use): New.
(attempt_change): Propagate adjusted expression into affected
debug insns.
(merge_in_block): Track uses in debug insns.
(pass_inc_dec::execute): Allocate and release
reg_next_debug_use.
Max Filippov [Mon, 5 Nov 2018 23:58:13 +0000 (23:58 +0000)]
gcc: xtensa: don't force PIC for uclinux target
xtensa-uclinux uses bFLT executable file format that cannot relocate
fields representing offsets from data to code. C++ objects built as PIC
use offsets to encode FDE structures. As a result C++ exception handling
doesn't work correctly on xtensa-uclinux. Don't use PIC by default on
xtensa-uclinux.
gcc/
2018-11-05 Max Filippov <jcmvbkbc@gmail.com>
* config/xtensa/uclinux.h (XTENSA_ALWAYS_PIC): Change to 0.
Joseph Myers [Mon, 5 Nov 2018 23:03:55 +0000 (23:03 +0000)]
Update most of libquadmath/math/ from glibc, automate update (PR libquadmath/68686).
libquadmath sources are mostly based on glibc sources at present, but
derived from them by a manual editing / substitution process and with
subsequent manual merges. The manual effort involved in merges means
they are sometimes incomplete and long-delayed.
Since libquadmath was first created, glibc's support for this format
has undergone significant changes so that it can also be used in glibc
to provide *f128 functions for the _Float128 type from TS 18661-3.
This makes it significantly easier to use it for libquadmath in a more
automated fashion, since glibc has a float128_private.h header that
redefines many identifiers as macros as needed for building *f128
functions.
Simply using float128_private.h directly in libquadmath, with
unmodified glibc sources except for changing function names in that
one header to be *q instead of *f128, would be tricky, given its
dependence on lots of other glibc-internal headers (whereas
libquadmath supports non-glibc systems), and also given how some libm
functions in glibc are built from type-generic templates using a
further set of macros rather than from separate function
implementations for each type.
So instead this patch adds a script update-quadmath.py to convert
glibc sources into libquadmath ones, and the script reads
float128_private.h to identify many of the substitutions it should
make. quadmath-imp.h is updated with various new internal
definitions, taken from glibc as needed; this is the main place
expected to need updating manually when subsequent merges from glibc
are done using the script. No attempt is made to make the script
output match the details of existing formatting, although the
differences are of a size that makes a rough comparison (ignoring
whitespace) possible.
Two new public interfaces are added to libquadmath, exp2q and
issignalingq, at a new QUADMATH_1.2 symbol version, since those
interfaces are used internally by some of the glibc sources being
merged into libquadmath; although there is a new symbol version, no
change however is made to the libtool version in the libtool-version
file. Although there are various other interfaces now in glibc libm
but not in libquadmath, this patch does nothing to add such interfaces
(although adding many of them would in fact be easy to do, given the
script).
One internal file (not providing any public interfaces),
math/isinf_nsq.c, is removed, as no longer used by anything in
libquadmath after the merge.
Conditionals in individual source files on <fenv.h> availability or
features are moved into quadmath-imp.h (providing trivial macro
versions of the functions if real implementations aren't available),
to simplify the substitutions in individual source files. Note
however that I haven't tested for any configurations lacking <fenv.h>,
so further changes could well be needed there.
Two files in libquadmath/math/ are based on glibc sources but not
updated in this patch: fmaq.c and rem_pio2q.c. Both could be updated
after further changes to the script (and quadmath-imp.h as needed); in
the case of rem_pio2q.c, based on two separate glibc source files,
those separate files would naturally be split out into separate
libquadmath source files in the process (as done in this patch with
expq_table.h and tanq_kernel.c, where previously two glibc source
files had been merged into one libquadmath source file). complex.c,
nanq.c and sqrtq.c are not based on glibc sources (though four of the
(trivial) functions in complex.c could readily be replaced by instead
using the four corresponding files from glibc, if desired).
libquadmath also has printf/ and strtod/ sources based on glibc, also
mostly not updated for a long time. Again the script could no doubt
be made to generate those automatically, although that would be a
larger change (effectively some completely separate logic in the
script, not sharing much if anything with the existing code).
Bootstrapped with no regressions on x86_64-pc-linux-gnu.
combine: Don't make an intermediate reg for assigning to sfp (PR87871)
The code with an intermediate register is perfectly fine, but LRA
apparently cannot handle the resulting code, or perhaps something else
is wrong. In either case, making an extra temporary will not likely
help here, so let's just skip it.
PR rtl-optimization/87871
* combine.c (make_more_copies): Skip if dest is frame_pointer_rtx.
compiler: handle abstract type in builtin numeric const value
Builtin_call_expression::do_numeric_constant_value can be called by
Array_type::verify_length before the determine types pass, so accept
an abstract type.
This re-applies r258525, and this time adds it to LOCAL_PATCHES.
libsanitizer/
* LOCAL_PATCHES: Add r258525.
* sanitizer_common/sanitizer_stacktrace.cc
(BufferedStackTrace::FastUnwindStack): Use the correct frame offset
for PowerPC SYSV ABI.
Richard Biener [Mon, 5 Nov 2018 14:55:53 +0000 (14:55 +0000)]
re PR tree-optimization/87873 (ICE: verify_gimple failed (error: incompatible types in PHI argument 0))
2018-11-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/87873
* tree-ssa-loop-manip.h (split_loop_exit_edge): Add copy_constants_p
argument.
* tree-ssa-loop-manip.c (split_loop_exit_edge): Likewise.
* tree-vect-loop.c (vect_transform_loop): When splitting the
loop exit also create forwarder PHIs for constants.
* tree-vect-loop-manip.c (slpeel_duplicate_current_defs_from_edges):
Handle constant to_arg, add extra checking we match up the correct
PHIs.
Jakub Jelinek [Mon, 5 Nov 2018 10:28:19 +0000 (11:28 +0100)]
re PR tree-optimization/87859 (store-merging miscompilation of mesa)
PR tree-optimization/87859
* gimple-ssa-store-merging.c (struct merged_store_group): Add
only_constants and first_nonmergeable_order members.
(merged_store_group::merged_store_group): Initialize them.
(merged_store_group::do_merge): Clear only_constants member if
adding something other than INTEGER_CST store.
(imm_store_chain_info::coalesce_immediate_stores): Don't merge
stores with order >= first_nonmergeable_order. Use
merged_store->only_constants instead of always recomputing it.
Set merged_store->first_nonmergeable_order if we've skipped any
stores. Attempt to merge overlapping INTEGER_CST stores that
we would otherwise skip.
* gcc.dg/store_merging_24.c: New test.
* gcc.dg/store_merging_25.c: New test.
Xuepeng Guo [Mon, 5 Nov 2018 09:51:09 +0000 (09:51 +0000)]
re PR target/87853 (_mm_cmpgt_epi8 broken with -funsigned-char)
2018-11-05 Xuepeng Guo <xuepeng.guo@intel.com>
PR target/87853
* config/i386/emmintrin.h (__v16qs): New to cope with option
-funsigned-char.
(_mm_cmpeq_epi8): Replace __v16qi with __v16qs.
(_mm_cmplt_epi8): Likewise.
(_mm_cmpgt_epi8): Likewise.
Jason Merrill [Mon, 5 Nov 2018 07:47:05 +0000 (02:47 -0500)]
Implement UDL changes from P0732R2.
Implementing the UDL changes was pretty straightforward; I simplified
cp_parser_userdef_string_literal using the releasing_vec type from mangle.c.
While looking at this, I realized that the string UDL template taking a
character pack that we implemented for C++14 didn't actually make it into
C++14, so I've added a pedwarn for it and no longer suggest it in the
diagnostic about an invalid UDL template.
* cp-tree.h (struct releasing_vec): Move from mangle.c.
Add get_ref method.
* parser.c (cp_parser_userdef_string_literal): Use it. Handle
passing the string to a single template parameter of class type.
(cp_parser_template_declaration_after_parameters): Allow it.
Pedwarn about the character pack template that was proposed but not
accepted for C++14, and don't suggest it.
Jason Merrill [Mon, 5 Nov 2018 07:47:02 +0000 (02:47 -0500)]
Implement P0732R2, class types in non-type template parameters.
There is one significant piece of this that is not implemented yet: the
reliance on defaulted operator<=>, which someone else has been working on.
So, for the moment those lines are commented out of the testcases.
One tricky bit was treating template parameters of classtype as const
lvalues without making their decltype const; for this I used a
VIEW_CONVERT_EXPR wrapper, which previously could only appear in templates
as location wrappers.
The user-defined literal parts of P0732R2 are in the next patch.
Jason Merrill [Mon, 5 Nov 2018 07:46:57 +0000 (02:46 -0500)]
Fix various latent issues revealed by P0732 work.
The initialized_type hunk fixes handling of void AGGR_INIT_EXPRs that call a
non-constructor; an AGGR_INIT_EXPR can have void type if its initialization
semantics are more complicated than just expanding the call.
The cxx_eval_vec_init_1 hunk corrects AGGR_INIT_EXPRs that were
nonsensically built to initialize an object of void type. And the
build_aggr_init_expr hunk makes sure we don't do that again.
The ocp_convert and cxx_eval_outermost_constant_expr hunks deal with making
sure that a constant CONSTRUCTOR has the right type.
* cvt.c (ocp_convert): Don't wrap a CONSTRUCTOR in a NOP_EXPR.
* constexpr.c (initialized_type): Fix AGGR_INIT_EXPR handling.
(cxx_eval_vec_init_1): Correct type of AGGR_INIT_EXPR.
(cxx_eval_outermost_constant_expr): Make sure a CONSTRUCTOR has the
right type. Don't wrap a CONSTRUCTOR if one was passed in.
* tree.c (build_aggr_init_expr): Check for void.
Jason Merrill [Mon, 5 Nov 2018 07:46:52 +0000 (02:46 -0500)]
PR c++/60503 - wrong lambda attribute syntax.
This patch fixes two issues with lambda attribute handling: First, it was in
the wrong place in the grammar. Second, it was treating attributes as
applying to the whole declaration rather than to the function type, as
specified by the standard.
* parser.c (cp_parser_lambda_declarator_opt): Fix attribute
handling.
This introduces a new header that pulls in system includes for use only
in the DMD front-end part of the compiler, fixing up uses of problematic
functions that are prevalent throughout the code.
Commits merged from dmd.
Fix build of the D frontend on the Hurd and KFreeBSD.
Initial patch from Matthias Klose.
https://github.com/dlang/dmd/pull/8893
Don't care about D/C++ compatibility in C++ port.
Fixes build error in https://gcc.gnu.org/PR87788
https://github.com/dlang/dmd/pull/8895
Allow compiling front-end headers with strict warnings.
https://github.com/dlang/dmd/pull/8909
Add root/system.h header for wrapping system includes.
Fixes https://gcc.gnu.org/PR87865
https://github.com/dlang/dmd/pull/8910
Move checkedint to dmd/root.
https://github.com/dlang/dmd/pull/8912
Use rmem instead of libc for malloc() and strdup().
https://github.com/dlang/dmd/pull/8913
Use align(8) for alignment of UnionExp, fixing several BUS errors
due to alignment issues on SPARC.
https://github.com/dlang/dmd/pull/8914
Don't pass NULL pointer as format parameter to errorSupplemental.
https://github.com/dlang/dmd/pull/8916
Bernd Edlinger [Sun, 4 Nov 2018 19:46:08 +0000 (19:46 +0000)]
re PR tree-optimization/87672 (81512c36 causes ICE in bootstrap stage 3 using "-D_FORTIFY_SOURCE=2" (invalid operand in unary operation, incorrect sharing of tree nodes, verify_gimple failed))
Although there's no fundamental reason why shrink wrapping and speculation tracking are incompatible...
Although there's no fundamental reason why shrink wrapping and
speculation tracking are incompatible, a phase-ordering requirement
(we need to do speculation tracking before the final basic block
clean-up) means that the shrink wrapping pass can undo some of the
changes the speculation tracking pass makes. The result is that the
tracking, while still safe is less comprehensive than we really want.
So to keep things simple, and because the tracking code is quite
expensive anyway, it seems best to just disable that pass when we are
tracking speculative execution.
* config/aarch64/aarch64.c (aarch64_override_options): Disable
shrink-wrapping when -mtrack-speculation.