Commit Graph

255 Commits

Author SHA1 Message Date
Jakub Jelinek
99dee82307 Update copyright years. 2021-01-04 10:26:59 +01:00
Matthew Malcomson
0854b584bd libsanitizer: mid-end: Introduce stack variable handling for HWASAN
Handling stack variables has three features.

1) Ensure HWASAN required alignment for stack variables

When tagging shadow memory, we need to ensure that each tag granule is
only used by one variable at a time.

This is done by ensuring that each tagged variable is aligned to the tag
granule representation size and also ensure that the end of each
object is aligned to ensure the start of any other data stored on the
stack is in a different granule.

This patch ensures the above by forcing the stack pointer to be aligned
before and after allocating any stack objects. Since we are forcing
alignment we also use `align_local_variable` to ensure this new alignment
is advertised properly through SET_DECL_ALIGN.

2) Put tags into each stack variable pointer

Make sure that every pointer to a stack variable includes a tag of some
sort on it.

The way tagging works is:
  1) For every new stack frame, a random tag is generated.
  2) A base register is formed from the stack pointer value and this
     random tag.
  3) References to stack variables are now formed with RTL describing an
     offset from this base in both tag and value.

The random tag generation is handled by a backend hook.  This hook
decides whether to introduce a random tag or use the stack background
based on the parameter hwasan-random-frame-tag.  Using the stack
background is necessary for testing and bootstrap.  It is necessary
during bootstrap to avoid breaking the `configure` test program for
determining stack direction.

Using the stack background means that every stack frame has the initial
tag of zero and variables are tagged with incrementing tags from 1,
which also makes debugging a bit easier.

Backend hooks define the size of a tag, the layout of the HWASAN shadow
memory, and handle emitting the code that inserts and extracts tags from a
pointer.

3) For each stack variable, tag and untag the shadow stack on function
   prologue and epilogue.

On entry to each function we tag the relevant shadow stack region for
each stack variable. This stack region is tagged to match the tag added to
each pointer to that variable.

This is the first patch where we use the HWASAN shadow space, so we need
to add in the libhwasan initialisation code that creates this shadow
memory region into the binary we produce.  This instrumentation is done
in `compile_file`.

When exiting a function we need to ensure the shadow stack for this
function has no remaining tags.  Without clearing the shadow stack area
for this stack frame, later function calls could get false positives
when those later function calls check untagged areas (such as parameters
passed on the stack) against a shadow stack area with left-over tag.

Hence we ensure that the entire stack frame is cleared on function exit.

config/ChangeLog:

	* bootstrap-hwasan.mk: Disable random frame tags for stack-tagging
	during bootstrap.

gcc/ChangeLog:

	* asan.c (struct hwasan_stack_var): New.
	(hwasan_sanitize_p): New.
	(hwasan_sanitize_stack_p): New.
	(hwasan_sanitize_allocas_p): New.
	(initialize_sanitizer_builtins): Define new builtins.
	(ATTR_NOTHROW_LIST): New macro.
	(hwasan_current_frame_tag): New.
	(hwasan_frame_base): New.
	(stack_vars_base_reg_p): New.
	(hwasan_maybe_init_frame_base_init): New.
	(hwasan_record_stack_var): New.
	(hwasan_get_frame_extent): New.
	(hwasan_increment_frame_tag): New.
	(hwasan_record_frame_init): New.
	(hwasan_emit_prologue): New.
	(hwasan_emit_untag_frame): New.
	(hwasan_finish_file): New.
	(hwasan_truncate_to_tag_size): New.
	* asan.h (hwasan_record_frame_init): New declaration.
	(hwasan_record_stack_var): New declaration.
	(hwasan_emit_prologue): New declaration.
	(hwasan_emit_untag_frame): New declaration.
	(hwasan_get_frame_extent): New declaration.
	(hwasan_maybe_enit_frame_base_init): New declaration.
	(hwasan_frame_base): New declaration.
	(stack_vars_base_reg_p): New declaration.
	(hwasan_current_frame_tag): New declaration.
	(hwasan_increment_frame_tag): New declaration.
	(hwasan_truncate_to_tag_size): New declaration.
	(hwasan_finish_file): New declaration.
	(hwasan_sanitize_p): New declaration.
	(hwasan_sanitize_stack_p): New declaration.
	(hwasan_sanitize_allocas_p): New declaration.
	(HWASAN_TAG_SIZE): New macro.
	(HWASAN_TAG_GRANULE_SIZE): New macro.
	(HWASAN_STACK_BACKGROUND): New macro.
	* builtin-types.def (BT_FN_VOID_PTR_UINT8_PTRMODE): New.
	* builtins.def (DEF_SANITIZER_BUILTIN): Enable for HWASAN.
	* cfgexpand.c (align_local_variable): When using hwasan ensure
	alignment to tag granule.
	(align_frame_offset): New.
	(expand_one_stack_var_at): For hwasan use tag offset.
	(expand_stack_vars): Record stack objects for hwasan.
	(expand_one_stack_var_1): Record stack objects for hwasan.
	(init_vars_expansion): Initialise hwasan state.
	(expand_used_vars): Emit hwasan prologue and generate hwasan epilogue.
	(pass_expand::execute): Emit hwasan base initialization if needed.
	* doc/tm.texi (TARGET_MEMTAG_TAG_SIZE,TARGET_MEMTAG_GRANULE_SIZE,
	TARGET_MEMTAG_INSERT_RANDOM_TAG,TARGET_MEMTAG_ADD_TAG,
	TARGET_MEMTAG_SET_TAG,TARGET_MEMTAG_EXTRACT_TAG,
	TARGET_MEMTAG_UNTAGGED_POINTER): Document new hooks.
	* doc/tm.texi.in (TARGET_MEMTAG_TAG_SIZE,TARGET_MEMTAG_GRANULE_SIZE,
	TARGET_MEMTAG_INSERT_RANDOM_TAG,TARGET_MEMTAG_ADD_TAG,
	TARGET_MEMTAG_SET_TAG,TARGET_MEMTAG_EXTRACT_TAG,
	TARGET_MEMTAG_UNTAGGED_POINTER): Document new hooks.
	* explow.c (get_dynamic_stack_base): Take new `base` argument.
	* explow.h (get_dynamic_stack_base): Take new `base` argument.
	* sanitizer.def (BUILT_IN_HWASAN_INIT): New.
	(BUILT_IN_HWASAN_TAG_MEM): New.
	* target.def (target_memtag_tag_size,target_memtag_granule_size,
	target_memtag_insert_random_tag,target_memtag_add_tag,
	target_memtag_set_tag,target_memtag_extract_tag,
	target_memtag_untagged_pointer): New hooks.
	* targhooks.c (HWASAN_SHIFT): New.
	(HWASAN_SHIFT_RTX): New.
	(default_memtag_tag_size): New default hook.
	(default_memtag_granule_size): New default hook.
	(default_memtag_insert_random_tag): New default hook.
	(default_memtag_add_tag): New default hook.
	(default_memtag_set_tag): New default hook.
	(default_memtag_extract_tag): New default hook.
	(default_memtag_untagged_pointer): New default hook.
	* targhooks.h (default_memtag_tag_size): New default hook.
	(default_memtag_granule_size): New default hook.
	(default_memtag_insert_random_tag): New default hook.
	(default_memtag_add_tag): New default hook.
	(default_memtag_set_tag): New default hook.
	(default_memtag_extract_tag): New default hook.
	(default_memtag_untagged_pointer): New default hook.
	* toplev.c (compile_file): Call hwasan_finish_file when finished.
2020-11-25 16:38:06 +00:00
Jakub Jelinek
1bea0d0aa5 c++: Add __builtin_clear_padding builtin - C++20 P0528R3 compiler side [PR88101]
The following patch implements __builtin_clear_padding builtin that clears
the padding bits in object representation (but preserves value
representation).  Inside of unions it clears only those padding bits that
are padding for all the union members (so that it never alters value
representation).

It handles trailing padding, padding in the middle of structs including
bitfields (PDP11 unhandled, I've never figured out how those bitfields
work), VLAs (doesn't handle variable length structures, but I think almost
nobody uses them and it isn't worth the extra complexity).  For VLAs and
sufficiently large arrays it uses runtime clearing loop instead of emitting
straight-line code (unless arrays are inside of a union).

The way I think this can be used for atomics is e.g. if the structures
are power of two sized and small enough that we use the hw atomics
for say compare_exchange __builtin_clear_padding could be called first on
the address of expected and desired arguments (for desired only if we want
to ensure that most of the time the atomic memory will have padding bits
cleared), then perform the weak cmpxchg and if that fails, we got the
value from the atomic memory; we can call __builtin_clear_padding on a copy
of that and then compare it with expected, and if it is the same with the
padding bits masked off, we can use the original with whatever random
padding bits in it as the new expected for next cmpxchg.
__builtin_clear_padding itself is not atomic and therefore it shouldn't
be called on the atomic memory itself, but compare_exchange*'s expected
argument is a reference and normally the implementation may store there
the current value from memory, so padding bits can be cleared in that,
and desired is passed by value rather than reference, so clearing is fine
too.
When using libatomic, we can use it either that way, or add new libatomic
APIs that accept another argument, pointer to the padding bit bitmask,
and construct that in the template as
  alignas (_T) unsigned char _mask[sizeof (_T)];
  std::memset (_mask, ~0, sizeof (_mask));
  __builtin_clear_padding ((_T *) _mask);
which will have bits cleared for padding bits and set for bits taking part
in the value representation.  Then libatomic could internally instead
of using memcmp compare
for (i = 0; i < N; i++) if ((val1[i] & mask[i]) != (val2[i] & mask[i]))

2020-11-20  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/88101
gcc/
	* builtins.def (BUILT_IN_CLEAR_PADDING): New built-in function.
	* gimplify.c (gimplify_call_expr): Rewrite single argument
	BUILT_IN_CLEAR_PADDING into two-argument variant.
	* gimple-fold.c (clear_padding_unit, clear_padding_buf_size): New
	const variables.
	(struct clear_padding_struct): New type.
	(clear_padding_flush, clear_padding_add_padding,
	clear_padding_emit_loop, clear_padding_type,
	clear_padding_union, clear_padding_real_needs_padding_p,
	clear_padding_type_may_have_padding_p,
	gimple_fold_builtin_clear_padding): New functions.
	(gimple_fold_builtin): Handle BUILT_IN_CLEAR_PADDING.
	* doc/extend.texi (__builtin_clear_padding): Document.
gcc/c-family/
	* c-common.c (check_builtin_function_arguments): Handle
	BUILT_IN_CLEAR_PADDING.
gcc/testsuite/
	* c-c++-common/builtin-clear-padding-1.c: New test.
	* c-c++-common/torture/builtin-clear-padding-1.c: New test.
	* c-c++-common/torture/builtin-clear-padding-2.c: New test.
	* c-c++-common/torture/builtin-clear-padding-3.c: New test.
	* c-c++-common/torture/builtin-clear-padding-4.c: New test.
	* c-c++-common/torture/builtin-clear-padding-5.c: New test.
	* g++.dg/torture/builtin-clear-padding-1.C: New test.
	* g++.dg/torture/builtin-clear-padding-2.C: New test.
	* gcc.dg/builtin-clear-padding-1.c: New test.
2020-11-20 12:28:34 +01:00
Joseph Myers
6c8e4f4d79 builtins: Add DFP signaling NaN built-in functions
Add built-in functions __builtin_nansd32, __builtin_nansd64 and
__builtin_nansd128 to return signaling NaNs of decimal floating-point
types, analogous to the functions already present for binary
floating-point types.

This patch, independent of
<https://gcc.gnu.org/pipermail/gcc-patches/2020-October/557136.html>
(pending review), is in preparation for adding the <float.h> macros
for such signaling NaNs that are in C2x, analogous to the macros for
other types that are in that patch.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.  Also ran
the new tests for powerpc64le-linux-gnu to confirm they do work in the
case (hardware DFP) where floating-point exceptions are supported for
DFP.

gcc/
2020-11-06  Joseph Myers  <joseph@codesourcery.com>

	* builtins.def (BUILT_IN_NANSD32, BUILT_IN_NANSD64)
	(BUILT_IN_NANSD128): New built-in functions.
	* fold-const-call.c (fold_const_call): Handle the new built-in
	functions.
	* doc/extend.texi (__builtin_nansd32, __builtin_nansd64)
	(__builtin_nansd128): Document.
	* doc/sourcebuild.texi (Effective-Target Keywords): Document
	fenv_exceptions_dfp.

gcc/testsuite/
2020-11-06  Joseph Myers  <joseph@codesourcery.com>

	* lib/target-supports.exp
	(check_effective_target_fenv_exceptions_dfp): New.
	* gcc.dg/dfp/builtin-snan-1.c, gcc.dg/dfp/builtin-snan-2.c: New
	tests.
2020-11-06 21:55:19 +00:00
Jan Hubicka
0365b9e4af Fix fnspec of math builtins
* builtin-attrs.def (STRERRNOC): New macro.
	(STRERRNOP): New macro.
	(ATTR_ERRNOCONST_NOTHROW_LEAF_LIST): New attr list.
	(ATTR_ERRNOPURE_NOTHROW_LEAF_LIST): New attr list.
	* builtins.def (ATTR_MATHFN_ERRNO): Use
	ATTR_ERRNOCONST_NOTHROW_LEAF_LIST.
	(ATTR_MATHFN_FPROUNDING_ERRNO): Use ATTR_ERRNOCONST_NOTHROW_LEAF_LIST
	or ATTR_ERRNOPURE_NOTHROW_LEAF_LIST.
2020-10-27 09:51:56 +01:00
Jan Hubicka
4f8cfb4288 Extend builtin fnspecs
* attr-fnspec.h: Update toplevel comment.
	(attr_fnspec::attr_fnspec): New constructor.
	(attr_fnspec::arg_read_p,
	attr_fnspec::arg_written_p,
	attr_fnspec::arg_access_size_given_by_arg_p,
	attr_fnspec::arg_single_access_p
	attr_fnspec::loads_known_p
	attr_fnspec::stores_known_p,
	attr_fnspec::clobbers_errno_p): New member functions.
	(gimple_call_fnspec): Declare.
	(builtin_fnspec): Declare.
	* builtins.c: Include attr-fnspec.h
	(builtin_fnspec): New function.
	* builtins.def (BUILT_IN_MEMCPY): Do not specify RET1 fnspec.
	(BUILT_IN_MEMMOVE): Do not specify RET1 fnspec.
	(BUILT_IN_MEMSET): Do not specify RET1 fnspec.
	(BUILT_IN_STRCAT): Do not specify RET1 fnspec.
	(BUILT_IN_STRCPY): Do not specify RET1 fnspec.
	(BUILT_IN_STRNCAT): Do not specify RET1 fnspec.
	(BUILT_IN_STRNCPY): Do not specify RET1 fnspec.
	(BUILT_IN_MEMCPY_CHK): Do not specify RET1 fnspec.
	(BUILT_IN_MEMMOVE_CHK): Do not specify RET1 fnspec.
	(BUILT_IN_MEMSET_CHK): Do not specify RET1 fnspec.
	(BUILT_IN_STRCAT_CHK): Do not specify RET1 fnspec.
	(BUILT_IN_STRCPY_CHK): Do not specify RET1 fnspec.
	(BUILT_IN_STRNCAT_CHK): Do not specify RET1 fnspec.
	(BUILT_IN_STRNCPY_CHK): Do not specify RET1 fnspec.
	* gimple.c (gimple_call_fnspec): Return attr_fnspec.
	(gimple_call_arg_flags): Update.
	(gimple_call_return_flags): Update.
	* tree-ssa-alias.c (check_fnspec): New function.
	(ref_maybe_used_by_call_p_1): Use fnspec for builtin handling.
	(call_may_clobber_ref_p_1): Likewise.
	(attr_fnspec::verify): Update verifier.
	* calls.c (decl_fnspec): New function.
	(decl_return_flags): Use it.
2020-10-26 20:22:16 +01:00
Tom de Vries
bae974e637 [nvptx] Add type arg to TARGET_LIBC_HAS_FUNCTION
GCC has a target hook TARGET_LIBC_HAS_FUNCTION, which tells the compiler
which functions it can expect to be present in libc.

The default target hook does not include the sincos functions.

The nvptx port of newlib does include sincos and sincosf, but not sincosl.

The target hook TARGET_LIBC_HAS_FUNCTION does not distinguish between sincos,
sincosf and sincosl, so if we enable it for the sincos functions, then for
test.c:
...
long double x, a, b;
int main (void) {
  x = 0.5;
  a = sinl (x);
  b = cosl (x);
  printf ("a: %f\n", (double)a);
  printf ("b: %f\n", (double)b);
  return 0;
}
...
we introduce a regression:
...
$ gcc test.c -lm -O2
unresolved symbol sincosl
collect2: error: ld returned 1 exit status
...

Add a type argument to target hook TARGET_LIBC_HAS_FUNCTION_TYPE, and use it
in nvptx_libc_has_function_type to enable sincos and sincosf, but not sincosl.

Build and reg-tested on x86_64-linux.

Build and tested on nvptx.

gcc/ChangeLog:

2020-09-28  Tobias Burnus  <tobias@codesourcery.com>
	    Tom de Vries  <tdevries@suse.de>

	* builtins.c (expand_builtin_cexpi, fold_builtin_sincos): Update
	targetm.libc_has_function call.
	* builtins.def (DEF_C94_BUILTIN, DEF_C99_BUILTIN, DEF_C11_BUILTIN):
	(DEF_C2X_BUILTIN, DEF_C99_COMPL_BUILTIN, DEF_C99_C90RES_BUILTIN):
	Same.
	* config/darwin-protos.h (darwin_libc_has_function): Update prototype.
	* config/darwin.c (darwin_libc_has_function): Add arg.
	* config/linux-protos.h (linux_libc_has_function): Update prototype.
	* config/linux.c (linux_libc_has_function): Add arg.
	* config/i386/i386.c (ix86_libc_has_function): Update
	targetm.libc_has_function call.
	* config/nvptx/nvptx.c (nvptx_libc_has_function): New function.
	(TARGET_LIBC_HAS_FUNCTION): Redefine to nvptx_libc_has_function.
	* convert.c (convert_to_integer_1): Update targetm.libc_has_function
	call.
	* match.pd: Same.
	* target.def (libc_has_function): Add arg.
	* doc/tm.texi: Regenerate.
	* targhooks.c (default_libc_has_function, gnu_libc_has_function)
	(no_c99_libc_has_function): Add arg.
	* targhooks.h (default_libc_has_function, no_c99_libc_has_function)
	(gnu_libc_has_function): Update prototype.
	* tree-ssa-math-opts.c (pass_cse_sincos::execute): Update
	targetm.libc_has_function call.

gcc/fortran/ChangeLog:

2020-09-30  Tom de Vries  <tdevries@suse.de>

	* f95-lang.c (gfc_init_builtin_functions):  Update
	targetm.libc_has_function call.
2020-09-30 14:36:56 +02:00
Martin Jambor
c56684fd61 Removal of HSA offloading from gcc and libgomp
This patch removes the generation of HSAIL from the compiler, the HSA
offloading plugin from libgomp and the associated testsuite tests and
infrastructure bits from the respective testsuites.

Apart from removal of the obvious files, I removed bits that I found
by searching for HSA related terms and by re-tracing my steps and
looking at the patches that introduced HSA in the first place.  I did
not remove everything these patches brought in, for example:

  - the mechanism to pass offload-target specific info from the application to
    the offloading plugin - but the same mechanism is also used to
    communicate number of teams and the thread limit to all offload targets.

  - run_func hook in gomp_device_descr stays too, although now it is
    not used.  If some future offload target would like the ability to
    refuse to offload some functions, it can use it.  It is easy to
    remove as a follow-up if it is considered clutter, though.

  - configure options --with-hsa-runtime=PATH, -with-hsa-runtime-include=PATH
    and --with-hsa-runtime-lib=PATH rmeain because GCN uses them too.

  - Surprisingly, GOMP_TARGET_ARG_HSA_KERNEL_ATTRIBUTES (a constant
    from gomp-constants.h) appears in the source of the amdgcn libgomp
    plugin, although I tend to think that code path is not ever used
    and this patch certainly removes it from the compiler.
    Nevertheless, it seems it has potential value beyond HSAIL and so
    I've kept it, it can of course always be easily removed in the
    future of GCN folk abandon it too.

  - I assume constants OFFLOAD_TARGET_TYPE_HSA and GOMP_DEVICE_HSA
    need to stay indefinitely too just so that no future offload
    target picks that number.

  - I have kept dg-require-effective-target
    offload_device_nonshared_as requirement of thests which have it.

It is quite probable I missed some small HSA artifacts but those
should be easy to remove later as we find them.

include/ChangeLog:

2020-07-24  Martin Jambor  <mjambor@suse.cz>

	* gomp-constants.h (GOMP_VERSION_HSA): Remove.

gcc/ChangeLog:

2020-07-24  Martin Jambor  <mjambor@suse.cz>

	* hsa-brig-format.h: Moved to brig/brigfrontend.
	* hsa-brig.c: Removed.
	* hsa-builtins.def: Likewise.
	* hsa-common.c: Likewise.
	* hsa-common.h: Likewise.
	* hsa-dump.c: Likewise.
	* hsa-gen.c: Likewise.
	* hsa-regalloc.c: Likewise.
	* ipa-hsa.c: Likewise.
	* omp-grid.c: Likewise.
	* omp-grid.h: Likewise.
	* Makefile.in (BUILTINS_DEF): Remove hsa-builtins.def.
	(OBJS): Remove hsa-common.o, hsa-gen.o, hsa-regalloc.o, hsa-brig.o,
	hsa-dump.o, ipa-hsa.c and omp-grid.o.
	(GTFILES): Removed hsa-common.c and omp-expand.c.
	* builtins.def: Remove processing of hsa-builtins.def.
	(DEF_HSA_BUILTIN): Remove.
	* common.opt (flag_disable_hsa): Remove.
	(-Whsa): Ignore.
	* config.in (ENABLE_HSA): Removed.
	* configure.ac: Removed handling configuration for hsa offloading.
	(ENABLE_HSA): Removed.
	* configure: Regenerated.
	* doc/install.texi (--enable-offload-targets): Remove hsa from the
	example.
	(--with-hsa-runtime): Reword to reference any HSA run-time, not
	specifically HSA offloading.
	* doc/invoke.texi (Option Summary): Remove -Whsa.
	(Warning Options): Likewise.
	(Optimize Options): Remove hsa-gen-debug-stores.
	* doc/passes.texi (Regular IPA passes): Remove section on IPA HSA
	pass.
	* gimple-low.c (lower_stmt): Remove GIMPLE_OMP_GRID_BODY case.
	* gimple-pretty-print.c (dump_gimple_omp_for): Likewise.
	(dump_gimple_omp_block): Likewise.
	(pp_gimple_stmt_1): Likewise.
	* gimple-walk.c (walk_gimple_stmt): Likewise.
	* gimple.c (gimple_build_omp_grid_body): Removed function.
	(gimple_copy): Remove GIMPLE_OMP_GRID_BODY case.
	* gimple.def (GIMPLE_OMP_GRID_BODY): Removed.
	* gimple.h (gf_mask): Removed GF_OMP_PARALLEL_GRID_PHONY,
	OMP_FOR_KIND_GRID_LOOP, GF_OMP_FOR_GRID_PHONY,
	GF_OMP_FOR_GRID_INTRA_GROUP, GF_OMP_FOR_GRID_GROUP_ITER and
	GF_OMP_TEAMS_GRID_PHONY.  Renumbered GF_OMP_FOR_KIND_SIMD and
	GF_OMP_TEAMS_HOST.
	(gimple_build_omp_grid_body): Removed declaration.
	(gimple_has_substatements): Remove GIMPLE_OMP_GRID_BODY case.
	(gimple_omp_for_grid_phony): Removed.
	(gimple_omp_for_set_grid_phony): Likewise.
	(gimple_omp_for_grid_intra_group): Likewise.
	(gimple_omp_for_grid_intra_group): Likewise.
	(gimple_omp_for_grid_group_iter): Likewise.
	(gimple_omp_for_set_grid_group_iter): Likewise.
	(gimple_omp_parallel_grid_phony): Likewise.
	(gimple_omp_parallel_set_grid_phony): Likewise.
	(gimple_omp_teams_grid_phony): Likewise.
	(gimple_omp_teams_set_grid_phony): Likewise.
	(CASE_GIMPLE_OMP): Remove GIMPLE_OMP_GRID_BODY case.
	* lto-section-in.c (lto_section_name): Removed hsa.
	* lto-streamer.h (lto_section_type): Removed LTO_section_ipa_hsa.
	* lto-wrapper.c (compile_images_for_offload_targets): Remove special
	handling of hsa.
	* omp-expand.c: Do not include hsa-common.h and gt-omp-expand.h.
	(parallel_needs_hsa_kernel_p): Removed.
	(grid_launch_attributes_trees): Likewise.
	(grid_launch_attributes_trees): Likewise.
	(grid_create_kernel_launch_attr_types): Likewise.
	(grid_insert_store_range_dim): Likewise.
	(grid_get_kernel_launch_attributes): Likewise.
	(get_target_arguments): Remove code passing HSA grid sizes.
	(grid_expand_omp_for_loop): Remove.
	(grid_arg_decl_map): Likewise.
	(grid_remap_kernel_arg_accesses): Likewise.
	(grid_expand_target_grid_body): Likewise.
	(expand_omp): Remove call to grid_expand_target_grid_body.
	(omp_make_gimple_edges): Remove GIMPLE_OMP_GRID_BODY case.
	* omp-general.c: Do not include hsa-common.h.
	(omp_maybe_offloaded): Do not check for HSA offloading.
	(omp_context_selector_matches): Likewise.
	* omp-low.c: Do not include hsa-common.h and omp-grid.h.
	(build_outer_var_ref): Remove handling of GIMPLE_OMP_GRID_BODY.
	(scan_sharing_clauses): Remove handling of OMP_CLAUSE__GRIDDIM_.
	(scan_omp_parallel): Remove handling of the phoney variant.
	(check_omp_nesting_restrictions): Remove handling of
	GIMPLE_OMP_GRID_BODY and GF_OMP_FOR_KIND_GRID_LOOP.
	(scan_omp_1_stmt): Remove handling of GIMPLE_OMP_GRID_BODY.
	(lower_omp_for_lastprivate): Remove handling of gridified loops.
	(lower_omp_for): Remove phony loop handling.
	(lower_omp_taskreg): Remove phony construct handling.
	(lower_omp_teams): Likewise.
	(lower_omp_grid_body): Removed.
	(lower_omp_1): Remove GIMPLE_OMP_GRID_BODY case.
	(execute_lower_omp): Do not call omp_grid_gridify_all_targets.
	* opts.c (common_handle_option): Do not handle hsa when processing
	OPT_foffload_.
	* params.opt (hsa-gen-debug-stores): Remove.
	* passes.def: Remove pass_ipa_hsa and pass_gen_hsail.
	* timevar.def: Remove TV_IPA_HSA.
	* toplev.c: Do not include hsa-common.h.
	(compile_file): Do not call hsa_output_brig.
	* tree-core.h (enum omp_clause_code): Remove OMP_CLAUSE__GRIDDIM_.
	(tree_omp_clause): Remove union field dimension.
	* tree-nested.c (convert_nonlocal_omp_clauses): Remove the
	OMP_CLAUSE__GRIDDIM_ case.
	(convert_local_omp_clauses): Likewise.
	* tree-pass.h (make_pass_gen_hsail): Remove declaration.
	(make_pass_ipa_hsa): Likewise.
	* tree-pretty-print.c (dump_omp_clause): Remove GIMPLE_OMP_GRID_BODY
	case.
	* tree.c (omp_clause_num_ops): Remove the element corresponding to
	OMP_CLAUSE__GRIDDIM_.
	(omp_clause_code_name): Likewise.
	(walk_tree_1): Remove GIMPLE_OMP_GRID_BODY case.
	* tree.h (OMP_CLAUSE__GRIDDIM__DIMENSION): Remove.
	(OMP_CLAUSE__GRIDDIM__SIZE): Likewise.
	(OMP_CLAUSE__GRIDDIM__GROUP): Likewise.

gcc/fortran/ChangeLog:

2020-07-24  Martin Jambor  <mjambor@suse.cz>

	* f95-lang.c (gfc_init_builtin_functions): Remove processing of
	hsa-builtins.def.

gcc/brig/ChangeLog:

2020-07-24  Martin Jambor  <mjambor@suse.cz>

	* brigfrontend/brig-util.h (hsa_type_packed_p): Declared.
	* brigfrontend/brig-util.cc (hsa_type_packed_p): Moved here from
	removed gcc/hsa-common.c.

libgomp/ChangeLog:

2020-07-24  Martin Jambor  <mjambor@suse.cz>

	* plugin/Makefrag.am: Remove configuration of HSA plugin.
	* aclocal.m4: Regenerated.
	* Makefile.in: Regenerated.
	* config.h.in: Regenerated.
	* configure: Regenerated.
	* plugin/configfrag.ac: Likewise.
	* plugin/hsa_ext_finalize.h: Removed.
	* plugin/plugin-hsa.c: Likewise.
	* testsuite/Makefile.in: Regenerated.
	* testsuite/lib/libgomp.exp
	(offload_target_to_openacc_device_type): Remove hsa case.
	(check_effective_target_hsa_offloading_selected_nocache): Removed
	(check_effective_target_hsa_offloading_selected): Likewise.
	(libgomp_init): Do not add -Wno-hsa to additional_flags.
	* testsuite/libgomp.hsa.c/alloca-1.c: Removed test.
	* testsuite/libgomp.hsa.c/bitfield-1.c: Likewise.
	* testsuite/libgomp.hsa.c/bits-insns.c: Likewise.
	* testsuite/libgomp.hsa.c/builtins-1.c: Likewise.
	* testsuite/libgomp.hsa.c/c.exp: Likewise.
	* testsuite/libgomp.hsa.c/complex-1.c: Likewise.
	* testsuite/libgomp.hsa.c/complex-align-2.c: Likewise.
	* testsuite/libgomp.hsa.c/formal-actual-args-1.c: Likewise.
	* testsuite/libgomp.hsa.c/function-call-1.c: Likewise.
	* testsuite/libgomp.hsa.c/get-level-1.c: Likewise.
	* testsuite/libgomp.hsa.c/gridify-1.c: Likewise.
	* testsuite/libgomp.hsa.c/gridify-2.c: Likewise.
	* testsuite/libgomp.hsa.c/gridify-3.c: Likewise.
	* testsuite/libgomp.hsa.c/gridify-4.c: Likewise.
	* testsuite/libgomp.hsa.c/memory-operations-1.c: Likewise.
	* testsuite/libgomp.hsa.c/pr69568.c: Likewise.
	* testsuite/libgomp.hsa.c/pr82416.c: Likewise.
	* testsuite/libgomp.hsa.c/rotate-1.c: Likewise.
	* testsuite/libgomp.hsa.c/staticvar.c: Likewise.
	* testsuite/libgomp.hsa.c/switch-1.c: Likewise.
	* testsuite/libgomp.hsa.c/switch-branch-1.c: Likewise.
	* testsuite/libgomp.hsa.c/switch-sbr-2.c: Likewise.
	* testsuite/libgomp.hsa.c/tiling-1.c: Likewise.
	* testsuite/libgomp.hsa.c/tiling-2.c: Likewise.

gcc/testsuite/ChangeLog:

2020-07-24  Martin Jambor  <mjambor@suse.cz>

	* lib/target-supports.exp (check_effective_target_offload_hsa):
	Removed.
	* c-c++-common/gomp/gridify-1.c: Removed test.
	* c-c++-common/gomp/gridify-2.c: Likewise.
	* c-c++-common/gomp/gridify-3.c: Likewise.
	* c-c++-common/gomp/hsa-indirect-call-1.c: Likewise.
	* gfortran.dg/gomp/gridify-1.f90: Likewise.
	* gcc.dg/gomp/gomp.exp: Do not pass -Wno-hsa to tests.
	* g++.dg/gomp/gomp.exp: Likewise.
	* gfortran.dg/gomp/gomp.exp: Likewise.
2020-08-03 18:13:00 +02:00
Eric Botcazou
fe7ebef7fe Add support for __builtin_bswap128
This patch introduces a new builtin named __builtin_bswap128 on targets
where TImode is supported, i.e. 64-bit targets only in practice.  The
implementation simply reuses the existing double word path in optab, so
no routine is added to libgcc (which means that you get two calls to
_bswapdi2 in the worst case).

gcc/ChangeLog:

	* builtin-types.def (BT_UINT128): New primitive type.
	(BT_FN_UINT128_UINT128): New function type.
	* builtins.def (BUILT_IN_BSWAP128): New GCC builtin.
	* doc/extend.texi (__builtin_bswap128): Document it.
	* builtins.c (expand_builtin): Deal with BUILT_IN_BSWAP128.
	(is_inexpensive_builtin): Likewise.
	* fold-const-call.c (fold_const_call_ss): Likewise.
	* fold-const.c (tree_call_nonnegative_warnv_p): Likewise.
	* tree-ssa-ccp.c (evaluate_stmt): Likewise.
	* tree-vect-stmts.c (vect_get_data_ptr_increment): Likewise.
	(vectorizable_call): Likewise.
	* optabs.c (expand_unop): Always use the double word path for it.
	* tree-core.h (enum tree_index): Add TI_UINT128_TYPE.
	* tree.h (uint128_type_node): New global type.
	* tree.c (build_common_tree_nodes): Build it if TImode is supported.

gcc/testsuite/ChangeLog:

	* gcc.dg/builtin-bswap-10.c: New test.
	* gcc.dg/builtin-bswap-11.c: Likewise.
	* gcc.dg/builtin-bswap-12.c: Likewise.
	* gcc.target/i386/builtin-bswap-5.c: Likewise.
2020-05-28 00:33:04 +02:00
Jeff Law
0de349f108 Improve DSE which in turn eliminates the need for jump threading and block duplication for the original testcase in pr89689 which in turn eliminates the false positive -Warray-bounds warning for the original testcase.
PR tree-optimization/89689
	* builtins.def (BUILT_IN_OBJECT_SIZE): Make it const rather than pure.

	PR tree-optimization/89689
	* gcc.dg/pr89689.c: New test.
2020-01-29 12:26:35 -07:00
Iain Sandoe
49789fd083 [C++ coroutines] Initial implementation.
This is the squashed version of the first 6 patches that were split to
facilitate review.

The changes to libiberty (7th patch) to support demangling the co_await
operator stand alone and are applied separately.

The patch series is an initial implementation of a coroutine feature,
expected to be standardised in C++20.

Standardisation status (and potential impact on this implementation)
--------------------------------------------------------------------

The facility was accepted into the working draft for C++20 by WG21 in
February 2019.  During following WG21 meetings, design and national body
comments have been reviewed, with no significant change resulting.

The current GCC implementation is against n4835 [1].

At this stage, the remaining potential for change comes from:

* Areas of national body comments that were not resolved in the version we
  have worked to:
  (a) handling of the situation where aligned allocation is available.
  (b) handling of the situation where a user wants coroutines, but does not
      want exceptions (e.g. a GPU).

* Agreed changes that have not yet been worded in a draft standard that we
  have worked to.

It is not expected that the resolution to these can produce any major
change at this phase of the standardisation process.  Such changes should be
limited to the coroutine-specific code.

ABI
---

The various compiler developers 'vendors' have discussed a minimal ABI to
allow one implementation to call coroutines compiled by another.

This amounts to:

1. The layout of a public portion of the coroutine frame.

 Coroutines need to preserve state across suspension points, the storage for
 this is called a "coroutine frame".

 The ABI mandates that pointers into the coroutine frame point to an area
 begining with two function pointers (to the resume and destroy functions
 described below); these are immediately followed by the "promise object"
 described in the standard.

 This is sufficient that the builtins can take a coroutine frame pointer and
 determine the address of the promise (or call the resume/destroy functions).

2. A number of compiler builtins that the standard library might use.

  These are implemented by this patch series.

3. This introduces a new operator 'co_await' the mangling for which is also
agreed between vendors (and has an issue filed for that against the upstream
c++abi).  Demangling for this is added to libiberty in a separate patch.

The ABI has currently no target-specific content (a given psABI might elect
to mandate alignment, but the common ABI does not do this).

Standard Library impact
-----------------------

The current implementations require addition of only a single header to
the standard library (no change to the runtime).  This header is part of
the patch.

GCC Implementation outline
--------------------------

The standard's design for coroutines does not decorate the definition of
a coroutine in any way, so that a function is only known to be a coroutine
when one of the keywords (co_await, co_yield, co_return) is encountered.

This means that we cannot special-case such functions from the outset, but
must process them differently when they are finalised - which we do from
"finish_function ()".

At a high level, this design of coroutine produces four pieces from the
original user's function:

  1. A coroutine state frame (taking the logical place of the activation
     record for a regular function).  One item stored in that state is the
     index of the current suspend point.
  2. A "ramp" function
     This is what the user calls to construct the coroutine frame and start
     the coroutine execution.  This will return some object representing the
     coroutine's eventual return value (or means to continue it when it it
     suspended).
  3. A "resume" function.
     This is what gets called when a the coroutine is resumed when suspended.
  4. A "destroy" function.
     This is what gets called when the coroutine state should be destroyed
     and its memory released.

The standard's coroutines involve cooperation of the user's authored function
with a provided "promise" class, which includes mandatory methods for
handling the state transitions and providing output values.  Most realistic
coroutines will also have one or more 'awaiter' classes that implement the
user's actions for each suspend point.  As we parse (or during template
expansion) the types of the promise and awaiter classes become known, and can
then be verified against the signatures expected by the standard.

Once the function is parsed (and templates expanded) we are able to make the
transformation into the four pieces noted above.

The implementation here takes the approach of a series of AST transforms.
The state machine suspend points are encoded in three internal functions
(one of which represents an exit from scope without cleanups).  These three
IFNs are lowered early in the middle end, such that the majority of GCC's
optimisers can be run on the resulting output.

As a design choice, we have carried out the outlining of the user's function
in the front end, and taken advantage of the existing middle end's abilities
to inline and DCE where that is profitable.

Since the state machine is actually common to both resumer and destroyer
functions, we make only a single function "actor" that contains both the
resume and destroy paths.  The destroy function is represented by a small
stub that sets a value to signal the use of the destroy path and calls the
actor.  The idea is that optimisation of the state machine need only be done
once - and then the resume and destroy paths can be identified allowing the
middle end's inline and DCE machinery to optimise as profitable as noted
above.

The middle end components for this implementation are:

A pass that:
 1. Lowers the coroutine builtins that allow the standard library header to
    interact with the coroutine frame (these fairly simple logical or
    numerical substitution of values, given a coroutine frame pointer).
 2. Lowers the IFN that represents the exit from state without cleanup.
    Essentially, this becomes a gimple goto.
 3. Sets the final size of the coroutine frame at this stage.

A second pass (that requires the revised CFG that results from the lowering
of the scope exit IFNs in the first).

 1. Lower the IFNs that represent the state machine paths for the resume and
    destroy cases.

Patches squashed into this commit:

[C++ coroutines 1] Common code and base definitions.

This part of the patch series provides the gating flag, the keywords,
cpp defines etc.

[C++ coroutines 2] Define builtins and internal functions.

This part of the patch series provides the builtin functions
used by the standard library code and the internal functions
used to implement lowering of the coroutine state machine.

[C++ coroutines 3] Front end parsing and transforms.

There are two parts to this.

1. Parsing, template instantiation and diagnostics for the standard-
   mandated class entries.

  The user authors a function that becomes a coroutine (lazily) by
  making use of any of the co_await, co_yield or co_return keywords.

  Unlike a regular function, where the activation record is placed on the
  stack, and is destroyed on function exit, a coroutine has some state that
  persists between calls - the 'coroutine frame' (thus analogous to a stack
  frame).

  We transform the user's function into three pieces:
  1. A so-called ramp function, that establishes the coroutine frame and
     begins execution of the coroutine.
  2. An actor function that contains the state machine corresponding to the
     user's suspend/resume structure.
  3. A stub function that calls the actor function in 'destroy' mode.

  The actor function is executed:
   * from "resume point 0" by the ramp.
   * from resume point N ( > 0 ) for handle.resume() calls.
   * from the destroy stub for destroy point N for handle.destroy() calls.

  The C++ coroutine design described in the standard makes use of some helper
  methods that are authored in a so-called "promise" class provided by the
  user.

  At parse time (or post substitution) the type of the coroutine promise
  will be determined.  At that point, we can look up the required promise
  class methods and issue diagnostics if they are missing or incorrect.  To
  avoid repeating these actions at code-gen time, we make use of temporary
  'proxy' variables for the coroutine handle and the promise - which will
  eventually be instantiated in the coroutine frame.

  Each of the keywords will expand to a code sequence (although co_yield is
  just syntactic sugar for a co_await).

  We defer the analysis and transformatin until template expansion is
  complete so that we have complete types at that time.

2. AST analysis and transformation which performs the code-gen for the
   outlined state machine.

   The entry point here is morph_fn_to_coro () which is called from
   finish_function () when we have completed any template expansion.

   This is preceded by helper functions that implement the phases below.

   The process proceeds in four phases.

   A Initial framing.
     The user's function body is wrapped in the initial and final suspend
     points and we begin building the coroutine frame.
     We build empty decls for the actor and destroyer functions at this
     time too.
     When exceptions are enabled, the user's function body will also be
     wrapped in a try-catch block with the catch invoking the promise
     class 'unhandled_exception' method.

   B Analysis.
     The user's function body is analysed to determine the suspend points,
     if any, and to capture local variables that might persist across such
     suspensions.  In most cases, it is not necessary to capture compiler
     temporaries, since the tree-lowering nests the suspensions correctly.
     However, in the case of a captured reference, there is a lifetime
     extension to the end of the full expression - which can mean across a
     suspend point in which case it must be promoted to a frame variable.

     At the conclusion of analysis, we have a conservative frame layout and
     maps of the local variables to their frame entry points.

   C Build the ramp function.
     Carry out the allocation for the coroutine frame (NOTE; the actual size
     computation is deferred until late in the middle end to allow for future
     optimisations that will be allowed to elide unused frame entries).
     We build the return object.

   D Build and expand the actor and destroyer function bodies.
     The destroyer is a trivial shim that sets a bit to indicate that the
     destroy dispatcher should be used and then calls into the actor.

     The actor function is the implementation of the user's state machine.
     The current suspend point is noted in an index.
     Each suspend point is encoded as a pair of internal functions, one in
     the relevant dispatcher, and one representing the suspend point.

     During this process, the user's local variables and the proxies for the
     self-handle and the promise class instanceare re-written to their
     coroutine frame equivalents.

     The complete bodies for the ramp, actor and destroy function are passed
     back to finish_function for folding and gimplification.

[C++ coroutines 4] Middle end expanders and transforms.

The first part of this is a pass that provides:
 * expansion of the library support builtins, these are simple boolean
   or numerical substitutions.

 * The functionality of implementing an exit from scope without cleanup
   is performed here by lowering an IFN to a gimple goto.

This pass has to run for non-coroutine functions, since functions calling
the builtins are not necessarily coroutines (i.e. they are implementing the
library interfaces which may be called from anywhere).

The second part is the expansion of the coroutine IFNs that describe the
state machine connections to the dispatchers.  This only has to be run
for functions that are coroutine components.  The work done by this pass
is:

   In the front end we construct a single actor function that contains
   the coroutine state machine.

   The actor function has three entry conditions:
    1. from the ramp, resume point 0 - to initial-suspend.
    2. when resume () is executed (resume point N).
    3. from the destroy () shim when that is executed.

   The actor function begins with two dispatchers; one for resume and
   one for destroy (where the initial entry from the ramp is a special-
   case of resume point 0).

   Each suspend point and each dispatch entry is marked with an IFN such
   that we can connect the relevant dispatchers to their target labels.

   So, if we have:

   CO_YIELD (NUM, FINAL, RES_LAB, DEST_LAB, FRAME_PTR)

   This is await point NUM, and is the final await if FINAL is non-zero.
   The resume point is RES_LAB, and the destroy point is DEST_LAB.

   We expect to find a CO_ACTOR (NUM) in the resume dispatcher and a
   CO_ACTOR (NUM+1) in the destroy dispatcher.

   Initially, the intent of keeping the resume and destroy paths together
   is that the conditionals controlling them are identical, and thus there
   would be duplication of any optimisation of those paths if the split
   were earlier.

   Subsequent inlining of the actor (and DCE) is then able to extract the
   resume and destroy paths as separate functions if that is found
   profitable by the optimisers.

   Once we have remade the connections to their correct postions, we elide
   the labels that the front end inserted.

[C++ coroutines 5] Standard library header.

This provides the interfaces mandated by the standard and implements
the interaction with the coroutine frame by means of inline use of
builtins expanded at compile-time.  There should be a 1:1 correspondence
with the standard sections which are cross-referenced.

There is no runtime content.

At this stage, we have the content in an inline namespace "__n4835" for
the CD we worked to.

[C++ coroutines 6] Testsuite.

There are two categories of test:

1. Checks for correctly formed source code and the error reporting.
2. Checks for transformation and code-gen.

The second set are run as 'torture' tests for the standard options
set, including LTO.  These are also intentionally run with no options
provided (from the coroutines.exp script).

gcc/ChangeLog:

2020-01-18  Iain Sandoe  <iain@sandoe.co.uk>

	* Makefile.in: Add coroutine-passes.o.
	* builtin-types.def (BT_CONST_SIZE): New.
	(BT_FN_BOOL_PTR): New.
	(BT_FN_PTR_PTR_CONST_SIZE_BOOL): New.
	* builtins.def (DEF_COROUTINE_BUILTIN): New.
	* coroutine-builtins.def: New file.
	* coroutine-passes.cc: New file.
	* function.h (struct GTY function): Add a bit to indicate that the
	function is a coroutine component.
	* internal-fn.c (expand_CO_FRAME): New.
	(expand_CO_YIELD): New.
	(expand_CO_SUSPN): New.
	(expand_CO_ACTOR): New.
	* internal-fn.def (CO_ACTOR): New.
	(CO_YIELD): New.
	(CO_SUSPN): New.
	(CO_FRAME): New.
	* passes.def: Add pass_coroutine_lower_builtins,
	pass_coroutine_early_expand_ifns.
	* tree-pass.h (make_pass_coroutine_lower_builtins): New.
	(make_pass_coroutine_early_expand_ifns): New.
	* doc/invoke.texi: Document the fcoroutines command line
	switch.

gcc/c-family/ChangeLog:

2020-01-18  Iain Sandoe  <iain@sandoe.co.uk>

	* c-common.c (co_await, co_yield, co_return): New.
	* c-common.h (RID_CO_AWAIT, RID_CO_YIELD,
	RID_CO_RETURN): New enumeration values.
	(D_CXX_COROUTINES): Bit to identify coroutines are active.
	(D_CXX_COROUTINES_FLAGS): Guard for coroutine keywords.
	* c-cppbuiltin.c (__cpp_coroutines): New cpp define.
	* c.opt (fcoroutines): New command-line switch.

gcc/cp/ChangeLog:

2020-01-18  Iain Sandoe  <iain@sandoe.co.uk>

	* Make-lang.in: Add coroutines.o.
	* cp-tree.h (lang_decl-fn): coroutine_p, new bit.
	(DECL_COROUTINE_P): New.
	* lex.c (init_reswords): Enable keywords when the coroutine flag
	is set,
	* operators.def (co_await): New operator.
	* call.c (add_builtin_candidates): Handle CO_AWAIT_EXPR.
	(op_error): Likewise.
	(build_new_op_1): Likewise.
	(build_new_function_call): Validate coroutine builtin arguments.
	* constexpr.c (potential_constant_expression_1): Handle
	CO_AWAIT_EXPR, CO_YIELD_EXPR, CO_RETURN_EXPR.
	* coroutines.cc: New file.
	* cp-objcp-common.c (cp_common_init_ts): Add CO_AWAIT_EXPR,
	CO_YIELD_EXPR, CO_RETRN_EXPR as TS expressions.
	* cp-tree.def (CO_AWAIT_EXPR, CO_YIELD_EXPR, (CO_RETURN_EXPR): New.
	* cp-tree.h (coro_validate_builtin_call): New.
	* decl.c (emit_coro_helper): New.
	(finish_function): Handle the case when a function is found to
	be a coroutine, perform the outlining and emit the outlined
	functions. Set a bit to signal that this is a coroutine component.
	* parser.c (enum required_token): New enumeration RT_CO_YIELD.
	(cp_parser_unary_expression): Handle co_await.
	(cp_parser_assignment_expression): Handle co_yield.
	(cp_parser_statement): Handle RID_CO_RETURN.
	(cp_parser_jump_statement): Handle co_return.
	(cp_parser_operator): Handle co_await operator.
	(cp_parser_yield_expression): New.
	(cp_parser_required_error): Handle RT_CO_YIELD.
	* pt.c (tsubst_copy): Handle CO_AWAIT_EXPR.
	(tsubst_expr): Handle CO_AWAIT_EXPR, CO_YIELD_EXPR and
	CO_RETURN_EXPRs.
	* tree.c (cp_walk_subtrees): Likewise.

libstdc++-v3/ChangeLog:

2020-01-18  Iain Sandoe  <iain@sandoe.co.uk>

	* include/Makefile.am: Add coroutine to the std set.
	* include/Makefile.in: Regenerated.
	* include/std/coroutine: New file.

gcc/testsuite/ChangeLog:

2020-01-18  Iain Sandoe  <iain@sandoe.co.uk>

	* g++.dg/coroutines/co-await-syntax-00-needs-expr.C: New test.
	* g++.dg/coroutines/co-await-syntax-01-outside-fn.C: New test.
	* g++.dg/coroutines/co-await-syntax-02-outside-fn.C: New test.
	* g++.dg/coroutines/co-await-syntax-03-auto.C: New test.
	* g++.dg/coroutines/co-await-syntax-04-ctor-dtor.C: New test.
	* g++.dg/coroutines/co-await-syntax-05-constexpr.C: New test.
	* g++.dg/coroutines/co-await-syntax-06-main.C: New test.
	* g++.dg/coroutines/co-await-syntax-07-varargs.C: New test.
	* g++.dg/coroutines/co-await-syntax-08-lambda-auto.C: New test.
	* g++.dg/coroutines/co-return-syntax-01-outside-fn.C: New test.
	* g++.dg/coroutines/co-return-syntax-02-outside-fn.C: New test.
	* g++.dg/coroutines/co-return-syntax-03-auto.C: New test.
	* g++.dg/coroutines/co-return-syntax-04-ctor-dtor.C: New test.
	* g++.dg/coroutines/co-return-syntax-05-constexpr-fn.C: New test.
	* g++.dg/coroutines/co-return-syntax-06-main.C: New test.
	* g++.dg/coroutines/co-return-syntax-07-vararg.C: New test.
	* g++.dg/coroutines/co-return-syntax-08-bad-return.C: New test.
	* g++.dg/coroutines/co-return-syntax-09-lambda-auto.C: New test.
	* g++.dg/coroutines/co-yield-syntax-00-needs-expr.C: New test.
	* g++.dg/coroutines/co-yield-syntax-01-outside-fn.C: New test.
	* g++.dg/coroutines/co-yield-syntax-02-outside-fn.C: New test.
	* g++.dg/coroutines/co-yield-syntax-03-auto.C: New test.
	* g++.dg/coroutines/co-yield-syntax-04-ctor-dtor.C: New test.
	* g++.dg/coroutines/co-yield-syntax-05-constexpr.C: New test.
	* g++.dg/coroutines/co-yield-syntax-06-main.C: New test.
	* g++.dg/coroutines/co-yield-syntax-07-varargs.C: New test.
	* g++.dg/coroutines/co-yield-syntax-08-needs-expr.C: New test.
	* g++.dg/coroutines/co-yield-syntax-09-lambda-auto.C: New test.
	* g++.dg/coroutines/coro-builtins.C: New test.
	* g++.dg/coroutines/coro-missing-gro.C: New test.
	* g++.dg/coroutines/coro-missing-promise-yield.C: New test.
	* g++.dg/coroutines/coro-missing-ret-value.C: New test.
	* g++.dg/coroutines/coro-missing-ret-void.C: New test.
	* g++.dg/coroutines/coro-missing-ueh-1.C: New test.
	* g++.dg/coroutines/coro-missing-ueh-2.C: New test.
	* g++.dg/coroutines/coro-missing-ueh-3.C: New test.
	* g++.dg/coroutines/coro-missing-ueh.h: New test.
	* g++.dg/coroutines/coro-pre-proc.C: New test.
	* g++.dg/coroutines/coro.h: New file.
	* g++.dg/coroutines/coro1-ret-int-yield-int.h: New file.
	* g++.dg/coroutines/coroutines.exp: New file.
	* g++.dg/coroutines/torture/alloc-00-gro-on-alloc-fail.C: New test.
	* g++.dg/coroutines/torture/alloc-01-overload-newdel.C: New test.
	* g++.dg/coroutines/torture/call-00-co-aw-arg.C: New test.
	* g++.dg/coroutines/torture/call-01-multiple-co-aw.C: New test.
	* g++.dg/coroutines/torture/call-02-temp-co-aw.C: New test.
	* g++.dg/coroutines/torture/call-03-temp-ref-co-aw.C: New test.
	* g++.dg/coroutines/torture/class-00-co-ret.C: New test.
	* g++.dg/coroutines/torture/class-01-co-ret-parm.C: New test.
	* g++.dg/coroutines/torture/class-02-templ-parm.C: New test.
	* g++.dg/coroutines/torture/class-03-operator-templ-parm.C: New test.
	* g++.dg/coroutines/torture/class-04-lambda-1.C: New test.
	* g++.dg/coroutines/torture/class-05-lambda-capture-copy-local.C: New test.
	* g++.dg/coroutines/torture/class-06-lambda-capture-ref.C: New test.
	* g++.dg/coroutines/torture/co-await-00-trivial.C: New test.
	* g++.dg/coroutines/torture/co-await-01-with-value.C: New test.
	* g++.dg/coroutines/torture/co-await-02-xform.C: New test.
	* g++.dg/coroutines/torture/co-await-03-rhs-op.C: New test.
	* g++.dg/coroutines/torture/co-await-04-control-flow.C: New test.
	* g++.dg/coroutines/torture/co-await-05-loop.C: New test.
	* g++.dg/coroutines/torture/co-await-06-ovl.C: New test.
	* g++.dg/coroutines/torture/co-await-07-tmpl.C: New test.
	* g++.dg/coroutines/torture/co-await-08-cascade.C: New test.
	* g++.dg/coroutines/torture/co-await-09-pair.C: New test.
	* g++.dg/coroutines/torture/co-await-10-template-fn-arg.C: New test.
	* g++.dg/coroutines/torture/co-await-11-forwarding.C: New test.
	* g++.dg/coroutines/torture/co-await-12-operator-2.C: New test.
	* g++.dg/coroutines/torture/co-await-13-return-ref.C: New test.
	* g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C: New test.
	* g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C: New test.
	* g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C: New test.
	* g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C: New test.
	* g++.dg/coroutines/torture/co-ret-05-return-value.C: New test.
	* g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C: New test.
	* g++.dg/coroutines/torture/co-ret-07-void-cast-expr.C: New test.
	* g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C: New test.
	* g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C: New test.
	* g++.dg/coroutines/torture/co-ret-10-expression-evaluates-once.C: New test.
	* g++.dg/coroutines/torture/co-ret-11-co-ret-co-await.C: New test.
	* g++.dg/coroutines/torture/co-ret-12-co-ret-fun-co-await.C: New test.
	* g++.dg/coroutines/torture/co-ret-13-template-2.C: New test.
	* g++.dg/coroutines/torture/co-ret-14-template-3.C: New test.
	* g++.dg/coroutines/torture/co-yield-00-triv.C: New test.
	* g++.dg/coroutines/torture/co-yield-01-multi.C: New test.
	* g++.dg/coroutines/torture/co-yield-02-loop.C: New test.
	* g++.dg/coroutines/torture/co-yield-03-tmpl.C: New test.
	* g++.dg/coroutines/torture/co-yield-04-complex-local-state.C: New test.
	* g++.dg/coroutines/torture/co-yield-05-co-aw.C: New test.
	* g++.dg/coroutines/torture/co-yield-06-fun-parm.C: New test.
	* g++.dg/coroutines/torture/co-yield-07-template-fn-param.C: New test.
	* g++.dg/coroutines/torture/co-yield-08-more-refs.C: New test.
	* g++.dg/coroutines/torture/co-yield-09-more-templ-refs.C: New test.
	* g++.dg/coroutines/torture/coro-torture.exp: New file.
	* g++.dg/coroutines/torture/exceptions-test-0.C: New test.
	* g++.dg/coroutines/torture/func-params-00.C: New test.
	* g++.dg/coroutines/torture/func-params-01.C: New test.
	* g++.dg/coroutines/torture/func-params-02.C: New test.
	* g++.dg/coroutines/torture/func-params-03.C: New test.
	* g++.dg/coroutines/torture/func-params-04.C: New test.
	* g++.dg/coroutines/torture/func-params-05.C: New test.
	* g++.dg/coroutines/torture/func-params-06.C: New test.
	* g++.dg/coroutines/torture/lambda-00-co-ret.C: New test.
	* g++.dg/coroutines/torture/lambda-01-co-ret-parm.C: New test.
	* g++.dg/coroutines/torture/lambda-02-co-yield-values.C: New test.
	* g++.dg/coroutines/torture/lambda-03-auto-parm-1.C: New test.
	* g++.dg/coroutines/torture/lambda-04-templ-parm.C: New test.
	* g++.dg/coroutines/torture/lambda-05-capture-copy-local.C: New test.
	* g++.dg/coroutines/torture/lambda-06-multi-capture.C: New test.
	* g++.dg/coroutines/torture/lambda-07-multi-yield.C: New test.
	* g++.dg/coroutines/torture/lambda-08-co-ret-parm-ref.C: New test.
	* g++.dg/coroutines/torture/local-var-0.C: New test.
	* g++.dg/coroutines/torture/local-var-1.C: New test.
	* g++.dg/coroutines/torture/local-var-2.C: New test.
	* g++.dg/coroutines/torture/local-var-3.C: New test.
	* g++.dg/coroutines/torture/local-var-4.C: New test.
	* g++.dg/coroutines/torture/mid-suspend-destruction-0.C: New test.
	* g++.dg/coroutines/torture/pr92933.C: New test.
2020-01-18 11:55:56 +00:00
Jakub Jelinek
8d9254fc8a Update copyright years.
From-SVN: r279813
2020-01-01 12:51:42 +01:00
Joseph Myers
0fa0048302 Mark C2x built-in functions as such.
Various built-in functions that GCC has as extensions are now standard
functions in C2x.  This patch adds DEF_C2X_BUILTIN and uses it to mark
them as such.  Some of the so-marked functions were previously
DEF_EXT_LIB_BUILTIN, while some DFP ones were DEF_GCC_BUILTIN
(i.e. __builtin_* only); both sets become DEF_C2X_BUILTIN.  This in
turn requires flag_isoc2x to be defined in various front ends using
builtins.def.

As the semantics of the built-in functions should already be tested,
the tests added only verify that they are declared in C2x mode but not
in C11 mode.  The test of DFP built-in functions being declared for
C2x goes in gcc.dg/dfp/, as while such built-in functions currently
don't depend on whether DFP is supported, that looks like a bug to me
(see bug 91985), so it seems best for the tests not to depend on
exactly how that bug might be fixed.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc:
	* builtins.def (DEF_C2X_BUILTIN): New macro.
	(exp10, exp10f, exp10l, fabsd32, fabsd64, fabsd128, nand32)
	(nand64, nand128, roundeven, roundevenf, roundevenl, strdup)
	(strndup): Use DEF_C2X_BUILTIN.
	* coretypes.h (enum function_class): Add function_c2x_misc.

gcc/ada:
	* gcc-interface/utils.c (flag_isoc2x): New variable.

gcc/brig:
	* brig-lang.c (flag_isoc2x): New variable.

gcc/lto:
	* lto-lang.c (flag_isoc2x): New variable.

gcc/testsuite:
	* gcc.dg/c11-builtins-1.c, gcc.dg/c2x-builtins-1.c,
	gcc.dg/dfp/c2x-builtins-dfp-1.c: New tests.

From-SVN: r276588
2019-10-04 17:08:06 +01:00
Martin Sebor
d1090a8a80 PR tree-optimization/80936 - bcmp, bcopy, and bzero not declared nonnull
gcc/testsuite/ChangeLog:

	PR tree-optimization/80936
	* gcc.dg/Wnonnull-2.c: New test.
	* gcc.dg/Wnonnull-3.c: New test.
	* gcc.dg/nonnull-3.c: Expect more warnings.

gcc/ChangeLog:

	PR tree-optimization/80936
	* builtins.def (bcmp, bcopy, bzero): Declare nonnull.

From-SVN: r276491
2019-10-02 16:00:42 -06:00
Tejas Joshi
7d7b99f95b Builtin function roundeven folding implementation
2019-08-26  Tejas Joshi  <tejasjoshi9673@gmail.com>

        * builtins.c (mathfn_built_in_2): Added CASE_MATHFN_FLOATN
        for ROUNDEVEN.
        * builtins.def: Added function definitions for roundeven function
        variants.
        * fold-const-call.c (fold_const_call_ss): Added case for roundeven
        function call.  Adjust condition for floor, ceil, trunc and round.
        * fold-const.c (negate_mathfn_p): Added case for roundeven function.
        (tree_call_nonnegative_warnv_p): Added case for roundeven function.
        (integer_valued_real_call_p): Added case for roundeven function.
        * real.c (is_even): New function. Returns true if real number is even,
        otherwise returns false.
        (is_halfway_below): New function. Returns true if real number is
        halfway between two integers, else return false.
        (real_roundeven): New function. Round real number to nearest integer,
        rounding halfway cases towards even.
        * real.h (real_value): Added descriptive comments.  Added function
        declaration for roundeven function.
        * doc/extend.texi (Other Builtins): List roundeven variants among
        functions which can be handled as builtins.

gcc/testsuite/ChangeLog:

2019-08-26  Tejas Joshi  <tejasjoshi9673@gmail.com>

        * gcc.dg/torture/builtin-round-roundeven.c: New test.
        * gcc.dg/torture/builtin-round-roundevenf128.c: New test.

From-SVN: r274927
2019-08-26 14:32:29 +02:00
Martin Liska
b8e2acff11 Add warn_unused_result for malloc-like functions (PR tree-optimization/78902).
2019-06-07  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/78902
	* builtin-attrs.def (ATTR_WARN_UNUSED_RESULT): New.
	(ATTR_MALLOC_NOTHROW_LEAF_LIST): Remove.
	(ATTR_WARN_UNUSED_RESULT_NOTHROW_LEAF_LIST): New.
	(ATTR_MALLOC_WARN_UNUSED_RESULT_NOTHROW_LEAF_LIST): New.
	(ATTR_ALLOC_SIZE_2_NOTHROW_LIST): Remove.
	(ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST): Remove.
	(ATTR_MALLOC_WARN_UNUSED_RESULT_NOTHROW_LIST): New.
	(ATTR_ALLOC_WARN_UNUSED_RESULT_SIZE_2_NOTHROW_LIST): New.
	(ATTR_MALLOC_WARN_UNUSED_RESULT_SIZE_1_NOTHROW_LEAF_LIST): New.
	(ATTR_ALLOCA_SIZE_1_NOTHROW_LEAF_LIST): Remove.
	(ATTR_ALLOCA_WARN_UNUSED_RESULT_SIZE_1_NOTHROW_LEAF_LIST): New.
	(ATTR_MALLOC_SIZE_1_2_NOTHROW_LEAF_LIST):  Remove.
	(ATTR_MALLOC_WARN_UNUSED_RESULT_SIZE_1_2_NOTHROW_LEAF_LIST):
	New.
	(ATTR_ALLOC_SIZE_2_NOTHROW_LEAF_LIST): Remove.
	(ATTR_ALLOC_WARN_UNUSED_RESULT_SIZE_2_NOTHROW_LEAF_LIST): New.
	(ATTR_MALLOC_NOTHROW_NONNULL): Remove.
	(ATTR_WARN_UNUSED_RESULT_NOTHROW_NONNULL): New.
	(ATTR_MALLOC_WARN_UNUSED_RESULT_NOTHROW_NONNULL): New.
	(ATTR_MALLOC_NOTHROW_NONNULL_LEAF): Remove.
	(ATTR_WARN_UNUSED_RESULT_NOTHROW_NONNULL_LEAF): New.
	(ATTR_MALLOC_WARN_UNUSED_RESULT_NOTHROW_NONNULL_LEAF): New.
	* builtins.def (BUILT_IN_ALIGNED_ALLOC): Change to use
	warn_unused_result attribute.
	(BUILT_IN_STRDUP): Likewise.
	(BUILT_IN_STRNDUP): Likewise.
	(BUILT_IN_ALLOCA): Likewise.
	(BUILT_IN_CALLOC): Likewise.
	(BUILT_IN_MALLOC): Likewise.
	(BUILT_IN_REALLOC): Likewise.
2019-06-07  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/78902
	* c-c++-common/asan/alloca_loop_unpoisoning.c: Use result
	of __builtin_alloca.
	* c-c++-common/asan/pr88619.c: Likewise.
	* g++.dg/overload/using2.C: Likewise for malloc.
	* gcc.dg/attr-alloc_size-5.c: Add new dg-warning.
	* gcc.dg/nonnull-3.c: Use result of __builtin_strdup.
	* gcc.dg/pr43643.c: Likewise.
	* gcc.dg/pr59717.c: Likewise for calloc.
	* gcc.dg/torture/pr71816.c: Likewise.
	* gcc.dg/tree-ssa/pr78886.c: Likewise.
	* gcc.dg/tree-ssa/pr79697.c: Likewise.
	* gcc.dg/pr78902.c: New test.

From-SVN: r272028
2019-06-07 05:33:11 +00:00
Jakub Jelinek
a554497024 Update copyright years.
From-SVN: r267494
2019-01-01 13:31:55 +01:00
Martin Liska
1e9168b279 Introduce __builtin_expect_with_probability (PR target/83610).
2018-08-10  Martin Liska  <mliska@suse.cz>

        PR target/83610
	* builtin-types.def (BT_FN_LONG_LONG_LONG_DOUBLE): Add new
        function type.
	* builtins.c (expand_builtin_expect_with_probability):
        New function.
	(expand_builtin_expect_with_probability): New function.
	(build_builtin_expect_predicate): Add new argumnet probability
        for BUILT_IN_EXPECT_WITH_PROBABILITY.
	(fold_builtin_expect):
	(fold_builtin_2):
	(fold_builtin_3):
	* builtins.def (BUILT_IN_EXPECT_WITH_PROBABILITY):
	* builtins.h (fold_builtin_expect): Set new argument.
	* doc/extend.texi: Document __builtin_expect_with_probability.
	* doc/invoke.texi: Likewise.
	* gimple-fold.c (gimple_fold_call): Pass new argument.
	* ipa-fnsummary.c (find_foldable_builtin_expect): Handle
        also BUILT_IN_EXPECT_WITH_PROBABILITY.
	* predict.c (get_predictor_value): New function.
	(expr_expected_value): Add new argument probability. Assume
        that predictor and probability are always non-null.
	(expr_expected_value_1): Likewise.  For __builtin_expect and
        __builtin_expect_with_probability set probability.  Handle
        combination in binary expressions.
	(tree_predict_by_opcode): Simplify code by simply calling
        get_predictor_value.
	(pass_strip_predict_hints::execute): Add handling of
        BUILT_IN_EXPECT_WITH_PROBABILITY.
	* predict.def (PRED_BUILTIN_EXPECT_WITH_PROBABILITY): Add
        new predictor.
	* tree.h (DECL_BUILT_IN_P): New function.
2018-08-10  Martin Liska  <mliska@suse.cz>

        PR target/83610
	* gcc.dg/predict-17.c: New test.
	* gcc.dg/predict-18.c: New test.
	* gcc.dg/predict-19.c: New test.

From-SVN: r263466
2018-08-10 09:43:06 +00:00
Richard Earnshaw
425fc685dd Add __builtin_speculation_safe_value
This patch defines a new intrinsic function
__builtin_speculation_safe_value.  A generic default implementation is
defined which will attempt to use the backend pattern
"speculation_safe_barrier".  If this pattern is not defined, or if it
is not available, then the compiler will emit a warning, but
compilation will continue.

Note that the test spec-barrier-1.c will currently fail on all
targets.  This is deliberate, the failure will go away when
appropriate action is taken for each target backend.

gcc:
	* builtin-types.def (BT_FN_PTR_PTR_VAR): New function type.
	(BT_FN_I1_I1_VAR, BT_FN_I2_I2_VAR, BT_FN_I4_I4_VAR): Likewise.
	(BT_FN_I8_I8_VAR, BT_FN_I16_I16_VAR): Likewise.
	* builtin-attrs.def (ATTR_NOVOPS_NOTHROW_LEAF_LIST): New attribute
	list.
	* builtins.def (BUILT_IN_SPECULATION_SAFE_VALUE_N): New builtin.
	(BUILT_IN_SPECULATION_SAFE_VALUE_PTR): New internal builtin.
	(BUILT_IN_SPECULATION_SAFE_VALUE_1): Likewise.
	(BUILT_IN_SPECULATION_SAFE_VALUE_2): Likewise.
	(BUILT_IN_SPECULATION_SAFE_VALUE_4): Likewise.
	(BUILT_IN_SPECULATION_SAFE_VALUE_8): Likewise.
	(BUILT_IN_SPECULATION_SAFE_VALUE_16): Likewise.
	* builtins.c (expand_speculation_safe_value): New function.
	(expand_builtin): Call it.
	* doc/cpp.texi: Document predefine __HAVE_SPECULATION_SAFE_VALUE.
	* doc/extend.texi: Document __builtin_speculation_safe_value.
	* doc/md.texi: Document "speculation_barrier" pattern.
	* doc/tm.texi.in: Pull in TARGET_SPECULATION_SAFE_VALUE and
	TARGET_HAVE_SPECULATION_SAFE_VALUE.
	* doc/tm.texi: Regenerated.
	* target.def (have_speculation_safe_value, speculation_safe_value): New
	hooks.
	* targhooks.c (default_have_speculation_safe_value): New function.
	(default_speculation_safe_value): New function.
	* targhooks.h (default_have_speculation_safe_value): Add prototype.
	(default_speculation_safe_value): Add prototype.

c-family:
	* c-common.c (speculation_safe_resolve_call): New function.
	(speculation_safe_resolve_params): New function.
	(speculation_safe_resolve_return): New function.
	(resolve_overloaded_builtin): Handle __builtin_speculation_safe_value.
	* c-cppbuiltin.c (c_cpp_builtins): Add pre-define for
	__HAVE_SPECULATION_SAFE_VALUE.

testsuite:
	* c-c++-common/spec-barrier-1.c: New test.
	* c-c++-common/spec-barrier-2.c: New test.
	* gcc.dg/spec-barrier-3.c: New test.

From-SVN: r263168
2018-07-31 17:35:32 +00:00
Martin Sebor
781ff3d80e PR tree-optimization/81384 - built-in form of strnlen missing
gcc/ChangeLog:

	PR tree-optimization/81384
	* builtin-types.def (BT_FN_SIZE_CONST_STRING_SIZE): New.
	* builtins.c (expand_builtin_strnlen): New function.
	(expand_builtin): Call it.
	(fold_builtin_n): Avoid setting TREE_NO_WARNING.
	* builtins.def (BUILT_IN_STRNLEN): New.
	* calls.c (maybe_warn_nonstring_arg): Handle BUILT_IN_STRNLEN.
	Warn for bounds in excess of maximum object size.
	* tree-ssa-strlen.c (maybe_set_strlen_range): Return tree representing
	single-value ranges.  Handle strnlen.
	(handle_builtin_strlen): Handle strnlen.
	(strlen_check_and_optimize_stmt): Same.
	* doc/extend.texi (Other Builtins): Document strnlen.

gcc/testsuite/ChangeLog:

	PR tree-optimization/81384
	* gcc.c-torture/execute/builtins/lib/strnlen.c: New test.
	* gcc.c-torture/execute/builtins/strnlen-lib.c: New test.
	* gcc.c-torture/execute/builtins/strnlen.c: New test.
	* gcc.dg/attr-nonstring-2.c: New test.
	* gcc.dg/attr-nonstring-3.c: New test.
	* gcc.dg/attr-nonstring-4.c: New test.
	* gcc.dg/strlenopt-45.c: New test.
	* gcc.dg/strlenopt.h (strnlen):  Declare.

From-SVN: r261705
2018-06-18 10:32:59 -06:00
Martin Liska
31db0fe044 Remove MPX
2018-06-08  Martin Liska  <mliska@suse.cz>

	* MAINTAINERS: Remove MPX-related entries.
	* Makefile.def: Remove libmpx support.
	* Makefile.in: Likewise.
	* configure: Remove removed files.
	* configure.ac: Likewise.
	* libmpx/ChangeLog: Remove.
	* libmpx/Makefile.am: Remove.
	* libmpx/Makefile.in: Remove.
	* libmpx/acinclude.m4: Remove.
	* libmpx/aclocal.m4: Remove.
	* libmpx/config.h.in: Remove.
	* libmpx/configure: Remove.
	* libmpx/configure.ac: Remove.
	* libmpx/configure.tgt: Remove.
	* libmpx/libmpx.spec.in: Remove.
	* libmpx/mpxrt/Makefile.am: Remove.
	* libmpx/mpxrt/Makefile.in: Remove.
	* libmpx/mpxrt/libmpx.map: Remove.
	* libmpx/mpxrt/libtool-version: Remove.
	* libmpx/mpxrt/mpxrt-utils.c: Remove.
	* libmpx/mpxrt/mpxrt-utils.h: Remove.
	* libmpx/mpxrt/mpxrt.c: Remove.
	* libmpx/mpxrt/mpxrt.h: Remove.
	* libmpx/mpxwrap/Makefile.am: Remove.
	* libmpx/mpxwrap/Makefile.in: Remove.
	* libmpx/mpxwrap/libmpxwrappers.map: Remove.
	* libmpx/mpxwrap/libtool-version: Remove.
	* libmpx/mpxwrap/mpx_wrappers.c: Remove.
2018-06-08  Martin Liska  <mliska@suse.cz>

	* bootstrap-mpx.mk: Remove.
2018-06-08  Martin Liska  <mliska@suse.cz>

	* Makefile.in: Remove support for MPX (macros, related functions,
	fields in cgraph_node, ...).
	* builtin-types.def (BT_BND): Likewise.
	(BT_FN_BND_CONST_PTR): Likewise.
	(BT_FN_CONST_PTR_BND): Likewise.
	(BT_FN_VOID_PTR_BND): Likewise.
	(BT_FN_BND_CONST_PTR_SIZE): Likewise.
	(BT_FN_VOID_CONST_PTR_BND_CONST_PTR): Likewise.
	* builtins.c (expand_builtin_memcpy_with_bounds): Likewise.
	(expand_builtin_mempcpy_with_bounds): Likewise.
	(expand_builtin_memset_with_bounds): Likewise.
	(expand_builtin_memset_args): Likewise.
	(std_expand_builtin_va_start): Likewise.
	(expand_builtin): Likewise.
	(expand_builtin_with_bounds): Likewise.
	* builtins.def (DEF_BUILTIN_CHKP): Likewise.
	(DEF_LIB_BUILTIN_CHKP): Likewise.
	(DEF_EXT_LIB_BUILTIN_CHKP): Likewise.
	(DEF_CHKP_BUILTIN): Likewise.
	(BUILT_IN_MEMCPY): Likewise.
	(BUILT_IN_MEMMOVE): Likewise.
	(BUILT_IN_MEMPCPY): Likewise.
	(BUILT_IN_MEMSET): Likewise.
	(BUILT_IN_STPCPY): Likewise.
	(BUILT_IN_STRCAT): Likewise.
	(BUILT_IN_STRCHR): Likewise.
	(BUILT_IN_STRCPY): Likewise.
	(BUILT_IN_STRLEN): Likewise.
	(BUILT_IN_MEMCPY_CHK): Likewise.
	(BUILT_IN_MEMMOVE_CHK): Likewise.
	(BUILT_IN_MEMPCPY_CHK): Likewise.
	(BUILT_IN_MEMSET_CHK): Likewise.
	(BUILT_IN_STPCPY_CHK): Likewise.
	(BUILT_IN_STRCAT_CHK): Likewise.
	(BUILT_IN_STRCPY_CHK): Likewise.
	* calls.c (store_bounds): Likewise.
	(emit_call_1): Likewise.
	(special_function_p): Likewise.
	(maybe_warn_nonstring_arg): Likewise.
	(initialize_argument_information): Likewise.
	(finalize_must_preallocate): Likewise.
	(compute_argument_addresses): Likewise.
	(expand_call): Likewise.
	* cfgexpand.c (expand_call_stmt): Likewise.
	(expand_return): Likewise.
	(expand_gimple_stmt_1): Likewise.
	(pass_expand::execute): Likewise.
	* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Likewise.
	(cgraph_node::remove): Likewise.
	(cgraph_node::dump): Likewise.
	(cgraph_node::verify_node): Likewise.
	* cgraph.h (chkp_function_instrumented_p): Likewise.
	(symtab_node::get_alias_target): Likewise.
	(cgraph_node::can_remove_if_no_direct_calls_and_refs_p): Likewise.
	(cgraph_local_p): Likewise.
	* cgraphbuild.c (cgraph_edge::rebuild_edges): Likewise.
	(cgraph_edge::rebuild_references): Likewise.
	* cgraphunit.c (varpool_node::finalize_decl): Likewise.
	(walk_polymorphic_call_targets): Likewise.
	(cgraph_node::expand_thunk): Likewise.
	(symbol_table::output_weakrefs): Likewise.
	* common/config/i386/i386-common.c (OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET): Likewise.
	(ix86_handle_option): Likewise.
	* config/i386/constraints.md: Likewise.
	* config/i386/i386-builtin-types.def (BND): Likewise.
	(VOID): Likewise.
	(PVOID): Likewise.
	(ULONG): Likewise.
	* config/i386/i386-builtin.def (BDESC_END): Likewise.
	(BDESC_FIRST): Likewise.
	(BDESC): Likewise.
	* config/i386/i386-c.c (ix86_target_macros_internal): Likewise.
	* config/i386/i386-protos.h (ix86_bnd_prefixed_insn_p): Likewise.
	* config/i386/i386.c (enum reg_class): Likewise.
	(ix86_target_string): Likewise.
	(ix86_option_override_internal): Likewise.
	(ix86_conditional_register_usage): Likewise.
	(ix86_valid_target_attribute_inner_p): Likewise.
	(ix86_set_indirect_branch_type): Likewise.
	(ix86_set_current_function): Likewise.
	(ix86_function_arg_regno_p): Likewise.
	(init_cumulative_args): Likewise.
	(ix86_function_arg_advance): Likewise.
	(ix86_function_arg): Likewise.
	(ix86_pass_by_reference): Likewise.
	(ix86_function_value_regno_p): Likewise.
	(ix86_function_value_1): Likewise.
	(ix86_function_value_bounds): Likewise.
	(ix86_return_in_memory): Likewise.
	(ix86_setup_incoming_vararg_bounds): Likewise.
	(ix86_va_start): Likewise.
	(indirect_thunk_need_prefix): Likewise.
	(print_reg): Likewise.
	(ix86_print_operand): Likewise.
	(ix86_expand_call): Likewise.
	(ix86_output_function_return): Likewise.
	(reg_encoded_number): Likewise.
	(BDESC_VERIFYS): Likewise.
	(ix86_init_mpx_builtins): Likewise.
	(ix86_init_builtins): Likewise.
	(ix86_emit_cmove): Likewise.
	(ix86_emit_move_max): Likewise.
	(ix86_expand_builtin): Likewise.
	(ix86_builtin_mpx_function): Likewise.
	(ix86_get_arg_address_for_bt): Likewise.
	(ix86_load_bounds): Likewise.
	(ix86_store_bounds): Likewise.
	(ix86_load_returned_bounds): Likewise.
	(ix86_store_returned_bounds): Likewise.
	(ix86_class_likely_spilled_p): Likewise.
	(ix86_hard_regno_mode_ok): Likewise.
	(x86_order_regs_for_local_alloc): Likewise.
	(ix86_mitigate_rop): Likewise.
	(ix86_bnd_prefixed_insn_p): Likewise.
	(ix86_mpx_bound_mode): Likewise.
	(ix86_make_bounds_constant): Likewise.
	(ix86_initialize_bounds): Likewise.
	(TARGET_LOAD_BOUNDS_FOR_ARG): Likewise.
	(TARGET_STORE_BOUNDS_FOR_ARG): Likewise.
	(TARGET_LOAD_RETURNED_BOUNDS): Likewise.
	(TARGET_STORE_RETURNED_BOUNDS): Likewise.
	(TARGET_CHKP_BOUND_MODE): Likewise.
	(TARGET_BUILTIN_CHKP_FUNCTION): Likewise.
	(TARGET_CHKP_FUNCTION_VALUE_BOUNDS): Likewise.
	(TARGET_CHKP_MAKE_BOUNDS_CONSTANT): Likewise.
	(TARGET_CHKP_INITIALIZE_BOUNDS): Likewise.
	* config/i386/i386.h (TARGET_MPX): Likewise.
	(TARGET_MPX_P): Likewise.
	(VALID_BND_REG_MODE): Likewise.
	(FIRST_BND_REG): Likewise.
	(LAST_BND_REG): Likewise.
	(enum reg_class): Likewise.
	(BND_REG_P): Likewise.
	(BND_REGNO_P): Likewise.
	(BNDmode): Likewise.
	(ADJUST_INSN_LENGTH): Likewise.
	* config/i386/i386.md: Likewise.
	* config/i386/i386.opt: Likewise.
	* config/i386/linux-common.h (LIBMPX_LIBS): Likewise.
	(defined): Likewise.
	(LINK_MPX): Likewise.
	(MPX_SPEC): Likewise.
	(LIBMPX_SPEC): Likewise.
	(LIBMPXWRAPPERS_SPEC): Likewise.
	(CHKP_SPEC): Likewise.
	* config/i386/predicates.md: Likewise.
	* dbxout.c (dbxout_type): Likewise.
	* doc/extend.texi: Likewise.
	* doc/invoke.texi: Likewise.
	* doc/md.texi: Likewise.
	* doc/tm.texi: Likewise.
	* doc/tm.texi.in: Likewise.
	* dwarf2out.c (is_base_type): Likewise.
	(gen_formal_types_die): Likewise.
	(gen_subprogram_die): Likewise.
	(gen_type_die_with_usage): Likewise.
	(gen_decl_die): Likewise.
	(dwarf2out_late_global_decl): Likewise.
	* expr.c (expand_assignment): Likewise.
	(emit_storent_insn): Likewise.
	(store_expr_with_bounds): Likewise.
	(store_expr): Likewise.
	(expand_expr_real_1): Likewise.
	* expr.h (store_expr_with_bounds): Likewise.
	* function.c (use_register_for_decl): Likewise.
	(struct bounds_parm_data): Likewise.
	(assign_parms_augmented_arg_list): Likewise.
	(assign_parm_find_entry_rtl): Likewise.
	(assign_parm_is_stack_parm): Likewise.
	(assign_parm_load_bounds): Likewise.
	(assign_bounds): Likewise.
	(assign_parms): Likewise.
	(expand_function_start): Likewise.
	* gcc.c (CHKP_SPEC): Likewise.
	* gimple-fold.c (gimple_fold_builtin_memory_op): Likewise.
	* gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Likewise.
	(wrestrict_dom_walker::check_call): Likewise.
	* gimple.c (gimple_build_call_from_tree): Likewise.
	* gimple.h (enum gf_mask): Likewise.
	(gimple_call_with_bounds_p): Likewise.
	(gimple_call_set_with_bounds): Likewise.
	* gimplify.c (gimplify_init_constructor): Likewise.
	* ipa-cp.c (initialize_node_lattices): Likewise.
	(propagate_constants_across_call): Likewise.
	(find_more_scalar_values_for_callers_subset): Likewise.
	* ipa-hsa.c (process_hsa_functions): Likewise.
	* ipa-icf-gimple.c (func_checker::compare_gimple_call): Likewise.
	* ipa-icf.c (sem_function::merge): Likewise.
	* ipa-inline.c (early_inliner): Likewise.
	* ipa-pure-const.c (warn_function_noreturn): Likewise.
	(warn_function_cold): Likewise.
	(propagate_pure_const): Likewise.
	* ipa-ref.h (enum GTY): Likewise.
	* ipa-split.c (find_retbnd): Likewise.
	(consider_split): Likewise.
	(split_function): Likewise.
	* ipa-visibility.c (cgraph_externally_visible_p): Likewise.
	* ipa.c (walk_polymorphic_call_targets): Likewise.
	(symbol_table::remove_unreachable_nodes): Likewise.
	(process_references): Likewise.
	(cgraph_build_static_cdtor_1): Likewise.
	* lto-cgraph.c (lto_output_node): Likewise.
	(output_refs): Likewise.
	(compute_ltrans_boundary): Likewise.
	(input_overwrite_node): Likewise.
	(input_node): Likewise.
	(input_cgraph_1): Likewise.
	* params.def (PARAM_CHKP_MAX_CTOR_SIZE): Likewise.
	* passes.c (pass_manager::execute_early_local_passes): Likewise.
	(class pass_chkp_instrumentation_passes): Likewise.
	(make_pass_chkp_instrumentation_passes): Likewise.
	* passes.def: Likewise.
	* rtl.h (struct GTY): Likewise.
	(CALL_EXPR_WITH_BOUNDS_P): Likewise.
	* stor-layout.c (layout_type): Likewise.
	* symtab.c: Likewise.
	* target.def: Likewise.
	* targhooks.c (default_chkp_bound_type): Likewise.
	(default_chkp_bound_mode): Likewise.
	(default_builtin_chkp_function): Likewise.
	(default_chkp_function_value_bounds): Likewise.
	(default_chkp_make_bounds_constant): Likewise.
	(default_chkp_initialize_bounds): Likewise.
	* targhooks.h (default_chkp_bound_type): Likewise.
	(default_chkp_bound_mode): Likewise.
	(default_builtin_chkp_function): Likewise.
	(default_chkp_function_value_bounds): Likewise.
	(default_chkp_make_bounds_constant): Likewise.
	(default_chkp_initialize_bounds): Likewise.
	* toplev.c (compile_file): Likewise.
	(process_options): Likewise.
	* tree-core.h (DEF_BUILTIN): Likewise.
	(DEF_BUILTIN_CHKP): Likewise.
	* tree-inline.c (declare_return_variable): Likewise.
	(remap_gimple_stmt): Likewise.
	(copy_bb): Likewise.
	(initialize_inlined_parameters): Likewise.
	(expand_call_inline): Likewise.
	* tree-pass.h (make_pass_ipa_chkp_versioning): Likewise.
	(make_pass_ipa_chkp_early_produce_thunks): Likewise.
	(make_pass_ipa_chkp_produce_thunks): Likewise.
	(make_pass_chkp): Likewise.
	(make_pass_chkp_opt): Likewise.
	(make_pass_chkp_instrumentation_passes): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-ccp.c (insert_clobber_before_stack_restore): Likewise.
	* tree-ssa-dce.c (propagate_necessity): Likewise.
	(eliminate_unnecessary_stmts): Likewise.
	* tree-ssa-pre.c (create_expression_by_pieces): Likewise.
	* tree-ssa-sccvn.c (copy_reference_ops_from_call): Likewise.
	* tree-ssa-sccvn.h: Likewise.
	* tree-ssa-strlen.c (get_string_length): Likewise.
	(valid_builtin_call): Likewise.
	(adjust_last_stmt): Likewise.
	(handle_builtin_strchr): Likewise.
	(handle_builtin_strcpy): Likewise.
	(handle_builtin_stxncpy): Likewise.
	(handle_builtin_memcpy): Likewise.
	(handle_builtin_strcat): Likewise.
	(strlen_check_and_optimize_stmt): Likewise.
	* tree-stdarg.c (expand_ifn_va_arg_1): Likewise.
	* tree-streamer-in.c: Likewise.
	* tree-streamer.c (record_common_node): Likewise.
	* tree.c (tree_code_size): Likewise.
	(wide_int_to_tree_1): Likewise.
	(type_contains_placeholder_1): Likewise.
	(build_common_tree_nodes): Likewise.
	* tree.def (POINTER_BOUNDS_TYPE): Likewise.
	* tree.h (POINTER_BOUNDS_TYPE_P): Likewise.
	(POINTER_BOUNDS_P): Likewise.
	(BOUNDED_TYPE_P): Likewise.
	(BOUNDED_P): Likewise.
	(CALL_WITH_BOUNDS_P): Likewise.
	(pointer_bounds_type_node): Likewise.
	* value-prof.c (gimple_ic): Likewise.
	* var-tracking.c (vt_add_function_parameters): Likewise.
	* varasm.c (make_decl_rtl): Likewise.
	(assemble_start_function): Likewise.
	(output_constant): Likewise.
	(maybe_assemble_visibility): Likewise.
	* varpool.c (ctor_for_folding): Likewise.
	* chkp-builtins.def: Remove.
	* ipa-chkp.c: Remove.
	* ipa-chkp.h: Remove.
	* rtl-chkp.c: Remove.
	* rtl-chkp.h: Remove.
	* tree-chkp-opt.c: Remove.
	* tree-chkp.c: Remove.
	* tree-chkp.h: Remove.
2018-06-08  Martin Liska  <mliska@suse.cz>

	* c-attribs.c (handle_bnd_variable_size_attribute): Remove support
	for MPX (macros, related functions, fields in cgraph_node, ...).
	(handle_bnd_legacy): Likewise.
	(handle_bnd_instrument): Likewise.
	* c.opt: Likewise.
2018-06-08  Martin Liska  <mliska@suse.cz>

	* lto-partition.c (add_references_to_partition): Remove support
	for MPX (macros, related functions, fields in cgraph_node, ...).
	(add_symbol_to_partition_1): Likewise.
	(privatize_symbol_name): Likewise.
	* lto-symtab.c (lto_cgraph_replace_node): Likewise.
2018-06-08  Martin Liska  <mliska@suse.cz>

	* g++.dg/dg.exp: Do not use mpx.exp.
	* g++.dg/lto/lto.exp: Likewise.
	* g++.dg/lto/pr69729_0.C: Remove.
	* g++.dg/opt/pr71529.C: Remove.
	* g++.dg/pr63995-1.C: Remove.
	* g++.dg/pr68270.C: Remove.
	* g++.dg/pr71624.C: Remove.
	* g++.dg/pr71633.C: Remove.
	* g++.dg/pr79761.C: Remove.
	* g++.dg/pr79764.C: Remove.
	* g++.dg/pr79769.C: Remove.
	* gcc.dg/lto/chkp-privatize-1_0.c: Remove.
	* gcc.dg/lto/chkp-privatize-2_0.c: Remove.
	* gcc.dg/lto/chkp-privatize_0.c: Remove.
	* gcc.dg/lto/chkp-removed-alias_0.c: Remove.
	* gcc.dg/lto/chkp-static-bounds_0.c: Remove.
	* gcc.dg/lto/chkp-wrap-asm-name_0.c: Remove.
	* gcc.dg/lto/lto.exp: Do not use mpx.exp.
	* gcc.dg/lto/pr66221_0.c: Remove.
	* gcc.target/i386/chkp-always_inline.c: Remove.
	* gcc.target/i386/chkp-bndret.c: Remove.
	* gcc.target/i386/chkp-builtins-1.c: Remove.
	* gcc.target/i386/chkp-builtins-2.c: Remove.
	* gcc.target/i386/chkp-builtins-3.c: Remove.
	* gcc.target/i386/chkp-builtins-4.c: Remove.
	* gcc.target/i386/chkp-const-check-1.c: Remove.
	* gcc.target/i386/chkp-const-check-2.c: Remove.
	* gcc.target/i386/chkp-hidden-def.c: Remove.
	* gcc.target/i386/chkp-label-address.c: Remove.
	* gcc.target/i386/chkp-lifetime-1.c: Remove.
	* gcc.target/i386/chkp-narrow-bounds.c: Remove.
	* gcc.target/i386/chkp-pr69044.c: Remove.
	* gcc.target/i386/chkp-remove-bndint-1.c: Remove.
	* gcc.target/i386/chkp-remove-bndint-2.c: Remove.
	* gcc.target/i386/chkp-strchr.c: Remove.
	* gcc.target/i386/chkp-strlen-1.c: Remove.
	* gcc.target/i386/chkp-strlen-2.c: Remove.
	* gcc.target/i386/chkp-strlen-3.c: Remove.
	* gcc.target/i386/chkp-strlen-4.c: Remove.
	* gcc.target/i386/chkp-strlen-5.c: Remove.
	* gcc.target/i386/chkp-stropt-1.c: Remove.
	* gcc.target/i386/chkp-stropt-10.c: Remove.
	* gcc.target/i386/chkp-stropt-11.c: Remove.
	* gcc.target/i386/chkp-stropt-12.c: Remove.
	* gcc.target/i386/chkp-stropt-13.c: Remove.
	* gcc.target/i386/chkp-stropt-14.c: Remove.
	* gcc.target/i386/chkp-stropt-15.c: Remove.
	* gcc.target/i386/chkp-stropt-16.c: Remove.
	* gcc.target/i386/chkp-stropt-17.c: Remove.
	* gcc.target/i386/chkp-stropt-2.c: Remove.
	* gcc.target/i386/chkp-stropt-3.c: Remove.
	* gcc.target/i386/chkp-stropt-4.c: Remove.
	* gcc.target/i386/chkp-stropt-5.c: Remove.
	* gcc.target/i386/chkp-stropt-6.c: Remove.
	* gcc.target/i386/chkp-stropt-7.c: Remove.
	* gcc.target/i386/chkp-stropt-8.c: Remove.
	* gcc.target/i386/chkp-stropt-9.c: Remove.
	* gcc.target/i386/i386.exp: Do not use mpx.exp.
	* gcc.target/i386/indirect-thunk-11.c: Remove.
	* gcc.target/i386/indirect-thunk-12.c: Remove.
	* gcc.target/i386/indirect-thunk-attr-12.c: Remove.
	* gcc.target/i386/indirect-thunk-attr-13.c: Remove.
	* gcc.target/i386/indirect-thunk-bnd-1.c: Remove.
	* gcc.target/i386/indirect-thunk-bnd-2.c: Remove.
	* gcc.target/i386/indirect-thunk-bnd-3.c: Remove.
	* gcc.target/i386/indirect-thunk-bnd-4.c: Remove.
	* gcc.target/i386/interrupt-bnd-err-1.c: Remove.
	* gcc.target/i386/interrupt-bnd-err-2.c: Remove.
	* gcc.target/i386/mpx/alloca-1-lbv.c: Remove.
	* gcc.target/i386/mpx/alloca-1-nov.c: Remove.
	* gcc.target/i386/mpx/alloca-1-ubv.c: Remove.
	* gcc.target/i386/mpx/arg-addr-1-lbv.c: Remove.
	* gcc.target/i386/mpx/arg-addr-1-nov.c: Remove.
	* gcc.target/i386/mpx/arg-addr-1-ubv.c: Remove.
	* gcc.target/i386/mpx/bitfields-1-lbv.c: Remove.
	* gcc.target/i386/mpx/bitfields-1-nov.c: Remove.
	* gcc.target/i386/mpx/bitfields-1-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-bounds-1-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-bounds-1-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-bounds-1-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-bounds-2.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-lbounds-1-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-lbounds-1-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-lbounds-2.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-ubounds-1-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-ubounds-1-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-chk-ptr-ubounds-2.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-copy-ptr-bounds-1.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-copy-ptr-bounds-2-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-copy-ptr-bounds-2-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-copy-ptr-bounds-2-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-copy-ptr-bounds-3.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-get-ptr-lbound-1.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-get-ptr-lbound-2.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-get-ptr-ubound-1.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-get-ptr-ubound-2.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-init-ptr-bounds-1.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-init-ptr-bounds-2-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-init-ptr-bounds-3.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-1.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-2-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-2-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-2-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-3-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-3-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-3-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-narrow-ptr-bounds-4.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-null-ptr-bounds-1-bbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-set-ptr-bounds-1.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-set-ptr-bounds-2-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-set-ptr-bounds-2-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-set-ptr-bounds-2-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-set-ptr-bounds-3.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-store-ptr-bounds-1-lbv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-store-ptr-bounds-1-nov.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-store-ptr-bounds-1-ubv.c: Remove.
	* gcc.target/i386/mpx/builtin-bnd-store-ptr-bounds-2.c: Remove.
	* gcc.target/i386/mpx/calloc-1-lbv.c: Remove.
	* gcc.target/i386/mpx/calloc-1-nov.c: Remove.
	* gcc.target/i386/mpx/calloc-1-ubv.c: Remove.
	* gcc.target/i386/mpx/chkp-fix-calls-1.c: Remove.
	* gcc.target/i386/mpx/chkp-fix-calls-2.c: Remove.
	* gcc.target/i386/mpx/chkp-fix-calls-3.c: Remove.
	* gcc.target/i386/mpx/chkp-fix-calls-4.c: Remove.
	* gcc.target/i386/mpx/chkp-thunk-comdat-1.cc: Remove.
	* gcc.target/i386/mpx/chkp-thunk-comdat-2.cc: Remove.
	* gcc.target/i386/mpx/chkp-thunk-comdat-3.c: Remove.
	* gcc.target/i386/mpx/fastcall-1-lbv.c: Remove.
	* gcc.target/i386/mpx/fastcall-1-nov.c: Remove.
	* gcc.target/i386/mpx/fastcall-1-ubv.c: Remove.
	* gcc.target/i386/mpx/fastcall-2-lbv.c: Remove.
	* gcc.target/i386/mpx/fastcall-2-nov.c: Remove.
	* gcc.target/i386/mpx/fastcall-2-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-1-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-1-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-1-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-10-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-10-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-10-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-2-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-2-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-2-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-3-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-3-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-3-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-4-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-4-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-4-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-5-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-5-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-5-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-6-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-6-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-6-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-7-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-7-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-7-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-8-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-8-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-8-ubv.c: Remove.
	* gcc.target/i386/mpx/field-addr-9-lbv.c: Remove.
	* gcc.target/i386/mpx/field-addr-9-nov.c: Remove.
	* gcc.target/i386/mpx/field-addr-9-ubv.c: Remove.
	* gcc.target/i386/mpx/frame-address-1-nov.c: Remove.
	* gcc.target/i386/mpx/hard-reg-1-nov.c: Remove.
	* gcc.target/i386/mpx/hard-reg-2-lbv.c: Remove.
	* gcc.target/i386/mpx/hard-reg-2-nov.c: Remove.
	* gcc.target/i386/mpx/hard-reg-2-ubv.c: Remove.
	* gcc.target/i386/mpx/if-stmt-1-lbv.c: Remove.
	* gcc.target/i386/mpx/if-stmt-1-nov.c: Remove.
	* gcc.target/i386/mpx/if-stmt-1-ubv.c: Remove.
	* gcc.target/i386/mpx/if-stmt-2-lbv.c: Remove.
	* gcc.target/i386/mpx/if-stmt-2-nov.c: Remove.
	* gcc.target/i386/mpx/if-stmt-2-ubv.c: Remove.
	* gcc.target/i386/mpx/label-address-1.c: Remove.
	* gcc.target/i386/mpx/legacy-1-nov.c: Remove.
	* gcc.target/i386/mpx/macro.c: Remove.
	* gcc.target/i386/mpx/malloc-1-lbv.c: Remove.
	* gcc.target/i386/mpx/malloc-1-nov.c: Remove.
	* gcc.target/i386/mpx/malloc-1-ubv.c: Remove.
	* gcc.target/i386/mpx/memcpy-1.c: Remove.
	* gcc.target/i386/mpx/memmove-1.c: Remove.
	* gcc.target/i386/mpx/memmove-2.c: Remove.
	* gcc.target/i386/mpx/memmove-zero-length.c: Remove.
	* gcc.target/i386/mpx/mpx-check.h: Remove.
	* gcc.target/i386/mpx/mpx-os-support.h: Remove.
	* gcc.target/i386/mpx/mpx.exp: Remove.
	* gcc.target/i386/mpx/nested-function-1-lbv.c: Remove.
	* gcc.target/i386/mpx/nested-function-1-nov.c: Remove.
	* gcc.target/i386/mpx/nested-function-1-ubv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-1-lbv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-1-nov.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-1-ubv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-2-lbv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-2-nov.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-2-ubv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-3-lbv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-3-nov.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-3-ubv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-4-lbv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-4-nov.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-4-ubv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-5-lbv.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-5-nov.c: Remove.
	* gcc.target/i386/mpx/pointer-arg-5-ubv.c: Remove.
	* gcc.target/i386/mpx/pointer-diff-1.c: Remove.
	* gcc.target/i386/mpx/pointer-store-1-lbv.c: Remove.
	* gcc.target/i386/mpx/pointer-store-1-nov.c: Remove.
	* gcc.target/i386/mpx/pointer-store-1-ubv.c: Remove.
	* gcc.target/i386/mpx/pr65508.c: Remove.
	* gcc.target/i386/mpx/pr65531.cc: Remove.
	* gcc.target/i386/mpx/pr66048.cc: Remove.
	* gcc.target/i386/mpx/pr66134.c: Remove.
	* gcc.target/i386/mpx/pr66566.c: Remove.
	* gcc.target/i386/mpx/pr66567.c: Remove.
	* gcc.target/i386/mpx/pr66568.c: Remove.
	* gcc.target/i386/mpx/pr66569.c: Remove.
	* gcc.target/i386/mpx/pr66581.c: Remove.
	* gcc.target/i386/mpx/pr68337-1.c: Remove.
	* gcc.target/i386/mpx/pr68337-2.c: Remove.
	* gcc.target/i386/mpx/pr68416.c: Remove.
	* gcc.target/i386/mpx/pr78339.c: Remove.
	* gcc.target/i386/mpx/pr79631.c: Remove.
	* gcc.target/i386/mpx/pr79633.c: Remove.
	* gcc.target/i386/mpx/pr79753.c: Remove.
	* gcc.target/i386/mpx/pr79770.c: Remove.
	* gcc.target/i386/mpx/pr79987.c: Remove.
	* gcc.target/i386/mpx/pr79988.c: Remove.
	* gcc.target/i386/mpx/realloc-1-lbv.c: Remove.
	* gcc.target/i386/mpx/realloc-1-nov.c: Remove.
	* gcc.target/i386/mpx/realloc-1-ubv.c: Remove.
	* gcc.target/i386/mpx/realloc-2-lbv.c: Remove.
	* gcc.target/i386/mpx/realloc-2-nov.c: Remove.
	* gcc.target/i386/mpx/realloc-2-ubv.c: Remove.
	* gcc.target/i386/mpx/reference-1-lbv.cpp: Remove.
	* gcc.target/i386/mpx/reference-1-nov.cpp: Remove.
	* gcc.target/i386/mpx/reference-1-ubv.cpp: Remove.
	* gcc.target/i386/mpx/reference-2-lbv.cpp: Remove.
	* gcc.target/i386/mpx/reference-2-nov.cpp: Remove.
	* gcc.target/i386/mpx/reference-2-ubv.cpp: Remove.
	* gcc.target/i386/mpx/reference-3-lbv.cpp: Remove.
	* gcc.target/i386/mpx/reference-3-nov.cpp: Remove.
	* gcc.target/i386/mpx/reference-3-ubv.cpp: Remove.
	* gcc.target/i386/mpx/reference-4-lbv.cpp: Remove.
	* gcc.target/i386/mpx/reference-4-nov.cpp: Remove.
	* gcc.target/i386/mpx/reference-4-ubv.cpp: Remove.
	* gcc.target/i386/mpx/return-pointer-1-lbv.c: Remove.
	* gcc.target/i386/mpx/return-pointer-1-nov.c: Remove.
	* gcc.target/i386/mpx/return-pointer-1-ubv.c: Remove.
	* gcc.target/i386/mpx/return-struct-1-lbv.c: Remove.
	* gcc.target/i386/mpx/return-struct-1-nov.c: Remove.
	* gcc.target/i386/mpx/return-struct-1-ubv.c: Remove.
	* gcc.target/i386/mpx/return-struct-2-lbv.c: Remove.
	* gcc.target/i386/mpx/return-struct-2-nov.c: Remove.
	* gcc.target/i386/mpx/return-struct-2-ubv.c: Remove.
	* gcc.target/i386/mpx/return-struct-3-lbv.c: Remove.
	* gcc.target/i386/mpx/return-struct-3-nov.c: Remove.
	* gcc.target/i386/mpx/return-struct-3-ubv.c: Remove.
	* gcc.target/i386/mpx/return-struct-4-lbv.c: Remove.
	* gcc.target/i386/mpx/return-struct-4-nov.c: Remove.
	* gcc.target/i386/mpx/return-struct-4-ubv.c: Remove.
	* gcc.target/i386/mpx/return-struct-5-lbv.c: Remove.
	* gcc.target/i386/mpx/return-struct-5-nov.c: Remove.
	* gcc.target/i386/mpx/return-struct-5-ubv.c: Remove.
	* gcc.target/i386/mpx/return-struct-6-lbv.c: Remove.
	* gcc.target/i386/mpx/return-struct-6-nov.c: Remove.
	* gcc.target/i386/mpx/return-struct-6-ubv.c: Remove.
	* gcc.target/i386/mpx/sincos-1-nov.c: Remove.
	* gcc.target/i386/mpx/static-array-1-lbv.c: Remove.
	* gcc.target/i386/mpx/static-array-1-nov.c: Remove.
	* gcc.target/i386/mpx/static-array-1-ubv.c: Remove.
	* gcc.target/i386/mpx/static-init-1-lbv.c: Remove.
	* gcc.target/i386/mpx/static-init-1-nov.c: Remove.
	* gcc.target/i386/mpx/static-init-1-ubv.c: Remove.
	* gcc.target/i386/mpx/static-init-2-lbv.c: Remove.
	* gcc.target/i386/mpx/static-init-2-nov.c: Remove.
	* gcc.target/i386/mpx/static-init-2-ubv.c: Remove.
	* gcc.target/i386/mpx/static-init-3-lbv.c: Remove.
	* gcc.target/i386/mpx/static-init-3-nov.c: Remove.
	* gcc.target/i386/mpx/static-init-3-ubv.c: Remove.
	* gcc.target/i386/mpx/static-init-4-lbv.c: Remove.
	* gcc.target/i386/mpx/static-init-4-nov.c: Remove.
	* gcc.target/i386/mpx/static-init-4-ubv.c: Remove.
	* gcc.target/i386/mpx/static-init-5-lbv.c: Remove.
	* gcc.target/i386/mpx/static-init-5-nov.c: Remove.
	* gcc.target/i386/mpx/static-init-5-ubv.c: Remove.
	* gcc.target/i386/mpx/static-init-6-lbv.c: Remove.
	* gcc.target/i386/mpx/static-init-6-nov.c: Remove.
	* gcc.target/i386/mpx/static-init-6-ubv.c: Remove.
	* gcc.target/i386/mpx/static-string-1-lbv.c: Remove.
	* gcc.target/i386/mpx/static-string-1-nov.c: Remove.
	* gcc.target/i386/mpx/static-string-1-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-1-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-1-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-1-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-10-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-10-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-10-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-2-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-2-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-2-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-3-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-3-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-3-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-4-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-4-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-4-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-5-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-5-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-5-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-6-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-6-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-6-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-7-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-7-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-7-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-8-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-8-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-8-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-9-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-arg-9-nov.c: Remove.
	* gcc.target/i386/mpx/struct-arg-9-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-copy-1-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-copy-1-nov.c: Remove.
	* gcc.target/i386/mpx/struct-copy-1-ubv.c: Remove.
	* gcc.target/i386/mpx/struct-copy-2-lbv.c: Remove.
	* gcc.target/i386/mpx/struct-copy-2-nov.c: Remove.
	* gcc.target/i386/mpx/struct-copy-2-ubv.c: Remove.
	* gcc.target/i386/mpx/thread-local-var-1-lbv.c: Remove.
	* gcc.target/i386/mpx/thread-local-var-1-nov.c: Remove.
	* gcc.target/i386/mpx/thread-local-var-1-ubv.c: Remove.
	* gcc.target/i386/mpx/union-arg-1-lbv.c: Remove.
	* gcc.target/i386/mpx/union-arg-1-nov.c: Remove.
	* gcc.target/i386/mpx/union-arg-1-ubv.c: Remove.
	* gcc.target/i386/mpx/va-arg-pack-1-lbv.c: Remove.
	* gcc.target/i386/mpx/va-arg-pack-1-nov.c: Remove.
	* gcc.target/i386/mpx/va-arg-pack-1-ubv.c: Remove.
	* gcc.target/i386/mpx/va-arg-pack-2-lbv.c: Remove.
	* gcc.target/i386/mpx/va-arg-pack-2-nov.c: Remove.
	* gcc.target/i386/mpx/va-arg-pack-2-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-1-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-1-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-1-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-2-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-2-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-2-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-3-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-3-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-3-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-4-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-4-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-4-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-5-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-5-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-5-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-6-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-6-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-6-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-7-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-7-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-7-ubv.c: Remove.
	* gcc.target/i386/mpx/vararg-8-lbv.c: Remove.
	* gcc.target/i386/mpx/vararg-8-nov.c: Remove.
	* gcc.target/i386/mpx/vararg-8-ubv.c: Remove.
	* gcc.target/i386/mpx/vla-1-lbv.c: Remove.
	* gcc.target/i386/mpx/vla-1-nov.c: Remove.
	* gcc.target/i386/mpx/vla-1-ubv.c: Remove.
	* gcc.target/i386/mpx/vla-2-lbv.c: Remove.
	* gcc.target/i386/mpx/vla-2-nov.c: Remove.
	* gcc.target/i386/mpx/vla-2-ubv.c: Remove.
	* gcc.target/i386/mpx/vla-trailing-1-lbv.c: Remove.
	* gcc.target/i386/mpx/vla-trailing-1-nov.c: Remove.
	* gcc.target/i386/mpx/vla-trailing-1-ubv.c: Remove.
	* gcc.target/i386/pr63995-2.c: Remove.
	* gcc.target/i386/pr64805.c: Remove.
	* gcc.target/i386/pr65044.c: Remove.
	* gcc.target/i386/pr65167.c: Remove.
	* gcc.target/i386/pr65183.c: Remove.
	* gcc.target/i386/pr65184.c: Remove.
	* gcc.target/i386/pr65523.c: Remove.
	* gcc.target/i386/pr70876.c: Remove.
	* gcc.target/i386/pr70877.c: Remove.
	* gcc.target/i386/pr71458.c: Remove.
	* gcc.target/i386/pr80880.c: Remove.
	* gcc.target/i386/ret-thunk-25.c: Remove.
	* gcc.target/i386/thunk-retbnd.c: Remove.
	* lib/mpx-dg.exp: Remove.
	* gcc.target/i386/funcspec-56.inc: Adjust test case.

From-SVN: r261304
2018-06-08 07:53:31 +00:00
Qing Zhao
8b0b334af3 2nd Patch for PR78009
Patch for PR83026

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78809
Inline strcmp with small constant strings

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83026
missing strlen optimization for strcmp of unequal strings

The design doc for PR78809 is at:
https://www.mail-archive.com/gcc@gcc.gnu.org/msg83822.html

this patch is for the second part of change of PR78809 and PR83026:

B. for strncmp (s1, s2, n) (!)= 0 or strcmp (s1, s2) (!)= 0

   B.1. (PR83026) When the lengths of both arguments are constant and
        it's a strcmp:
      * if the lengths are NOT equal, we can safely fold the call
        to a non-zero value.
      * otherwise, do nothing now.

   B.2. (PR78809) When the length of one argument is constant, try to replace
   the call with a __builtin_str(n)cmp_eq call where possible, i.e:

   strncmp (s, STR, C) (!)= 0 in which, s is a pointer to a string, STR is a
   string with constant length, C is a constant.
     if (C <= strlen(STR) && sizeof_array(s) > C)
       {
         replace this call with
         __builtin_strncmp_eq (s, STR, C) (!)= 0
       }
     if (C > strlen(STR)
       {
         it can be safely treated as a call to strcmp (s, STR) (!)= 0
         can handled by the following strcmp.
       }

   strcmp (s, STR) (!)= 0 in which, s is a pointer to a string, STR is a
   string with constant length.
     if  (sizeof_array(s) > strlen(STR))
       {
         replace this call with
         __builtin_strcmp_eq (s, STR, strlen(STR)+1) (!)= 0
       }

   later when expanding the new __builtin_str(n)cmp_eq calls, first expand them
   as __builtin_memcmp_eq, if the expansion does not succeed, change them back
   to call to __builtin_str(n)cmp.

adding test case strcmpopt_2.c and strcmpopt_4.c into gcc.dg for part B of
PR78809 adding test case strcmpopt_3.c into gcc.dg for PR83026

From-SVN: r261039
2018-05-31 20:01:42 +00:00
Tom de Vries
1f62d6375b [openacc] Add __builtin_goacc_parlevel_{id,size}
2018-05-02  Tom de Vries  <tom@codesourcery.com>

	PR libgomp/82428
	* builtins.def (DEF_GOACC_BUILTIN_ONLY): Define.
	* omp-builtins.def (BUILT_IN_GOACC_PARLEVEL_ID)
	(BUILT_IN_GOACC_PARLEVEL_SIZE): New builtin.
	* builtins.c (expand_builtin_goacc_parlevel_id_size): New function.
	(expand_builtin): Call expand_builtin_goacc_parlevel_id_size.
	* doc/extend.texi (Other Builtins): Add __builtin_goacc_parlevel_id and
	__builtin_goacc_parlevel_size.

	* f95-lang.c (DEF_GOACC_BUILTIN_ONLY): Define.

	* c-c++-common/goacc/builtin-goacc-parlevel-id-size-2.c: New test.
	* c-c++-common/goacc/builtin-goacc-parlevel-id-size.c: New test.

	* testsuite/libgomp.oacc-c-c++-common/gang-static-2.c: Use
	__builtin_goacc_parlevel_{id,size}.
	* testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-g-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-g-2.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-v-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-g-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-v-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-w-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Same.
	* testsuite/libgomp.oacc-c-c++-common/tile-1.c: Same.

From-SVN: r259850
2018-05-02 17:53:29 +00:00
Jakub Jelinek
85ec4feb11 Update copyright years.
From-SVN: r256169
2018-01-03 11:03:58 +01:00
Michael Meissner
c6cfa2bfa0 builtins.def: (_Float<N> and _Float<N>X BUILT_IN_CEIL): Add _Float<N> and _Float<N>X variants...
[gcc]
2017-12-28  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* builtins.def: (_Float<N> and _Float<N>X BUILT_IN_CEIL): Add
	_Float<N> and _Float<N>X variants for rounding built-in
	functions.
	(_Float<N> and _Float<N>X BUILT_IN_FLOOR): Likewise.
	(_Float<N> and _Float<N>X BUILT_IN_NEARBYINT): Likewise.
	(_Float<N> and _Float<N>X BUILT_IN_RINT): Likewise.
	(_Float<N> and _Float<N>X BUILT_IN_ROUND): Likewise.
	(_Float<N> and _Float<N>X BUILT_IN_TRUNC): Likewise.
	* builtins.c (mathfn_built_in_2): Likewise.
	* internal-fn.def (CEIL): Likewise.
	(FLOOR): Likewise.
	(NEARBYINT): Likewise.
	(RINT): Likewise.
	(ROUND): Likewise.
	(TRUNC): Likewise.
	* convert.c (convert_to_integer_1): Likewise.
	* fold-const.c (tree_call_nonnegative_warnv_p): Likewise.
	(integer_valued_real_call_p): Likewise.
	* fold-const-call.c (fold_const_call_ss): Likewise.
	* gencfn-macros.c (print_case_cfn): Change CFN and operator
	printers to take a const char * suffix instead of a bool.
	(print_define_operator_list): Likewise.
	(fltall_suffixes): New list of suffixes, that include the
	traditional suffixes as well as all of the _Float<N> and
	_Float<N>X suffixes.
	(main): For _Float<N> and _Float<N>X functions, emit both
	<name>_FN and <name>_ALL variants.  The <macro>_FN variant only
	has the _Float<N> and _Float<N>X case names or operators.  The
	<name>_ALL variant has both the traditional and the
	_Float<N>/_Float<N>X case names or operators.
	* match.pd (COPYSIGN optimizations): Provide optimizations for
	_Float<N> and _Float<N>X types where possible.
	(MIN/MAX optimizations): Likewise.
	(sqrt optimizations): Likewise.
	(rounding optimizations): Likewise.

[gcc/c]
2017-12-28  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* c-decl.c (header_for_builtin_fn): Add integer rounding _Float<N>
	and _Float<N>X built-in functions.

From-SVN: r256026
2017-12-28 21:19:12 +00:00
Jakub Jelinek
be19453896 builtins.def (BUILT_IN_NEXTAFTER, [...]): Use ATTR_MATHFN_ERRNO instead of ATTR_MATHFN_FPROUNDING_ERRNO.
* builtins.def (BUILT_IN_NEXTAFTER, BUILT_IN_NEXTAFTERF,
	BUILT_IN_NEXTAFTERL, BUILT_IN_NEXTTOWARD, BUILT_IN_NEXTTOWARDF,
	BUILT_IN_NEXTTOWARDL): Use ATTR_MATHFN_ERRNO instead of
	ATTR_MATHFN_FPROUNDING_ERRNO.

From-SVN: r255586
2017-12-12 19:53:01 +01:00
Julia Koval
5e9d6aa4c2 Remove Cilk Plus support.
* Makefile.def (target_modules): Remove libcilkrts.
	* Makefile.in: Ditto.
	* configure: Ditto.
	* configure.ac: Ditto.

contrib/
	* contrib/gcc_update: Ditto.

gcc/
	* Makefile.in (cilkplus.def, cilk-builtins.def, c-family/cilk.o, 
	c-family/c-cilkplus.o, c-family/array-notation-common.o,
	cilk-common.o, cilk.h, cilk-common.c): Remove.
	* builtin-types.def
	(BT_FN_INT_PTR_PTR_PTR_FTYPE_BT_INT_BT_PTR_BT_PTR_BT_PTR): Remove.
	* builtins.c (is_builtin_name): Remove cilkplus condition.
	(BUILT_IN_CILK_DETACH, BUILT_IN_CILK_POP_FRAME): Remove.
	* builtins.def (DEF_CILK_BUILTIN_STUB, DEF_CILKPLUS_BUILTIN,
	cilk-builtins.def, cilkplus.def): Remove.
	* cif-code.def (CILK_SPAWN): Remove.
	* cilk-builtins.def: Delete.
	* cilk-common.c: Ditto.
	* cilk.h: Ditto.
	* cilkplus.def: Ditto.
	* config/darwin.h (fcilkplus): Delete.
	* cppbuiltin.c: Ditto.
	* doc/extend.texi: Remove cilkplus doc.
	* doc/generic.texi: Ditto.
	* doc/invoke.texi: Ditto.
	* doc/passes.texi: Ditto.
	* gcc.c (fcilkplus): Remove.
	* gengtype.c (cilk.h): Remove.
	* gimple-pretty-print.c (dump_gimple_omp_for): Remove cilkplus support.
	* gimple.h (GF_OMP_FOR_KIND_CILKFOR, GF_OMP_FOR_KIND_CILKSIMD): Remove.
	* gimplify.c (gimplify_return_expr, maybe_fold_stmt,
	gimplify_call_expr, is_gimple_stmt, gimplify_modify_expr,
	gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses,
	gimplify_omp_for, gimplify_expr): Remove cilkplus conditions.
	* ipa-fnsummary.c (ipa_dump_fn_summary, compute_fn_summary,
	inline_read_section): Ditto.
	* ipa-inline-analysis.c (cilk.h): Remove.
	* ira.c (ira_setup_eliminable_regset): Remove cilkplus support.
	* lto-wrapper.c (merge_and_complain, append_compiler_options,
	append_linker_options): Remove condition for fcilkplus.
	* lto/lto-lang.c (cilk.h): Remove.
	(lto_init): Remove condition for fcilkplus.
	* omp-expand.c (expand_cilk_for_call): Delete.
	(expand_omp_taskreg, expand_omp_for_static_chunk,
	expand_omp_for): Remove cilkplus
	conditions.
	(expand_cilk_for): Delete.
	* omp-general.c (omp_extract_for_data): Remove cilkplus support.
	* omp-low.c (scan_sharing_clauses, create_omp_child_function,
	execute_lower_omp, diagnose_sb_0): Ditto.
	* omp-simd-clone.c (simd_clone_clauses_extract): Ditto.
	* tree-core.h (OMP_CLAUSE__CILK_FOR_COUNT_): Delete.
	* tree-nested.c: Ditto.
	* tree-pretty-print.c (dump_omp_clause): Remove cilkplus support.
	(dump_generic_node): Ditto.
	* tree.c (OMP_CLAUSE__CILK_FOR_COUNT_): Delete.
	* tree.def (cilk_simd, cilk_for, cilk_spawn_stmt,
	cilk_sync_stmt): Delete.
	* tree.h (CILK_SPAWN_FN, EXPR_CILK_SPAWN): Delete.

gcc/c-family/
	* array-notation-common.c: Delete.
	* c-cilkplus.c: Ditto.
	* c-common.c (_Cilk_spawn, _Cilk_sync, _Cilk_for): Remove.
	* c-common.def (ARRAY_NOTATION_REF): Remove.
	* c-common.h (RID_CILK_SPAWN, build_array_notation_expr,
	build_array_notation_ref, C_ORT_CILK, c_check_cilk_loop,
	c_validate_cilk_plus_loop, cilkplus_an_parts,
	cilk_ignorable_spawn_rhs_op,
	cilk_recognize_spawn): Remove.
	* c-gimplify.c (CILK_SPAWN_STMT): Remove.
	* c-omp.c: Remove CILK_SIMD check.
	* c-pragma.c: Ditto.
	* c-pragma.h: Remove CILK related pragmas.
	* c-pretty-print.c (c_pretty_printer::postfix_expression): Remove
	ARRAY_NOTATION_REF condition.
	(c_pretty_printer::expression): Ditto.
	* c.opt (fcilkplus): Remove.
	* cilk.c: Delete.

gcc/c/
	* Make-lang.in (c/c-array-notation.o): Remove.
	* c-array-notation.c: Delete.
	* c-decl.c: Remove cilkplus condition.
	* c-parser.c (c_parser_cilk_simd, c_parser_cilk_for,
	c_parser_cilk_verify_simd, c_parser_array_notation,
	c_parser_cilk_clause_vectorlength, c_parser_cilk_grainsize,
	c_parser_cilk_simd_fn_vector_attrs,
	c_finish_cilk_simd_fn_tokens): Delete.
	(c_parser_declaration_or_fndef): Remove cilkplus condition.
	(c_parser_direct_declarator_inner): Ditto.
	(CILK_SIMD_FN_CLAUSE_MASK): Delete.
	(c_parser_attributes, c_parser_compound_statement,
	c_parser_statement_after_labels, c_parser_if_statement,
	c_parser_switch_statement, c_parser_while_statement,
	c_parser_do_statement, c_parser_for_statement,
	c_parser_unary_expression, c_parser_postfix_expression,
	c_parser_postfix_expression_after_primary,
	c_parser_pragma, c_parser_omp_clause_name, c_parser_omp_all_clauses,
	c_parser_omp_for_loop,
	c_finish_omp_declare_simd): Remove cilkplus support.
	* c-typeck.c (build_array_ref, build_function_call_vec,
	convert_arguments, lvalue_p, build_compound_expr, c_finish_return,
	c_finish_if_stmt, c_finish_loop,
	build_binary_op): Remove cilkplus support.
	
gcc/cp/
	* Make-lang.in (cp/cp-array-notation.o, cp/cp-cilkplus.o): Delete.
	* call.c (convert_for_arg_passing, build_cxx_call): Remove cilkplus.
	* constexpr.c (potential_constant_expression_1): Ditto.
	* cp-array-notation.c: Delete.
	* cp-cilkplus.c: Ditto.
	* cp-cilkplus.h: Ditto.
	* cp-gimplify.c (cp_gimplify_expr, cp_fold_r, cp_genericize): Remove
	cilkplus condition.
	* cp-objcp-common.c (ARRAY_NOTATION_REF): Delete.
	* cp-tree.h (cilkplus_an_triplet_types_ok_p): Delete.
	* decl.c (grokfndecl, finish_function): Remove cilkplus condition.
	* error.c (dump_decl, dump_expr): Remove ARRAY_NOTATION_REF condition.
	* lambda.c (cp-cilkplus.h): Remove.
	* parser.c (cp_parser_cilk_simd, cp_parser_cilk_for,
	cp_parser_cilk_simd_vectorlength): Delete.
	(cp_debug_parser, cp_parser_ctor_initializer_opt_and_function_body,
	cp_parser_postfix_expression, cp_parser_postfix_open_square_expression,
	cp_parser_statement, cp_parser_jump_statement,
	cp_parser_direct_declarator,
	cp_parser_late_return_type_opt, cp_parser_gnu_attribute_list,
	cp_parser_omp_clause_name, cp_parser_omp_clause_aligned,
	cp_parser_omp_clause_linear, cp_parser_omp_all_clauses,
	cp_parser_omp_flush, cp_parser_omp_for_cond, cp_parser_omp_for_incr,
	cp_parser_omp_for_loop_init, cp_parser_omp_for_loop,
	cp_parser_omp_declare_simd): Remove cilkplus support.
	(CILK_SIMD_FN_CLAUSE_MASK, cp_parser_late_parsing_cilk_simd_fn_info,
	cp_parser_cilk_grainsize): Remove.
	(cp_parser_pragma, c_parse_file): Remove cilkplus support.
	(cp_parser_cilk_simd_vectorlength, cp_parser_cilk_simd_linear,
	cp_parser_cilk_simd_clause_name, cp_parser_cilk_simd_all_clauses,
	cp_parser_cilk_simd, cp_parser_cilk_for): Remove.
	* parser.h (IN_CILK_SIMD_FOR, IN_CILK_SPAWN): Remove.
	* pt.c (tsubst_attribute, tsubst_expr, tsubst_copy_and_build): Remove
	cilkplus support.
	* semantics.c (finish_goto_stmt, begin_while_stmt, finish_do_body,
	finish_init_stmt, finish_switch_cond, simplify_aggr_init_expr,
	finish_omp_clauses, finish_omp_clauses,
	finish_omp_for): Remove cilkplus support.
	* tree.c (lvalue_kind): Remove ARRAY_NOTATION_REF conditon.
	* typeck.c (cp_build_array_ref, cp_build_compound_expr,
	check_return_expr): Remove cilkplus support.

gcc/testsuite/
	* c-c++-common/attr-simd-3.c: Delete.
	* c-c++-common/cilk-plus/AN/an-if.c: Delete.
	* c-c++-common/cilk-plus/AN/array_test1.c: Delete.
	* c-c++-common/cilk-plus/AN/array_test2.c: Delete.
	* c-c++-common/cilk-plus/AN/array_test_ND.c: Delete.
	* c-c++-common/cilk-plus/AN/builtin_fn_custom.c: Delete.
	* c-c++-common/cilk-plus/AN/builtin_fn_mutating.c: Delete.
	* c-c++-common/cilk-plus/AN/builtin_func_double.c: Delete.
	* c-c++-common/cilk-plus/AN/builtin_func_double2.c: Delete.
	* c-c++-common/cilk-plus/AN/comma_exp.c: Delete.
	* c-c++-common/cilk-plus/AN/conditional.c: Delete.
	* c-c++-common/cilk-plus/AN/decl-ptr-colon.c: Delete.
	* c-c++-common/cilk-plus/AN/dimensionless-arrays.c: Delete.
	* c-c++-common/cilk-plus/AN/exec-once.c: Delete.
	* c-c++-common/cilk-plus/AN/exec-once2.c: Delete.
	* c-c++-common/cilk-plus/AN/fn_ptr-2.c: Delete.
	* c-c++-common/cilk-plus/AN/fn_ptr.c: Delete.
	* c-c++-common/cilk-plus/AN/fp_triplet_values.c: Delete.
	* c-c++-common/cilk-plus/AN/gather-scatter-errors.c: Delete.
	* c-c++-common/cilk-plus/AN/gather_scatter.c: Delete.
	* c-c++-common/cilk-plus/AN/if_test.c: Delete.
	* c-c++-common/cilk-plus/AN/if_test_errors.c: Delete.
	* c-c++-common/cilk-plus/AN/misc.c: Delete.
	* c-c++-common/cilk-plus/AN/n-ptr-test.c: Delete.
	* c-c++-common/cilk-plus/AN/parser_errors.c: Delete.
	* c-c++-common/cilk-plus/AN/parser_errors2.c: Delete.
	* c-c++-common/cilk-plus/AN/parser_errors3.c: Delete.
	* c-c++-common/cilk-plus/AN/parser_errors4.c: Delete.
	* c-c++-common/cilk-plus/AN/pr57457-2.c: Delete.
	* c-c++-common/cilk-plus/AN/pr57457.c: Delete.
	* c-c++-common/cilk-plus/AN/pr57490.c: Delete.
	* c-c++-common/cilk-plus/AN/pr57541-2.c: Delete.
	* c-c++-common/cilk-plus/AN/pr57541.c: Delete.
	* c-c++-common/cilk-plus/AN/pr57577.c: Delete.
	* c-c++-common/cilk-plus/AN/pr58942.c: Delete.
	* c-c++-common/cilk-plus/AN/pr61191.c: Delete.
	* c-c++-common/cilk-plus/AN/pr61455-2.c: Delete.
	* c-c++-common/cilk-plus/AN/pr61455.c: Delete.
	* c-c++-common/cilk-plus/AN/pr61962.c: Delete.
	* c-c++-common/cilk-plus/AN/pr61963.c: Delete.
	* c-c++-common/cilk-plus/AN/pr62008.c: Delete.
	* c-c++-common/cilk-plus/AN/pr63884.c: Delete.
	* c-c++-common/cilk-plus/AN/rank_mismatch.c: Delete.
	* c-c++-common/cilk-plus/AN/rank_mismatch2.c: Delete.
	* c-c++-common/cilk-plus/AN/rank_mismatch3.c: Delete.
	* c-c++-common/cilk-plus/AN/sec_implicit.c: Delete.
	* c-c++-common/cilk-plus/AN/sec_implicit2.c: Delete.
	* c-c++-common/cilk-plus/AN/sec_implicit_ex.c: Delete.
	* c-c++-common/cilk-plus/AN/sec_reduce_ind_same_value.c: Delete.
	* c-c++-common/cilk-plus/AN/sec_reduce_max_min_ind.c: Delete.
	* c-c++-common/cilk-plus/AN/sec_reduce_return.c: Delete.
	* c-c++-common/cilk-plus/AN/side-effects-1.c: Delete.
	* c-c++-common/cilk-plus/AN/test_builtin_return.c: Delete.
	* c-c++-common/cilk-plus/AN/test_sec_limits.c: Delete.
	* c-c++-common/cilk-plus/AN/tst_lngth.c: Delete.
	* c-c++-common/cilk-plus/AN/vla.c: Delete.
	* c-c++-common/cilk-plus/CK/Wparentheses-1.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk-for-2.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk-for-3.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk-fors.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk_for_errors.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk_for_grain.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk_for_grain_errors.c: Delete.
	* c-c++-common/cilk-plus/CK/cilk_for_ptr_iter.c: Delete.
	* c-c++-common/cilk-plus/CK/compound_cilk_spawn.c: Delete.
	* c-c++-common/cilk-plus/CK/concec_cilk_spawn.c: Delete.
	* c-c++-common/cilk-plus/CK/errors.c: Delete.
	* c-c++-common/cilk-plus/CK/fib.c: Delete.
	* c-c++-common/cilk-plus/CK/fib_init_expr_xy.c: Delete.
	* c-c++-common/cilk-plus/CK/fib_no_return.c: Delete.
	* c-c++-common/cilk-plus/CK/fib_no_sync.c: Delete.
	* c-c++-common/cilk-plus/CK/invalid_spawns.c: Delete.
	* c-c++-common/cilk-plus/CK/invalid_sync.c: Delete.c
	* c-c++-common/cilk-plus/CK/nested_cilk_for.c: Delete.
	* c-c++-common/cilk-plus/CK/no_args_error.c: Delete.
	* c-c++-common/cilk-plus/CK/pr59631.c: Delete.
	* c-c++-common/cilk-plus/CK/pr60197-2.c: Delete.
	* c-c++-common/cilk-plus/CK/pr60197.c: Delete.
	* c-c++-common/cilk-plus/CK/pr60469.c: Delete.
	* c-c++-common/cilk-plus/CK/pr60586.c: Delete.
	* c-c++-common/cilk-plus/CK/pr63307.c: Delete.
	* c-c++-common/cilk-plus/CK/pr69826-1.c: Delete.
	* c-c++-common/cilk-plus/CK/pr69826-2.c: Delete.
	* c-c++-common/cilk-plus/CK/pr79428-4.c: Delete.
	* c-c++-common/cilk-plus/CK/pr79428-7.c: Delete.
	* c-c++-common/cilk-plus/CK/spawn_in_return.c: Delete.
	* c-c++-common/cilk-plus/CK/spawnee_inline.c: Delete.
	* c-c++-common/cilk-plus/CK/spawner_inline.c: Delete.
	* c-c++-common/cilk-plus/CK/spawning_arg.c: Delete.
	* c-c++-common/cilk-plus/CK/steal_check.c: Delete.
	* c-c++-common/cilk-plus/CK/sync_wo_spawn.c: Delete.
	* c-c++-common/cilk-plus/CK/test__cilk.c: Delete.
	* c-c++-common/cilk-plus/CK/varargs_test.c: Delete.
	* c-c++-common/cilk-plus/PS/Wparentheses-1.c: Delete.
	* c-c++-common/cilk-plus/PS/body.c: Delete.
	* c-c++-common/cilk-plus/PS/clauses1.c: Delete.
	* c-c++-common/cilk-plus/PS/clauses2.c: Delete.
	* c-c++-common/cilk-plus/PS/clauses3.c: Delete.
	* c-c++-common/cilk-plus/PS/clauses4.c: Delete.
	* c-c++-common/cilk-plus/PS/for1.c: Delete.
	* c-c++-common/cilk-plus/PS/for2.c: Delete.
	* c-c++-common/cilk-plus/PS/for3.c: Delete.
	* c-c++-common/cilk-plus/PS/pr69363.c: Delete.
	* c-c++-common/cilk-plus/PS/reduction-1.c: Delete.
	* c-c++-common/cilk-plus/PS/reduction-2.c: Delete.
	* c-c++-common/cilk-plus/PS/reduction-3.c: Delete.
	* c-c++-common/cilk-plus/PS/run-1.c: Delete.
	* c-c++-common/cilk-plus/PS/safelen.c: Delete.
	* c-c++-common/cilk-plus/PS/vectorlength-2.c: Delete.
	* c-c++-common/cilk-plus/PS/vectorlength-3.c: Delete.
	* c-c++-common/cilk-plus/PS/vectorlength.c: Delete.
	* c-c++-common/cilk-plus/SE/ef_error.c: Delete.
	* c-c++-common/cilk-plus/SE/ef_error2.c: Delete.
	* c-c++-common/cilk-plus/SE/ef_error3.c: Delete.
	* c-c++-common/cilk-plus/SE/ef_test.c: Delete.
	* c-c++-common/cilk-plus/SE/ef_test2.c: Delete.
	* c-c++-common/cilk-plus/SE/vlength_errors.c: Delete.
	* g++.dg/cilk-plus/AN/array_function.c: Delete.
	* g++.dg/cilk-plus/AN/array_test1_tplt.c: Delete.
	* g++.dg/cilk-plus/AN/array_test2_tplt.c: Delete.
	* g++.dg/cilk-plus/AN/array_test_ND_tplt.c: Delete.
	* g++.dg/cilk-plus/AN/braced_list.c: Delete.
	* g++.dg/cilk-plus/AN/builtin_fn_custom_tplt.c: Delete.
	* g++.dg/cilk-plus/AN/builtin_fn_mutating_tplt.c: Delete.
	* g++.dg/cilk-plus/AN/fp_triplet_values_tplt.c: Delete.
	* g++.dg/cilk-plus/AN/postincr_test.c: Delete.
	* g++.dg/cilk-plus/AN/preincr_test.c: Delete.
	* g++.dg/cilk-plus/CK/catch_exc.c: Delete.
	* g++.dg/cilk-plus/CK/cf3.c: Delete.
	* g++.dg/cilk-plus/CK/cilk-for-tplt.c: Delete.
	* g++.dg/cilk-plus/CK/const_spawn.c: Delete.
	* g++.dg/cilk-plus/CK/fib-opr-overload.c: Delete.
	* g++.dg/cilk-plus/CK/fib-tplt.c: Delete.
	* g++.dg/cilk-plus/CK/for1.c: Delete.
	* g++.dg/cilk-plus/CK/lambda_spawns.c: Delete.
	* g++.dg/cilk-plus/CK/lambda_spawns_tplt.c: Delete.
	* g++.dg/cilk-plus/CK/pr60586.c: Delete.
	* g++.dg/cilk-plus/CK/pr66326.c: Delete.
	* g++.dg/cilk-plus/CK/pr68001.c: Delete.
	* g++.dg/cilk-plus/CK/pr68997.c: Delete.
	* g++.dg/cilk-plus/CK/pr69024.c: Delete.
	* g++.dg/cilk-plus/CK/pr69048.c: Delete.
	* g++.dg/cilk-plus/CK/pr69267.c: Delete.
	* g++.dg/cilk-plus/CK/pr80038.c: Delete.
	* g++.dg/cilk-plus/CK/stl_iter.c: Delete.
	* g++.dg/cilk-plus/CK/stl_rev_iter.c: Delete.
	* g++.dg/cilk-plus/CK/stl_test.c: Delete.
	* g++.dg/cilk-plus/cilk-plus.exp
	* g++.dg/cilk-plus/ef_test.C: Delete.
	* g++.dg/cilk-plus/for.C: Delete.
	* g++.dg/cilk-plus/for2.C: Delete.
	* g++.dg/cilk-plus/for3.C: Delete.
	* g++.dg/cilk-plus/for4.C: Delete.
	* g++.dg/cilk-plus/pr60967.C: Delete.
	* g++.dg/cilk-plus/pr69028.C: Delete.
	* g++.dg/cilk-plus/pr70565.C: Delete.
	* g++.dg/pr57662.C: Delete.
	* gcc.dg/cilk-plus/cilk-plus.exp
	* gcc.dg/cilk-plus/for1.c: Delete.
	* gcc.dg/cilk-plus/for2.c: Delete.
	* gcc.dg/cilk-plus/jump-openmp.c: Delete.
	* gcc.dg/cilk-plus/jump.c: Delete.
	* gcc.dg/cilk-plus/pr69798-1.c: Delete.
	* gcc.dg/cilk-plus/pr69798-2.c: Delete.
	* gcc.dg/cilk-plus/pr78306.c: Delete.
	* gcc.dg/cilk-plus/pr79116.c: Delete.
	* gcc.dg/graphite/id-28.c: Delete.
	* lib/cilk-plus-dg.exp: Delete.
	* lib/target-supports.exp (cilkplus_runtime): Delete.

Co-Authored-By: Sebastian Peryt <sebastian.peryt@intel.com>

From-SVN: r255195
2017-11-28 11:35:37 +01:00
Michael Meissner
c67624232a builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and _Float<N>X built-in functions so that the variant...
2017-10-31  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and
	_Float<N>X built-in functions so that the variant without the
	"__builtin_" prefix is only enabled for the GNU C and Objective C
	languages when they are in non-strict ANSI/ISO mode.
	(DEF_EXT_LIB_FLOATN_NX_BUILTINS): Likewise.
	* target.def (floatn_builtin_p): Add a target hook to control
	whether _Float<N> and _Float<N>X built-in functions without the
	"__builtin_" prefix are enabled, and return true for C and
	Objective C in the default hook.  Include langhooks.h in
	targhooks.c.
	* targhooks.h (default_floatn_builtin_p): Likewise.
	* targhooks.c (default_floatn_builtin_p): Likewise.
	* doc/tm.texi.in (TARGET_FLOATN_BUILTIN_P): Document the
	floatn_builtin_p target hook.
	* doc/tm.texi (TARGET_FLOATN_BUILTIN_P): Likewise.

From-SVN: r254277
2017-10-31 18:56:05 +00:00
Michael Meissner
ee5fd23a48 builtins.c (CASE_MATHFN_FLOATN): New helper macro to add cases for math functions that have _Float<N> and...
[gcc]
2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* builtins.c (CASE_MATHFN_FLOATN): New helper macro to add cases
	for math functions that have _Float<N> and _Float<N>X variants.
	(mathfn_built_in_2): Add support for math functions that have
	_Float<N> and _Float<N>X variants.
	(DEF_INTERNAL_FLT_FLOATN_FN): New helper macro.
	(expand_builtin_mathfn_ternary): Add support for fma with
	_Float<N> and _Float<N>X variants.
	(expand_builtin): Likewise.
	(fold_builtin_3): Likewise.
	* builtins.def (DEF_EXT_LIB_FLOATN_NX_BUILTINS): New macro to
	create math function _Float<N> and _Float<N>X variants as external
	library builtins.
	(BUILT_IN_COPYSIGN _Float<N> and _Float<N>X variants) Use
	DEF_EXT_LIB_FLOATN_NX_BUILTINS to make built-in functions using
	the __builtin_ prefix and if not strict ansi, without the prefix.
	(BUILT_IN_FABS _Float<N> and _Float<N>X variants): Likewise.
	(BUILT_IN_FMA _Float<N> and _Float<N>X variants): Likewise.
	(BUILT_IN_FMAX _Float<N> and _Float<N>X variants): Likewise.
	(BUILT_IN_FMIN _Float<N> and _Float<N>X variants): Likewise.
	(BUILT_IN_NAN _Float<N> and _Float<N>X variants): Likewise.
	(BUILT_IN_SQRT _Float<N> and _Float<N>X variants): Likewise.
	* builtin-types.def (BT_FN_FLOAT16_FLOAT16_FLOAT16_FLOAT16): New
	function signatures for fma _Float<N> and _Float<N>X variants.
	(BT_FN_FLOAT32_FLOAT32_FLOAT32_FLOAT32): Likewise.
	(BT_FN_FLOAT64_FLOAT64_FLOAT64_FLOAT64): Likewise.
	(BT_FN_FLOAT128_FLOAT128_FLOAT128_FLOAT128): Likewise.
	(BT_FN_FLOAT32X_FLOAT32X_FLOAT32X_FLOAT32X): Likewise.
	(BT_FN_FLOAT64X_FLOAT64X_FLOAT64X_FLOAT64X): Likewise.
	(BT_FN_FLOAT128X_FLOAT128X_FLOAT128X_FLOAT128X): Likewise.
	* gencfn-macros.c (print_case_cfn): Add support for math functions
	that have _Float<N> and _Float<N>X variants.
	(print_define_operator_list): Likewise.
	(fltfn_suffixes): Likewise.
	(main): Likewise.
	* internal-fn.def (DEF_INTERNAL_FLT_FLOATN_FN): New helper macro
	for math functions that have _Float<N> and _Float<N>X variants.
	(SQRT): Add support for sqrt, copysign, fmin and fmax _Float<N>
	and _Float<N>X variants.
	(COPYSIGN): Likewise.
	(FMIN): Likewise.
	(FMAX): Likewise.
	* fold-const.c (tree_call_nonnegative_warnv_p): Add support for
	copysign, fma, fmax, fmin, and sqrt _Float<N> and _Float<N>X
	variants.
	(integer_valued_read_call_p): Likewise.
	* fold-const-call.c (fold_const_call_ss): Likewise.
	(fold_const_call_sss): Add support for copysign, fmin, and fmax
	_Float<N> and _Float<N>X variants.
	(fold_const_call_ssss): Add support for fma _Float<N> and
	_Float<N>X variants.
	* gimple-ssa-backprop.c (backprop::process_builtin_call_use): Add
	support for copysign and fma _Float<N> and _Float<N>X variants.
	(backprop::process_builtin_call_use): Likewise.
	* tree-call-cdce.c (can_test_argument_range); Add support for
	sqrt _Float<N> and _Float<N>X variants.
	(edom_only_function): Likewise.
	(get_no_error_domain): Likewise.
	* tree-ssa-math-opts.c (internal_fn_reciprocal): Likewise.
	* tree-ssa-reassoc.c (attempt_builtin_copysign): Add support for
	copysign _Float<N> and _Float<N>X variants.
	* config/rs6000/rs6000-builtin.def (SQRTF128): Delete, this is now
	handled by machine independent code.
	(FMAF128): Likewise.
	* doc/cpp.texi (Common Predefined Macros): Document defining
	__FP_FAST_FMAF<N> and __FP_FAST_FMAF<N>X if the backend supports
	fma _Float<N> and _Float<N>X variants.

[gcc/c]
2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* c-decl.c (header_for_builtin_fn): Add support for copysign, fma,
	fmax, fmin, and sqrt _Float<N> and _Float<N>X variants.

[gcc/c-family]
2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* c-cppbuiltin.c (mode_has_fma): Add support for PowerPC KFmode.
	(c_cpp_builtins): If a machine has a fast fma _Float<N> and
	_Float<N>X variant, define __FP_FAST_FMA<N> and/or
	__FP_FAST_FMA<N>X.

[gcc/testsuite]
2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/float128-hw.c: Add support for all 4 FMA
	variants.  Check various conversions to/from float128.  Check
	negation.  Use {\m...\M} in the tests.
	* gcc.target/powerpc/float128-hw2.c: New test for implicit
	_Float128 math functions.
	* gcc.target/powerpc/float128-hw3.c: New test for strict ansi mode
	not implicitly adding the _Float128 math functions.
	* gcc.target/powerpc/float128-fma2.c: Delete, test is no longer
	valid.
	* gcc.target/powerpc/float128-sqrt2.c: Likewise.

From-SVN: r254168
2017-10-27 18:15:38 +00:00
Eric Botcazou
9e878cf1ba asan.c (handle_builtin_alloca): Deal with all alloca variants.
* asan.c (handle_builtin_alloca): Deal with all alloca variants.
	(get_mem_refs_of_builtin_call): Likewise.
	* builtins.c (expand_builtin_apply): Adjust call to
	allocate_dynamic_stack_space.
	(expand_builtin_alloca): For __builtin_alloca_with_align_and_max, pass
	the third argument to allocate_dynamic_stack_space, otherwise -1.
	(expand_builtin): Deal with all alloca variants.
	(is_inexpensive_builtin): Likewise.
	* builtins.def (BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX): New.
	* calls.c (special_function_p): Deal with all alloca variants.
	(initialize_argument_information): Adjust call to
	allocate_dynamic_stack_space.
	(expand_call): Likewise.
	* cfgexpand.c (expand_call_stmt): Deal with all alloca variants.
	* doc/extend.texi (Built-ins): Add __builtin_alloca_with_align_and_max
	* explow.c (allocate_dynamic_stack_space): Add MAX_SIZE parameter and
	use it for the stack usage computation.
	* explow.h (allocate_dynamic_stack_space): Adjust prototype.
	* function.c (gimplify_parameters): Turn BUILT_IN_ALLOCA_WITH_ALIGN
	into BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX and pass maximum size.
	* gimple-ssa-warn-alloca.c (alloca_call_type): Simplify control flow.
	Take into account 3rd argument of __builtin_alloca_with_align_and_max.
	(in_loop_p): Remove first argument and useless check.
	(pass_walloca::execute): Remove useless test and adjust call to above.
	* gimple.c (gimple_build_call_from_tree): Deal with all alloc variants
	* gimplify.c (gimplify_vla_decl): Turn BUILT_IN_ALLOCA_WITH_ALIGN into
	BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX and pass maximum size.
	(gimplify_call_expr): Deal with all alloca variants.
	* hsa-gen.c (gen_hsa_alloca): Likewise.
	(gen_hsa_insns_for_call): Likewise.
	* ipa-pure-const.c (special_builtin_state): Likewise.
	* tree-chkp.c (chkp_build_returned_bound): Likewise.
	* tree-object-size.c (alloc_object_size): Likewise.
	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Likewise.
	(call_may_clobber_ref_p_1): Likewise.
	* tree-ssa-ccp.c (evaluate_stmt): Likewise.
	(ccp_fold_stmt): Likewise.
	(optimize_stack_restore): Likewise.
	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
	(mark_all_reaching_defs_necessary_1): Likewise.
	(propagate_necessity): Likewise.
	(eliminate_unnecessary_stmts): Likewise.
	* tree.c (build_common_builtin_nodes): Build
	BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX.
	* tree.h (ALLOCA_FUNCTION_CODE_P): New macro.
	(CASE_BUILT_IN_ALLOCA): Likewise.
	* varasm.c (incorporeal_function_p): Deal with all alloca variants.
c-family/
	* c-common.c (check_builtin_function_arguments): Also check arguments
	of __builtin_alloca_with_align_and_max.

From-SVN: r253901
2017-10-19 15:58:05 +00:00
Eric Botcazou
caeaa0b3c6 * builtins.def (BUILT_IN_SETJMP): Revert latest change.
From-SVN: r253529
2017-10-08 20:44:14 +00:00
Eric Botcazou
06fc54dd64 builtins.def (BUILT_IN_SETJMP): Declare as library builtin instead of GCC builtin if...
* builtins.def (BUILT_IN_SETJMP): Declare as library builtin instead
	of GCC builtin if DONT_USE_BUILTIN_SETJMP is defined.
	* except.c (sjlj_emit_function_enter): If DONT_USE_BUILTIN_SETJMP is
	defined, force the creation of a new block for a dispatch label.

From-SVN: r253515
2017-10-07 22:17:16 +00:00
Marc Glisse
a889d6aa27 fenv.h builtins
2017-06-27  Marc Glisse  <marc.glisse@inria.fr>

	* builtin-types.def (BT_FENV_T_PTR, BT_CONST_FENV_T_PTR,
	BT_FEXCEPT_T_PTR, BT_CONST_FEXCEPT_T_PTR): New primitive types.
	(BT_FN_INT_FENV_T_PTR, BT_FN_INT_CONST_FENV_T_PTR,
	BT_FN_INT_FEXCEPT_T_PTR_INT, BT_FN_INT_CONST_FEXCEPT_T_PTR_INT):
	New function types.
	* builtins.def (BUILT_IN_FECLEAREXCEPT, BUILT_IN_FEGETENV,
	BUILT_IN_FEGETEXCEPTFLAG, BUILT_IN_FEGETROUND,
	BUILT_IN_FEHOLDEXCEPT, BUILT_IN_FERAISEEXCEPT,
	BUILT_IN_FESETENV, BUILT_IN_FESETEXCEPTFLAG,
	BUILT_IN_FESETROUND, BUILT_IN_FETESTEXCEPT,
	BUILT_IN_FEUPDATEENV): New builtins.
	* tree-core.h (TI_FENV_T_PTR_TYPE, TI_CONST_FENV_T_PTR_TYPE,
	TI_FEXCEPT_T_PTR_TYPE, TI_CONST_FEXCEPT_T_PTR_TYPE): New entries.
	* tree.h (fenv_t_ptr_type_node, const_fenv_t_ptr_type_node,
	fexcept_t_ptr_type_node, const_fexcept_t_ptr_type_node): New
	macros.
	(builtin_structptr_types): Adjust size.
	* tree.c (builtin_structptr_types): Add four entries.

From-SVN: r249685
2017-06-27 09:38:28 +00:00
Martin Liska
45b2222a13 Implement no_sanitize function attribute
2017-06-13  Martin Liska  <mliska@suse.cz>

	PR sanitize/78204
	* c-c++-common/ubsan/attrib-2.c (float_cast2): Enhance the
	test by adding no_sanitize attribute.
	* gcc.dg/asan/use-after-scope-4.c: Likewise.
2017-06-13  Martin Liska  <mliska@suse.cz>

	PR sanitize/78204
	* c-attribs.c (add_no_sanitize_value): New function.
	(handle_no_sanitize_attribute): Likewise.
	(handle_no_sanitize_address_attribute): Use the function.
	(handle_no_sanitize_thread_attribute): New function.
	(handle_no_address_safety_analysis_attribute): Use
	add_no_sanitize_value.
	(handle_no_sanitize_undefined_attribute): Likewise.
	* c-common.h: Declare new functions.
	* c-ubsan.c (ubsan_instrument_division): Use sanitize_flags_p.
	(ubsan_instrument_shift): Likewise.
	(ubsan_instrument_bounds): Likewise.
	(ubsan_maybe_instrument_array_ref): Likewise.
	(ubsan_maybe_instrument_reference_or_call): Likewise.
2017-06-13  Martin Liska  <mliska@suse.cz>

	PR sanitize/78204
	* asan.c (asan_sanitize_stack_p): Use sanitize_flags_p.
	(gate_asan): Likewise.
	* asan.h (asan_no_sanitize_address_p): Remove the function.
	(sanitize_flags_p): New function.
	* builtins.def: Fix coding style.
	* common.opt: Use renamed enum value.
	* convert.c (convert_to_integer_1): Use sanitize_flags_p.
	* doc/extend.texi: Document no_sanitize attribute.
	* flag-types.h (enum sanitize_code): Rename SANITIZE_NONDEFAULT
	to SANITIZE_UNDEFINED_NONDEFAULT.
	* gcc.c (sanitize_spec_function): Use the renamed enum value.
	* gimple-fold.c (optimize_atomic_compare_exchange_p):
	Use sanitize_flags_p.
	* gimplify.c (gimplify_function_tree): Likewise.
	* ipa-inline.c (sanitize_attrs_match_for_inline_p): Likewise.
	* opts.c (parse_no_sanitize_attribute): New function.
	(common_handle_option): Use renamed enum value.
	* opts.h (parse_no_sanitize_attribute): Declare.
	* tree.c (sanitize_flags_p): New function.
	* tree.h: Declared here.
	* tsan.c: Use sanitize_flags_p.
	* ubsan.c (ubsan_expand_null_ifn): Likewise.
	(instrument_mem_ref): Likewise.
	(instrument_bool_enum_load): Likewise.
	(do_ubsan_in_current_function): Remove the function.
	(pass_ubsan::execute): Use sanitize_flags_p.
	* ubsan.h: Remove do_ubsan_in_current_function
	* tree-cfg.c (print_no_sanitize_attr_value): New function.
	(dump_function_to_file): Use it here.
2017-06-13  Martin Liska  <mliska@suse.cz>

	PR sanitize/78204
	* class.c (build_base_path): Use sanitize_flags_p.
	* cp-gimplify.c (cp_genericize_r): Likewise.
	(cp_genericize_tree): Likewise.
	(cp_genericize): Likewise.
	* cp-ubsan.c (cp_ubsan_instrument_vptr_p): Likewise.
	* decl.c (compute_array_index_type): Likewise.
	(start_preparsed_function): Likewise.
	* decl2.c (one_static_initialization_or_destruction): Likewise.
	* init.c (finish_length_check): Likewise.
	* lambda.c (maybe_add_lambda_conv_op): Likewise.
	* typeck.c (cp_build_binary_op): Likewise.
	(build_static_cast_1): Likewise.
2017-06-13  Martin Liska  <mliska@suse.cz>

	PR sanitize/78204
	* c-convert.c (convert): Use sanitize_flags_p.
	* c-decl.c (grokdeclarator): Likewise.
	* c-typeck.c (convert_for_assignment): Likewise.
	(c_finish_return): Likewise.
	(build_binary_op): Likewise.

From-SVN: r249158
2017-06-13 13:59:05 +00:00
Jan Hubicka
cb59f689a3 builtin-attrs.def (ATTR_NORETURN_NOTHROW_LEAF_COLD_LIST, [...]): New.
* builtin-attrs.def (ATTR_NORETURN_NOTHROW_LEAF_COLD_LIST,
	ATTR_CONST_NORETURN_NOTHROW_LEAF_COLD_LIST,
	ATTR_TMPURE_NORETURN_NOTHROW_LEAF_COLD_LIST): New.
	* builtins.def (abort, trap, unreachable): Declare cold.
	* calls.c (flags_from_decl_or_type): Lookup ECF_COLD.
	* tree-core.h (ECF_COLD): New.
	* tree.c (set_call_expr_flags): Handle ECF_COLD.
	(build_common_builtin_nodes): Mark unreachable and abort as cold.

	* class.c (build_vtbl_initializer): Mark dvirt_fn as cold.
	* decl.c (cxx_init_decl_processing, push_throw_library_fn): Likewise.
	(excpet.c): Mark terminate as cold.

	* gcc.dg/predict-14.c: Avoid cold function detection.
	* gcc.target/i386/umod-3.c: Likewise.

From-SVN: r249070
2017-06-09 18:36:50 +00:00
Tamar Christina
903c723b9d Reverted r249005 until PowerPC and AIX issues sorted.
From-SVN: r249050
2017-06-09 08:10:51 +00:00
Tamar Christina
94fc87ecdf re PR middle-end/77925 (Add __builtin_issubnormal)
2017-06-08  Tamar Christina  <tamar.christina@arm.com>

	PR middle-end/77925
	PR middle-end/77926
	PR middle-end/66462

	* gcc/builtins.c (fold_builtin_fpclassify): Remove.
	(fold_builtin_interclass_mathfn): Remove.
	(expand_builtin): Add builtins to lowering list.
	(fold_builtin_n): Remove fold_builtin_varargs.
	(fold_builtin_varargs): Remove.
	* gcc/builtins.def (BUILT_IN_ISZERO, BUILT_IN_ISSUBNORMAL): New.
	* gcc/real.h (get_min_float): New.
	(real_format): Add is_ieee_compatible field.
	* gcc/real.c (get_min_float): New.
	(ieee_single_format): Set is_ieee_compatible flag.
	* gcc/gimple-low.c (lower_stm): Define BUILT_IN_FPCLASSIFY,
	CASE_FLT_FN (BUILT_IN_ISINF), BUILT_IN_ISINFD32, BUILT_IN_ISINFD64,
	BUILT_IN_ISINFD128, BUILT_IN_ISNAND32, BUILT_IN_ISNAND64,
	BUILT_IN_ISNAND128, BUILT_IN_ISNAN, BUILT_IN_ISNORMAL, BUILT_IN_ISZERO,
	BUILT_IN_ISSUBNORMAL, CASE_FLT_FN (BUILT_IN_FINITE), BUILT_IN_FINITED32
	BUILT_IN_FINITED64, BUILT_IN_FINITED128, BUILT_IN_ISFINITE.
	(lower_builtin_fpclassify, is_nan, is_normal, is_infinity): New.
	(is_zero, is_subnormal, is_finite, use_ieee_int_mode): Likewise.
	(lower_builtin_isnan, lower_builtin_isinfinite): Likewise.
	(lower_builtin_isnormal, lower_builtin_iszero): Likewise.
	(lower_builtin_issubnormal, lower_builtin_isfinite): Likewise.
	(emit_tree_cond, get_num_as_int, emit_tree_and_return_var): New.
	(mips_single_format): Likewise.
	(motorola_single_format): Likewise.
	(spu_single_format): Likewise.
	(ieee_double_format): Likewise.
	(mips_double_format): Likewise.
	(motorola_double_format): Likewise.
	(ieee_extended_motorola_format): Likewise.
	(ieee_extended_intel_128_format): Likewise.
	(ieee_extended_intel_96_round_53_format): Likewise.
	(ibm_extended_format): Likewise.
	(mips_extended_format): Likewise.
	(ieee_quad_format): Likewise.
	(mips_quad_format): Likewise.
	(vax_f_format): Likewise.
	(vax_d_format): Likewise.
	(vax_g_format): Likewise.
	(decimal_single_format): Likewise.
	(decimal_quad_format): Likewise.
	(iee_half_format): Likewise.
	(mips_single_format): Likewise.
	(arm_half_format): Likewise.
	(real_internal_format): Likewise.
	* gcc/doc/extend.texi: Add documentation for built-ins.
	* gcc/c/c-typeck.c (convert_arguments): Add BUILT_IN_ISZERO
	and BUILT_IN_ISSUBNORMAL.

gcc/testsuite/
2017-06-08  Tamar Christina  <tamar.christina@arm.com>

	* gcc.target/aarch64/builtin-fpclassify.c: New codegen test.
	* gcc.dg/fold-notunord.c: Removed.
	* gcc.dg/torture/floatn-tg-4.h: Add tests for iszero and issubnormal.
	* gcc.dg/torture/float128-tg-4.c: Likewise.
	* gcc.dg/torture/float128x-tg-4: Likewise.
	* gcc.dg/torture/float16-tg-4.c: Likewise.
	* gcc.dg/torture/float32-tg-4.c: Likewise.
	* gcc.dg/torture/float32x-tg-4.c: Likewise.
	* gcc.dg/torture/float64-tg-4.c: Likewise.
	* gcc.dg/torture/float64x-tg-4.c: Likewise.
	* gcc.dg/pr28796-1.c: Add -O2.
	* gcc.dg/builtins-43.c: Check lower instead of gimple.
	* gcc.dg/tg-tests.h: Add iszero and issubnormal.
	* gcc.dg/pr77925.c: Add to test safe cases.

From-SVN: r249005
2017-06-08 07:38:42 +00:00
Andreas Schwab
762d53e7de * builtins.def (BUILT_IN_UPDATE_SETJMP_BUF): Fix type.
From-SVN: r246720
2017-04-05 19:29:26 +00:00
Martin Sebor
5d9a283ac6 re PR middle-end/80020 (gcc confused about aligned_alloc argument order)
PR middle-end/80020
	* builtin-attrs.def (ATTR_ALLOC_SIZE_2_NOTHROW_LIST): New macro.
	* builtins.def (aligned_alloc): Use it.

	PR middle-end/80020
	* gcc.dg/attr-alloc_size-6.c: Correct aligned_alloc argument order.
	* gcc.dg/attr-alloc_size-7.c: Same.
	* gcc.dg/attr-alloc_size-9.c: Same.
	* gcc.dg/builtin-alloc-size.c: Same.
	* gcc.dg/pr80020.c: New test.

From-SVN: r246145
2017-03-14 16:16:27 -06:00
Pekka Jääskeläinen
5fd1486ce5 Brig front-end
2017-01-24  Pekka Jääskeläinen <pekka@parmance.com>
	    Martin Jambor  <mjambor@suse.cz>

	* Makefile.def (target_modules): Added libhsail-rt.
	(languages): Added language brig.
	* Makefile.in: Regenerated.
	* configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Added
	tgarget-libhsail-rt.  Make brig unsupported on untested architectures.
	* configure: Regenerated.

gcc/
	* brig-builtins.def: New file.
	* builtins.def (DEF_HSAIL_BUILTIN): New macro.
	(DEF_HSAIL_ATOMIC_BUILTIN): Likewise.
	(DEF_HSAIL_SAT_BUILTIN): Likewise.
	(DEF_HSAIL_INTR_BUILTIN): Likewise.
	(DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN): Likewise.
	* builtin-types.def (BT_INT8): New.
	(BT_INT16): Likewise.
	(BT_UINT8): Likewise.
	(BT_UINT16): Likewise.
	(BT_FN_ULONG): Likewise.
	(BT_FN_UINT_INT): Likewise.
	(BT_FN_UINT_ULONG): Likewise.
	(BT_FN_UINT_LONG): Likewise.
	(BT_FN_UINT_PTR): Likewise.
	(BT_FN_ULONG_PTR): Likewise.
	(BT_FN_INT8_FLOAT): Likewise.
	(BT_FN_INT16_FLOAT): Likewise.
	(BT_FN_UINT32_FLOAT): Likewise.
	(BT_FN_UINT16_FLOAT): Likewise.
	(BT_FN_UINT8_FLOAT): Likewise.
	(BT_FN_UINT64_FLOAT): Likewise.
	(BT_FN_UINT16_UINT32): Likewise.
	(BT_FN_UINT32_UINT16): Likewise.
	(BT_FN_UINT16_UINT16_UINT16): Likewise.
	(BT_FN_INT_PTR_INT): Likewise.
	(BT_FN_UINT_PTR_UINT): Likewise.
	(BT_FN_LONG_PTR_LONG): Likewise.
	(BT_FN_ULONG_PTR_ULONG): Likewise.
	(BT_FN_VOID_UINT64_UINT64): Likewise.
	(BT_FN_UINT8_UINT8_UINT8): Likewise.
	(BT_FN_INT8_INT8_INT8): Likewise.
	(BT_FN_INT16_INT16_INT16): Likewise.
	(BT_FN_INT_INT_INT): Likewise.
	(BT_FN_UINT_FLOAT_UINT): Likewise.
	(BT_FN_FLOAT_UINT_UINT): Likewise.
	(BT_FN_ULONG_UINT_UINT): Likewise.
	(BT_FN_ULONG_UINT_PTR): Likewise.
	(BT_FN_ULONG_ULONG_ULONG): Likewise.
	(BT_FN_UINT_UINT_UINT): Likewise.
	(BT_FN_VOID_UINT_PTR): Likewise.
	(BT_FN_UINT_UINT_PTR: Likewise.
	(BT_FN_UINT32_UINT64_PTR): Likewise.
	(BT_FN_INT_INT_UINT_UINT): Likewise.
	(BT_FN_UINT_UINT_UINT_UINT): Likewise.
	(BT_FN_UINT_UINT_UINT_PTR): Likewise.
	(BT_FN_UINT_ULONG_ULONG_UINT): Likewise.
	(BT_FN_ULONG_ULONG_ULONG_ULONG): Likewise.
	(BT_FN_LONG_LONG_UINT_UINT): Likewise.
	(BT_FN_ULONG_ULONG_UINT_UINT): Likewise.
	(BT_FN_VOID_UINT32_UINT64_PTR): Likewise.
	(BT_FN_VOID_UINT32_UINT32_PTR): Likewise.
	(BT_FN_UINT_UINT_UINT_UINT_UINT): Likewise.
	(BT_FN_UINT_FLOAT_FLOAT_FLOAT_FLOAT): Likewise.
	(BT_FN_ULONG_ULONG_ULONG_UINT_UINT): Likewise.
	* doc/frontends.texi: List BRIG FE.
	* doc/install.texi (Testing): Add BRIG tesring requirements.
	* doc/invoke.texi (Overall Options): Mention BRIG.
	* doc/standards.texi (Standards): Doucment BRIG HSA version.

gcc/brig/

	* Make-lang.in: New file.
	* brig-builtins.h: Likewise.
	* brig-c.h: Likewise.
	* brig-lang.c: Likewise.
	* brigspec.c: Likewise.
	* config-lang.in: Likewise.
	* lang-specs.h: Likewise.
	* lang.opt: Likewise.
	* brigfrontend/brig-arg-block-handler.cc: Likewise.
	* brigfrontend/brig-atomic-inst-handler.cc: Likewise.
	* brigfrontend/brig-basic-inst-handler.cc: Likewise.
	* brigfrontend/brig-branch-inst-handler.cc: Likewise.
	* brigfrontend/brig-cmp-inst-handler.cc: Likewise.
	* brigfrontend/brig-code-entry-handler.cc: Likewise.
	* brigfrontend/brig-code-entry-handler.h: Likewise.
	* brigfrontend/brig-comment-handler.cc: Likewise.
	* brigfrontend/brig-control-handler.cc: Likewise.
	* brigfrontend/brig-copy-move-inst-handler.cc: Likewise.
	* brigfrontend/brig-cvt-inst-handler.cc: Likewise.
	* brigfrontend/brig-fbarrier-handler.cc: Likewise.
	* brigfrontend/brig-function-handler.cc: Likewise.
	* brigfrontend/brig-function.cc: Likewise.
	* brigfrontend/brig-function.h: Likewise.
	* brigfrontend/brig-inst-mod-handler.cc: Likewise.
	* brigfrontend/brig-label-handler.cc: Likewise.
	* brigfrontend/brig-lane-inst-handler.cc: Likewise.
	* brigfrontend/brig-machine.c: Likewise.
	* brigfrontend/brig-machine.h: Likewise.
	* brigfrontend/brig-mem-inst-handler.cc: Likewise.
	* brigfrontend/brig-module-handler.cc: Likewise.
	* brigfrontend/brig-queue-inst-handler.cc: Likewise.
	* brigfrontend/brig-seg-inst-handler.cc: Likewise.
	* brigfrontend/brig-signal-inst-handler.cc: Likewise.
	* brigfrontend/brig-to-generic.cc: Likewise.
	* brigfrontend/brig-to-generic.h: Likewise.
	* brigfrontend/brig-util.cc: Likewise.
	* brigfrontend/brig-util.h: Likewise.
	* brigfrontend/brig-variable-handler.cc: Likewise.
	* brigfrontend/phsa.h: Likewise.


gcc/testsuite/

	* lib/brig-dg.exp: New file.
	* lib/brig.exp: Likewise.
	* brig.dg/README: Likewise.
	* brig.dg/dg.exp: Likewise.
	* brig.dg/test/gimple/alloca.hsail: Likewise.
	* brig.dg/test/gimple/atomics.hsail: Likewise.
	* brig.dg/test/gimple/branches.hsail: Likewise.
	* brig.dg/test/gimple/fbarrier.hsail: Likewise.
	* brig.dg/test/gimple/function_calls.hsail: Likewise.
	* brig.dg/test/gimple/kernarg.hsail: Likewise.
	* brig.dg/test/gimple/mem.hsail: Likewise.
	* brig.dg/test/gimple/mulhi.hsail: Likewise.
	* brig.dg/test/gimple/packed.hsail: Likewise.
	* brig.dg/test/gimple/smoke_test.hsail: Likewise.
	* brig.dg/test/gimple/variables.hsail: Likewise.
	* brig.dg/test/gimple/vector.hsail: Likewise.

include/

	* hsa.h: Moved here from libgomp/plugin/hsa.h.

libgomp/

	* plugin/hsa.h: Moved to top level include.
	* plugin/plugin-hsa.c: Chanfgd include of hsa.h accordingly.

libhsail-rt/

	* Makefile.am: New file.
	* target-config.h.in: Likewise.
	* configure.ac: Likewise.
	* configure: Likewise.
	* config.h.in: Likewise.
	* aclocal.m4: Likewise.
	* README: Likewise.
	* Makefile.in: Likewise.
	* include/internal/fibers.h: Likewise.
	* include/internal/phsa-queue-interface.h: Likewise.
	* include/internal/phsa-rt.h: Likewise.
	* include/internal/workitems.h: Likewise.
	* rt/arithmetic.c: Likewise.
	* rt/atomics.c: Likewise.
	* rt/bitstring.c: Likewise.
	* rt/fbarrier.c: Likewise.
	* rt/fibers.c: Likewise.
	* rt/fp16.c: Likewise.
	* rt/misc.c: Likewise.
	* rt/multimedia.c: Likewise.
	* rt/queue.c: Likewise.
	* rt/sat_arithmetic.c: Likewise.
	* rt/segment.c: Likewise.
	* rt/workitems.c: Likewise.


Co-Authored-By: Martin Jambor <mjambor@suse.cz>

From-SVN: r244867
2017-01-24 13:45:56 +01:00
Jakub Jelinek
cbe34bb5ed Update copyright years.
From-SVN: r243994
2017-01-01 13:07:43 +01:00
Martin Sebor
474da67ef9 PR c/78673 - sprintf missing attribute nonnull on destination argument
PR c/78673 - sprintf missing attribute nonnull on destination argument
PR c/17308 - nonnull attribute not as useful as it could be

gcc/ChangeLog:

	PR c/17308
	* builtin-attrs.def (ATTR_NONNULL_1_1, ATTR_NONNULL_1_2): Defined.
	(ATTR_NONNULL_1_3, ATTR_NONNULL_1_4, ATTR_NONNULL_1_5): Same.
	(ATTR_NOTHROW_NONNULL_1_1, ATTR_NOTHROW_NONNULL_1_2): Same.
	(ATTR_NOTHROW_NONNULL_1_3, ATTR_NOTHROW_NONNULL_1_4): Same.
	(ATTR_NOTHROW_NONNULL_1_5): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_1_2): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_2_0): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_2_3): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_3_0): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_3_4): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_4_0): Same.
	(ATTR_NONNULL_1_FORMAT_PRINTF_4_5): Same.
	* builtins.c (validate_arg): Add argument.  Treat null pointers
	passed to nonnull arguments as invalid.
	(validate_arglist): Same.
	* builtins.def (fprintf, fprintf_unlocked): Add nonnull attribute.
	(printf, printf_unlocked, sprintf. vfprintf, vsprintf): Same.
	(__sprintf_chk, __vsprintf_chk, __fprintf_chk, __vfprintf_chk): Same.
	* calls.c (get_nonnull_ags, maybe_warn_null_arg): New functions.
	(initialize_argument_information): Diagnose null pointers passed to
	arguments declared nonnull.
	* calls.h (get_nonnull_args): Declared.

gcc/c-family/ChangeLog:

	PR c/17308
	* c-common.c (check_nonnull_arg): Disable when optimization
	is enabled.

gcc/testsuite/ChangeLog:

	PR c/17308
	* gcc.dg/builtins-nonnull.c: New test.
	* gcc.dg/nonnull-4.c: New test.

From-SVN: r243661
2016-12-14 10:23:16 -07:00
Martin Sebor
5dcf456180 PR c/78668 - aligned_alloc, realloc, et al. missing attribute alloc_size
gcc/ChangeLog:

	PR c/78668
        * builtin-attrs.def (ATTR_ALLOC_SIZE, ATTR_RETURNS_NONNULL): New
        identifier tree nodes.
        (ATTR_ALLOCA_SIZE_1_NOTHROW_LEAF_LIST): New attribute list.
        (ATTR_MALLOC_SIZE_1_NOTHROW_LIST): Same.
        (ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST): Same.
        (ATTR_MALLOC_SIZE_1_2_NOTHROW_LEAF_LIST): Same.
        (ATTR_ALLOC_SIZE_2_NOTHROW_LEAF_LIST): Same.
        * builtins.def (aligned_alloc, calloc, malloc, realloc):
        Add attribute alloc_size.
        (alloca): Add attribute alloc_size and returns_nonnull.

gcc/testsuite/ChangeLog:

	PR c/78668
	* gcc.dg/builtin-alloc-size.c: New test.

From-SVN: r243231
2016-12-04 10:48:44 -07:00
Martin Jambor
56b1c60e41 backport: hsa-builtins.def: New file.
Merge from HSA branch to trunk

2016-11-23  Martin Jambor  <mjambor@suse.cz>
	    Martin Liska  <mliska@suse.cz>

gcc/
	* hsa-builtins.def: New file.
	* Makefile.in (BUILTINS_DEF): Add hsa-builtins.def dependency.
	* builtins.def: Include hsa-builtins.def.
	(DEF_HSA_BUILTIN): New macro.
	* dumpfile.h (OPTGROUP_OPENMP): Define.
	* dumpfile.c (optgroup_options): Added OPTGROUP_OPENMP.
	* gimple.h (gf_mask): Added elements GF_OMP_FOR_GRID_INTRA_GROUP and
	GF_OMP_FOR_GRID_GROUP_ITER.
	(gimple_omp_for_grid_phony): Added checking assert.
	(gimple_omp_for_set_grid_phony): Likewise.
	(gimple_omp_for_grid_intra_group): New function.
	(gimple_omp_for_set_grid_intra_group): Likewise.
	(gimple_omp_for_grid_group_iter): Likewise.
	(gimple_omp_for_set_grid_group_iter): Likewise.
	* omp-low.c (check_omp_nesting_restrictions): Allow GRID loop where
	previosuly only distribute loop was permitted.
	(lower_lastprivate_clauses): Allow non tcc_comparison predicates.
	(grid_get_kernel_launch_attributes): Support multiple HSA grid
	dimensions.
	(grid_expand_omp_for_loop): Likewise and also support standalone
	distribute constructs.  New parameter INTRA_GROUP, updated both users.
	(grid_expand_target_grid_body): Support standalone distribute
	constructs.
	(pass_data_expand_omp): Changed optinfo_flags to OPTGROUP_OPENMP.
	(pass_data_expand_omp_ssa): Likewise.
	(pass_data_omp_device_lower): Likewsie.
	(pass_data_lower_omp): Likewise.
	(pass_data_diagnose_omp_blocks): Likewise.
	(pass_data_oacc_device_lower): Likewise.
	(pass_data_omp_target_link): Likewise.
	(grid_lastprivate_predicate): New function.
	(lower_omp_for_lastprivate): Call grid_lastprivate_predicate for
	gridified loops.
	(lower_omp_for): Support standalone distribute constructs.
	(grid_prop): New type.
	(grid_safe_assignment_p): Check for assignments to group_sizes, new
	parameter GRID.
	(grid_seq_only_contains_local_assignments): New parameter GRID, pass
	it to callee.
	(grid_find_single_omp_among_assignments_1): Likewise, improve missed
	optimization info messages.
	(grid_find_single_omp_among_assignments): Likewise.
	(grid_find_ungridifiable_statement): Do not bail out for SIMDs.
	(grid_parallel_clauses_gridifiable): New function.
	(grid_inner_loop_gridifiable_p): Likewise.
	(grid_dist_follows_simple_pattern): Likewise.
	(grid_gfor_follows_tiling_pattern): Likewise.
	(grid_call_permissible_in_distribute_p): Likewise.
	(grid_handle_call_in_distribute): Likewise.
	(grid_dist_follows_tiling_pattern): Likewise.
	(grid_target_follows_gridifiable_pattern): Support standalone distribute
	constructs.
	(grid_var_segment): New enum.
	(grid_mark_variable_segment): New function.
	(grid_copy_leading_local_assignments): Call grid_mark_variable_segment
	if a new argument says so.
	(grid_process_grid_body): New function.
	(grid_eliminate_combined_simd_part): Likewise.
	(grid_mark_tiling_loops): Likewise.
	(grid_mark_tiling_parallels_and_loops): Likewise.
	(grid_process_kernel_body_copy): Support standalone distribute
	constructs.
	(grid_attempt_target_gridification): New grid variable holding overall
	gridification state.  Support standalone distribute constructs and
	collapse clauses.
	* doc/optinfo.texi (Optimization groups): Document OPTGROUP_OPENMP.
	* hsa.h (hsa_bb): Add method method append_phi.
	(hsa_insn_br): Renamed to hsa_insn_cbr, renamed all
	occurences in all files too.
	(hsa_insn_br): New class, now the ancestor of hsa_incn_cbr.
	(is_a_helper <hsa_insn_br *>::test): New function.
	(is_a_helper <hsa_insn_cbr *>::test): Adjust to only cover conditional
	branch instructions.
	(hsa_insn_signal): Make a direct descendant of
	hsa_insn_basic.  Add memorder constructor parameter and
	m_memory_order and m_signalop member variables.
	(hsa_insn_queue): Changed constructor parameters to common form.
	Added m_segment and m_memory_order member variables.
	(hsa_summary_t): Add private member function
	process_gpu_implementation_attributes.
	(hsa_function_summary): Rename m_binded_function to
	m_bound_function.
	(hsa_insn_basic_p): Remove typedef.
	(hsa_op_with_type): Change hsa_insn_basic_p into plain pointers.
	(hsa_op_reg_p): Remove typedef.
	(hsa_function_representation): Change hsa_op_reg_p into plain
	pointers.
	(hsa_insn_phi): Removed new and delete operators.
	(hsa_insn_br): Likewise.
	(hsa_insn_cbr): Likewise.
	(hsa_insn_sbr): Likewise.
	(hsa_insn_cmp): Likewise.
	(hsa_insn_mem): Likewise.
	(hsa_insn_atomic): Likewise.
	(hsa_insn_signal): Likewise.
	(hsa_insn_seg): Likewise.
	(hsa_insn_call): Likewise.
	(hsa_insn_arg_block): Likewise.
	(hsa_insn_comment): Likewise.
	(hsa_insn_srctype): Likewise.
	(hsa_insn_packed): Likewise.
	(hsa_insn_cvt): Likewise.
	(hsa_insn_alloca): Likewise.
	* hsa.c (hsa_destroy_insn): Also handle instances of hsa_insn_br.
	(process_gpu_implementation_attributes): New function.
	(link_functions): Move some functionality into it.  Adjust after
	renaming m_binded_functions to m_bound_functions.
	(hsa_insn_basic::op_output_p): Add BRIG_OPCODE_DEBUGTRAP
	to the list of instructions with no output registers.
	(get_in_type): Return this if it is a register of
	matching size.
	(hsa_get_declaration_name): Moved to...
        * hsa-gen.c (hsa_get_declaration_name): ...here.  Allocate
	temporary string on an obstack instead from ggc.
	(query_hsa_grid): Renamed to query_hsa_grid_dim, reimplemented, cut
	down to two overloads.
	(hsa_allocp_operand_address): Removed.
	(hsa_allocp_operand_immed): Likewise.
	(hsa_allocp_operand_reg): Likewise.
	(hsa_allocp_operand_code_list): Likewise.
	(hsa_allocp_operand_operand_list): Likewise.
	(hsa_allocp_inst_basic): Likewise.
	(hsa_allocp_inst_phi): Likewise.
	(hsa_allocp_inst_mem): Likewise.
	(hsa_allocp_inst_atomic): Likewise.
	(hsa_allocp_inst_signal): Likewise.
	(hsa_allocp_inst_seg): Likewise.
	(hsa_allocp_inst_cmp): Likewise.
	(hsa_allocp_inst_br): Likewise.
	(hsa_allocp_inst_sbr): Likewise.
	(hsa_allocp_inst_call): Likewise.
	(hsa_allocp_inst_arg_block): Likewise.
	(hsa_allocp_inst_comment): Likewise.
	(hsa_allocp_inst_queue): Likewise.
	(hsa_allocp_inst_srctype): Likewise.
	(hsa_allocp_inst_packed): Likewise.
	(hsa_allocp_inst_cvt): Likewise.
	(hsa_allocp_inst_alloca): Likewise.
	(hsa_allocp_bb): Likewise.
	(hsa_obstack): New.
	(hsa_init_data_for_cfun): Initialize obstack.
	(hsa_deinit_data_for_cfun): Release memory of the obstack.
	(hsa_op_immed::operator new): Use obstack instead of object_allocator.
	(hsa_op_reg::operator new): Likewise.
	(hsa_op_address::operator new): Likewise.
	(hsa_op_code_list::operator new): Likewise.
	(hsa_op_operand_list::operator new): Likewise.
	(hsa_insn_basic::operator new): Likewise.
	(hsa_insn_phi::operator new): Likewise.
	(hsa_insn_br::operator new): Likewise.
	(hsa_insn_sbr::operator new): Likewise.
	(hsa_insn_cmp::operator new): Likewise.
	(hsa_insn_mem::operator new): Likewise.
	(hsa_insn_atomic::operator new): Likewise.
	(hsa_insn_signal::operator new): Likewise.
	(hsa_insn_seg::operator new): Likewise.
	(hsa_insn_call::operator new): Likewise.
	(hsa_insn_arg_block::operator new): Likewise.
	(hsa_insn_comment::operator new): Likewise.
	(hsa_insn_srctype::operator new): Likewise.
	(hsa_insn_packed::operator new): Likewise.
	(hsa_insn_cvt::operator new): Likewise.
	(hsa_insn_alloca::operator new): Likewise.
	(hsa_init_new_bb): Likewise.
	(hsa_bb::append_phi): New function.
	(gen_hsa_phi_from_gimple_phi): Use it.
	(get_symbol_for_decl): Fix dinstinguishing between
	global and local functions.  Put local variables into a segment
	according to their attribute or static flag, if there is one.
	(hsa_insn_br::hsa_insn_br): New.
	(hsa_insn_br::operator new): Likewise.
	(hsa_insn_cbr::hsa_insn_cbr): Set width via ancestor constructor.
	(query_hsa_grid_nodim): New function.
	(multiply_grid_dim_characteristics): Likewise.
	(gen_get_num_threads): Likewise.
	(gen_get_num_teams): Reimplemented.
	(gen_get_team_num): Likewise.
	(gen_hsa_insns_for_known_library_call): Updated calls to the above
	helper functions.
	(get_memory_order_name): Removed.
	(get_memory_order): Likewise.
	(hsa_memorder_from_tree): New function.
	(gen_hsa_ternary_atomic_for_builtin): Renamed to
	gen_hsa_atomic_for_builtin, can also create signals.
	(gen_hsa_insns_for_call): Handle many new builtins.  Adjust to use
	hsa_memory_order_from_tree and gen_hsa_atomic_for_builtin.
	(hsa_insn_atomic): Fix function comment.
	(hsa_insn_signal::hsa_insn_signal): Fix comment.  Update call to
	ancestor constructor and initialization of new member variables.
	(hsa_insn_queue::hsa_insn_queue): Added initialization of new
	member variables.
	(hsa_get_host_function): Handle functions with no bound CPU
	implementation.  Fix binded to bound.
	(get_brig_function_name): Likewise.
	(HSA_SORRY_ATV): Remove semicolon after macro.
	(HSA_SORRY_AT): Likewise.
	(omp_simple_builtin::generate): Add missing semicolons.
	(hsa_insn_phi::operator new): Removed.
	(hsa_insn_br::operator new): Likewise.
	(hsa_insn_cbr::operator new): Likewise.
	(hsa_insn_sbr::operator new): Likewise.
	(hsa_insn_cmp::operator new): Likewise.
	(hsa_insn_mem::operator new): Likewise.
	(hsa_insn_atomic::operator new): Likewise.
	(hsa_insn_signal::operator new): Likewise.
	(hsa_insn_seg::operator new): Likewise.
	(hsa_insn_call::operator new): Likewise.
	(hsa_insn_arg_block::operator new): Likewise.
	(hsa_insn_comment::operator new): Likewise.
	(hsa_insn_srctype::operator new): Likewise.
	(hsa_insn_packed::operator new): Likewise.
	(hsa_insn_cvt::operator new): Likewise.
	(hsa_insn_alloca::operator new): Likewise.
	(get_symbol_for_decl): Accept CONST_DECLs, put them to
	readonly segment.
	(gen_hsa_addr): Also process CONST_DECLs.
	(gen_hsa_addr_insns): Process CONST_DECLs by creating private
	copies.
	(gen_hsa_unary_operation): Make sure the function does
	not use bittype source type for firstbit and lastbit operations.
	(gen_hsa_popcount_to_dest): Make sure the function uses a bittype
	source type.
	* hsa-brig.c (emit_insn_operands): Cope with zero operands in an
	instruction.
	(emit_branch_insn): Renamed to emit_cond_branch_insn.
	Emit the width stored in the class.
	(emit_generic_branch_insn): New function.
	(emit_insn): Call emit_generic_branch_insn.
	(emit_signal_insn): Remove obsolete comment.  Update
	member variable name, pick a type according to profile.
	(emit_alloca_insn): Remove obsolete comment.
	(emit_atomic_insn): Likewise.
	(emit_queue_insn): Get segment and memory order from the IR object.
	(hsa_brig_section): Make allocate_new_chunk, chunks
	and cur_chunk provate, add a default NULL parameter to add method.
	(hsa_brig_section::add): Added a new parameter, store pointer to
	output data there if it is non-NULL.
	(emit_function_directives): Use this new parameter instead of
	calculating the pointer itself, fix function comment.
	(hsa_brig_emit_function): Add forgotten endian conversion.
	(hsa_output_kernels): Remove unnecessary building of
	kernel_dependencies_vector_type.
	(emit_immediate_operand): Declare.
	(emit_directive_variable): Also emit initializers of CONST_DECLs.
	(gen_hsa_insn_for_internal_fn_call): Also handle IFN_RSQRT.
	(verify_function_arguments): Properly detect variadic
	arguments.
	* hsa-dump.c (hsa_width_specifier_name): New function.
	(dump_hsa_insn_1): Dump generic branch instructions, update signal
	member variable name.  Special dumping for queue objects.
	* ipa-hsa.c (process_hsa_functions): Adjust after renaming
	m_binded_functions to m_bound_functions.  Copy externally visible flag
	to the node.
	(ipa_hsa_write_summary): Likewise.
	(ipa_hsa_read_section): Likewise.


	gcc/fortran/
        * f95-lang.c (DEF_HSA_BUILTIN): New macro.

gcc/testsuite/
	* c-c++-common/gomp/gridify-1.c: Update scan string.
	* gfortran.dg/gomp/gridify-1.f90: Likewise.
	* c-c++-common/gomp/gridify-2.c: New test.
	* c-c++-common/gomp/gridify-3.c: Likewise.

libgomp/
	* testsuite/libgomp.hsa.c/bits-insns.c: New test.
	* testsuite/libgomp.hsa.c/tiling-1.c: Likewise.
	* testsuite/libgomp.hsa.c/tiling-2.c: Likewise.


Co-Authored-By: Martin Liska <mliska@suse.cz>

From-SVN: r242761
2016-11-23 15:51:02 +01:00
Richard Biener
a5bb8a5cea re PR tree-optimization/78154 (memcpy et al can be assumed to return non-null)
2016-11-23  Richard Biener  <rguenther@suse.de>
	    Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.rog>

	PR tree-optimization/78154
	* tree-vrp.c (gimple_stmt_nonzero_warnv_p): Return true if function
	returns it's argument and the argument is nonnull.
	* builtin-attrs.def: Define ATTR_RETURNS_NONNULL,
	ATT_RETNONNULL_NOTHROW_LEAF.
	* builtins.def (BUILT_IN_MEMPCPY): Change attribute to
	ATTR_RETNONNULL_NOTHROW_LEAF.
	(BUILT_IN_STPCPY): Likewise.
	(BUILT_IN_STPNCPY): Likewise.
	(BUILT_IN_MEMPCPY_CHK): Likewise.
	(BUILT_IN_STPCPY_CHK): Likewise.
	(BUILT_IN_STPNCPY_CHK): Likewise.
	(BUILT_IN_STRCAT): Change attribute to ATTR_RET1_NOTHROW_NONNULL_LEAF.
	(BUILT_IN_STRNCAT): Likewise.
	(BUILT_IN_STRNCPY): Likewise.
	(BUILT_IN_MEMSET_CHK): Likewise.
	(BUILT_IN_STRCAT_CHK): Likewise.
	(BUILT_IN_STRCPY_CHK): Likewise.
	(BUILT_IN_STRNCAT_CHK): Likewise.
	(BUILT_IN_STRNCPY_CHK): Likewise.

testsuite/
	* gcc.dg/tree-ssa/pr78154.c: New test.

Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>

From-SVN: r242745
2016-11-23 10:52:25 +00:00
Bernd Edlinger
48330c9355 re PR c++/71973 (c++ handles built-in functions inconsistently)
gcc:
2016-11-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR c++/71973
	* doc/invoke.texi (-Wno-builtin-declaration-mismatch): Document the
	new default-enabled warning..
	* builtin-types.def (BT_CONST_TM_PTR): New primitive type.
	(BT_PTR_CONST_STRING): Updated.
	(BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR): Removed.
	(BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_TM_PTR): New function type.
	* builtins.def (DEF_TM_BUILTIN): Disable BOTH_P for TM builtins.
	(strftime): Update builtin function.
	* tree-core.h (TI_CONST_TM_PTR_TYPE): New enum value.
	* tree.h (const_tm_ptr_type_node): New type node.
	* tree.c (free_lang_data, build_common_tree_nodes): Initialize
	const_tm_ptr_type_node.

c-family:
2016-11-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR c++/71973
	* c.opt (-Wbuiltin-declaration-mismatch): New warning.
	* c-common.c (c_common_nodes_and_builtins): Initialize
	const_tm_ptr_type_node.

c:
2016-11-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR c++/71973
	* c-decl.c (diagnose_mismatched_decls): Use
	OPT_Wbuiltin_declaration_mismatch here too.

cp:
2016-11-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR c++/71973
	* decl.c (duplicate_decls): Warn when a built-in function is redefined.
	Don't overload builtin functions with C++ functions.
	Handle const_tm_ptr_type_node like file_ptr_node.
	Copy the TREE_NOTHROW flag unmodified to the old decl.

lto:
2016-11-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR c++/71973
	* lto-lang.c (lto_init): Assert const_tm_ptr_type_node is sane.

testsuite:
2016-11-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR c++/71973
	* g++.dg/pr71973-1.C: New test.
	* g++.dg/pr71973-2.C: New test.
	* g++.dg/pr71973-3.C: New test.
	* g++.dg/lto/pr68811_0.C: Add -w to first lto-options.
	* g++.dg/lookup/extern-c-redecl4.C: Adjust test expectations.
	* g++.old-deja/g++.mike/p700.C: Add -Wno-builtin-declaration-mismatch
	to dg-options.
	* g++.old-deja/g++.other/realloc.C: Likewise.
	* g++.old-deja/g++.other/builtins10.C: Adjust test expectations.

From-SVN: r242662
2016-11-21 14:17:05 +00:00
Eric Botcazou
4c640e2606 re PR ada/37139 (DEP prevents using Ada tasking)
PR ada/37139
	PR ada/67205
	* common.opt (-ftrampolines): New option.
	* doc/invoke.texi (Code Gen Options): Document it.
	* doc/tm.texi.in (Trampolines): Add TARGET_CUSTOM_FUNCTION_DESCRIPTORS.
	* doc/tm.texi: Regenerate.
	* builtins.def: Add init_descriptor and adjust_descriptor.
	* builtins.c (expand_builtin_init_trampoline): Do not issue a warning
	on platforms with descriptors.
	(expand_builtin_init_descriptor): New function.
	(expand_builtin_adjust_descriptor): Likewise.
	(expand_builtin) <BUILT_IN_INIT_DESCRIPTOR>: New case.
	<BUILT_IN_ADJUST_DESCRIPTOR>: Likewise.
	* calls.c (prepare_call_address): Remove SIBCALLP parameter and add
	FLAGS parameter.  Deal with indirect calls by descriptor and adjust.
	Set STATIC_CHAIN_REG_P on the static chain register, if any.
	(call_expr_flags): Set ECF_BY_DESCRIPTOR for calls by descriptor.
	(expand_call): Likewise.  Move around call to prepare_call_address
	and pass all flags to it.
	* cfgexpand.c (expand_call_stmt): Reinstate CALL_EXPR_BY_DESCRIPTOR.
	* gimple.h (enum gf_mask): New GF_CALL_BY_DESCRIPTOR value.
	(gimple_call_set_by_descriptor): New setter.
	(gimple_call_by_descriptor_p): New getter.
	* gimple.c (gimple_build_call_from_tree): SetCALL_EXPR_BY_DESCRIPTOR.
	(gimple_call_flags): Deal with GF_CALL_BY_DESCRIPTOR.
	* langhooks.h (struct lang_hooks): Add custom_function_descriptors.
	* langhooks-def.h (LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS): Define.
	(LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS.
	* rtl.h (STATIC_CHAIN_REG_P): New macro.
	* rtlanal.c (find_first_parameter_load): Skip static chain registers.
	* target.def (custom_function_descriptors): New POD hook.
	* tree.h (FUNC_ADDR_BY_DESCRIPTOR): New flag on ADDR_EXPR.
	(CALL_EXPR_BY_DESCRIPTOR): New flag on CALL_EXPR.
	* tree-core.h (ECF_BY_DESCRIPTOR): New mask.
	Document FUNC_ADDR_BY_DESCRIPTOR and CALL_EXPR_BY_DESCRIPTOR.
	* tree.c (make_node_stat) <tcc_declaration>: Use FUNCTION_ALIGNMENT.
	(build_common_builtin_nodes): Initialize init_descriptor and
	adjust_descriptor.
	* tree-nested.c: Include target.h.
	(struct nesting_info): Add 'any_descr_created' field.
	(get_descriptor_type): New function.
	(lookup_element_for_decl): New function extracted from...
	(create_field_for_decl): Likewise.
	(lookup_tramp_for_decl): ...here.  Adjust.
	(lookup_descr_for_decl): New function.
	(convert_tramp_reference_op): Deal with descriptors.
	(build_init_call_stmt): New function extracted from...
	(finalize_nesting_tree_1): ...here.  Adjust and deal withdescriptors.
	* defaults.h (FUNCTION_ALIGNMENT): Define.
	(TRAMPOLINE_ALIGNMENT): Set to above instead of FUNCTION_BOUNDARY.
	* config/i386/i386.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Define.
	* config/ia64/ia64.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Likewise.
	* config/rs6000/rs6000.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS):Likewise.
	* config/sparc/sparc.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Likewise.
ada/
	* gcc-interface/misc.c (LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS):Define.
	* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Access>: Deal with
	a zero TARGET_CUSTOM_FUNCTION_DESCRIPTORS specially for Code_Address.
	Otherwise, if TARGET_CUSTOM_FUNCTION_DESCRIPTORS is positive, set
	FUNC_ADDR_BY_DESCRIPTOR for 'Access/'Unrestricted_Access of nested
	subprograms if the type can use an internal representation.
	(call_to_gnu): Likewise, but set CALL_EXPR_BY_DESCRIPTOR on indirect
	calls if the type can use an internal representation.

From-SVN: r241222
2016-10-16 20:13:32 +00:00
Joseph Myers
6dc198e3a5 Add minimal _FloatN, _FloatNx built-in functions.
This patch adds a minimal set of built-in functions for the new
_FloatN and _FloatNx types.

The functions added are __builtin_fabs*, __builtin_copysign*,
__builtin_huge_val*, __builtin_inf*, __builtin_nan* and
__builtin_nans* (where * = fN or fNx).  That is, 42 new entries are
added to the enum of built-in functions and the associated array of
decls, where not all of them are actually supported on any one target.

These functions are believed to be sufficient for libgcc (complex
multiplication and division use __builtin_huge_val*,
__builtin_copysign* and __builtin_fabs*) and for glibc (which also
depends on complex multiplication from libgcc, as well as using such
functions itself).  The basic target-independent support for folding /
expanding calls to these built-in functions is wired up, so those for
constants can be used in static initializers, and the fabs and
copysign built-ins can always be expanded to bit-manipulation inline
(for any format setting signbit_ro and signbit_rw, which covers all
formats supported for _FloatN and _FloatNx), although insn patterns
for fabs (abs<mode>2) and copysign (copysign<mode>3) will be used when
available and may result in more optimal code.

The complex multiplication and division functions in libgcc rely on
predefined macros (defined with -fbuilding-libgcc) to say what the
built-in function suffixes to use with a particular mode are.  This
patch updates that code accordingly, where previously it involved a
hack supposing that machine-specific suffixes for constants were also
suffixes for built-in functions.

As with the main _FloatN / _FloatNx patch, this patch does not update
code dealing only with optimizations that currently has cases only
covering float, double and long double, though some such cases are
straightforward and may be covered in a followup patch.

The functions are defined with DEF_GCC_BUILTIN, so calls to the TS
18661-3 functions such as fabsf128 and copysignf128, without the
__builtin_, will not be optimized.  As noted in the original _FloatN /
_FloatNx patch submission, in principle the bulk of the libm functions
that have built-in versions should have those versions extended to
cover the new types, but that would require more consideration of the
effects of increasing the size of the enum and initializing many more
functions at startup.

I don't know whether target-specific built-in functions can readily be
made into aliases for target-independent functions, but if they can,
it would make sense to do so for the x86, ia64 and rs6000 *q functions
corresponding to these, so that they can benefit from the
architecture-independent folding logic and from any optimizations
enabled for these functions in future, and so that less
target-specific code is needed to support them.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc:
	* tree.h (CASE_FLT_FN_FLOATN_NX, float16_type_node)
	(float32_type_node, float64_type_node, float32x_type_node)
	(float128x_type_node): New macros.
	* builtin-types.def (BT_FLOAT16, BT_FLOAT32, BT_FLOAT64)
	(BT_FLOAT128, BT_FLOAT32X, BT_FLOAT64X, BT_FLOAT128X)
	(BT_FN_FLOAT16, BT_FN_FLOAT32, BT_FN_FLOAT64, BT_FN_FLOAT128)
	(BT_FN_FLOAT32X, BT_FN_FLOAT64X, BT_FN_FLOAT128X)
	(BT_FN_FLOAT16_FLOAT16, BT_FN_FLOAT32_FLOAT32)
	(BT_FN_FLOAT64_FLOAT64, BT_FN_FLOAT128_FLOAT128)
	(BT_FN_FLOAT32X_FLOAT32X, BT_FN_FLOAT64X_FLOAT64X)
	(BT_FN_FLOAT128X_FLOAT128X, BT_FN_FLOAT16_CONST_STRING)
	(BT_FN_FLOAT32_CONST_STRING, BT_FN_FLOAT64_CONST_STRING)
	(BT_FN_FLOAT128_CONST_STRING, BT_FN_FLOAT32X_CONST_STRING)
	(BT_FN_FLOAT64X_CONST_STRING, BT_FN_FLOAT128X_CONST_STRING)
	(BT_FN_FLOAT16_FLOAT16_FLOAT16, BT_FN_FLOAT32_FLOAT32_FLOAT32)
	(BT_FN_FLOAT64_FLOAT64_FLOAT64, BT_FN_FLOAT128_FLOAT128_FLOAT128)
	(BT_FN_FLOAT32X_FLOAT32X_FLOAT32X)
	(BT_FN_FLOAT64X_FLOAT64X_FLOAT64X)
	(BT_FN_FLOAT128X_FLOAT128X_FLOAT128X): New type definitions.
	* builtins.def (DEF_GCC_FLOATN_NX_BUILTINS): New macro.
	(copysign, fabs, huge_val, inf, nan, nans): Use it.
	* builtins.c (expand_builtin): Use CASE_FLT_FN_FLOATN_NX for fabs
	and copysign.
	(fold_builtin_0): Use CASE_FLT_FN_FLOATN_NX for inf and huge_val.
	(fold_builtin_1): Use CASE_FLT_FN_FLOATN_NX for fabs.
	* doc/extend.texi (Other Builtins): Document these built-in
	functions.
	* fold-const-call.c (fold_const_call): Use CASE_FLT_FN_FLOATN_NX
	for nan and nans.

gcc/c-family:
	* c-family/c-cppbuiltin.c (c_cpp_builtins): Check _FloatN and
	_FloatNx types for suffixes for built-in functions.

gcc/testsuite:
	* gcc.dg/torture/float128-builtin.c,
	gcc.dg/torture/float128-ieee-nan.c,
	gcc.dg/torture/float128x-builtin.c,
	gcc.dg/torture/float128x-nan.c, gcc.dg/torture/float16-builtin.c,
	gcc.dg/torture/float16-nan.c, gcc.dg/torture/float32-builtin.c,
	gcc.dg/torture/float32-nan.c, gcc.dg/torture/float32x-builtin.c,
	gcc.dg/torture/float32x-nan.c, gcc.dg/torture/float64-builtin.c,
	gcc.dg/torture/float64-nan.c, gcc.dg/torture/float64x-builtin.c,
	gcc.dg/torture/float64x-nan.c, gcc.dg/torture/floatn-builtin.h,
	gcc.dg/torture/floatn-nan.h: New tests.

From-SVN: r239658
2016-08-22 12:57:39 +01:00
Bernd Edlinger
cfd97da10d 016-07-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR middle-end/71876
        * builtin-attrs.def (ATTR_RT_NOTHROW_LEAF_LIST): New return twice
        attribute.
        * builtins.def (BUILT_IN_SETJMP): Use ATTR_RT_NOTHROW_LEAF_LIST here.
        * calls.c (special_function_p): Remove the special handling of the
        "__builtin_" prefix.

From-SVN: r238606
2016-07-21 19:11:26 +00:00
Martin Sebor
4d926e3493 PR c/71392 - SEGV calling integer overflow built-ins with a null pointer
gcc/ChangeLog:
2016-06-10  Martin Sebor  <msebor@redhat.com>

	PR c/71392
	* builtin-attrs.def (ATTR_NOTHROW_NONNULL_LEAF_LIST): New macro.
	(ATTR_NOTHROW_NONNULL_TYPEGENERIC_LEAF): Same.
	* builtins.def (BUILT_IN_SADD_OVERFLOW, BUILT_IN_SADDL_OVERFLOW): Use
	them.
	(BUILT_IN_SADDLL_OVERFLOW, BUILT_IN_SSUB_OVERFLOW): Same.
	(BUILT_IN_SSUBL_OVERFLOW, BUILT_IN_SSUBLL_OVERFLOW): Same.
	(BUILT_IN_SMUL_OVERFLOW, BUILT_IN_SMULL_OVERFLOW): Same.
	(BUILT_IN_SMULLL_OVERFLOW, BUILT_IN_UADD_OVERFLOW): Same.
	(BUILT_IN_UADDL_OVERFLOW, BUILT_IN_UADDLL_OVERFLOW): Same.
	(BUILT_IN_USUB_OVERFLOW, BUILT_IN_USUBL_OVERFLOW): Same.
	(BUILT_IN_USUBLL_OVERFLOW, BUILT_IN_UMUL_OVERFLOW): Same.
	(BUILT_IN_UMULL_OVERFLOW, BUILT_IN_UMULLL_OVERFLOW):

gcc/ada/ChangeLog:
2016-06-10  Martin Sebor  <msebor@redhat.com>

	PR c/71392
	* gcc/ada/gcc-interface/utils.c (handle_nonnull_attribute): Accept
	the nonnull attribute in type-generic builtins.

gcc/c-family/ChangeLog:
2016-06-10  Martin Sebor  <msebor@redhat.com>

	PR c/71392
	* gcc/c-family/c-common.c (handle_nonnull_attribute): Accept
	the nonnull attribute in type-generic builtins.

gcc/lto/ChangeLog:
2016-06-10  Martin Sebor  <msebor@redhat.com>

	PR c/71392
	* gcc/lto/lto-lang.c (handle_nonnull_attribute): Accept the nonnull
	attribute in type-generic builtins.

gcc/testsuite/ChangeLog:
2016-06-10  Martin Sebor  <msebor@redhat.com>

	PR c/71392
	* c-c++-common/builtin-arith-overflow-1.c: Add test cases.

From-SVN: r237314
2016-06-10 11:38:19 -06:00