197038 Commits

Author SHA1 Message Date
Richard Biener
0976b012d8 tree-optimization/107867 - failed abnormal cleanup in forwprop
The following makes sure to perform abnormal cleanup when forwprop
propagates into a call.

	PR tree-optimization/107867
	* tree-ssa-forwprop.cc (pass_forwprop::execute): Handle
	abnormal cleanup after substitution.

	* g++.dg/pr107867.C: New testcase.
2022-11-28 09:00:18 +01:00
Lulu Cheng
be591d00ed LoongArch: Optimize immediate load.
The immediate number is split in the Split pass, not in the expand pass.

Because loop2_invariant pass will extract the instructions that do not change
in the loop out of the loop, some instructions will not meet the extraction
conditions if the machine performs immediate decomposition while expand pass,
so the immediate decomposition will be transferred to the split process.

gcc/ChangeLog:

	* config/loongarch/loongarch.cc (enum loongarch_load_imm_method):
	Remove the member METHOD_INSV that is not currently used.
	(struct loongarch_integer_op): Define a new member curr_value,
	that records the value of the number stored in the destination
	register immediately after the current instruction has run.
	(loongarch_build_integer): Assign a value to the curr_value member variable.
	(loongarch_move_integer): Adds information for the immediate load instruction.
	* config/loongarch/loongarch.md (*movdi_32bit): Redefine as define_insn_and_split.
	(*movdi_64bit): Likewise.
	(*movsi_internal): Likewise.
	(*movhi_internal): Likewise.
	* config/loongarch/predicates.md: Return true as long as it is CONST_INT, ensure
	that the immediate number is not optimized by decomposition during expand
	optimization loop.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/imm-load.c: New test.
	* gcc.target/loongarch/imm-load1.c: New test.
2022-11-28 10:38:02 +08:00
liuhongt
a1ecc56004 Fix incorrect _mm_cvtsbh_ss.
After supporting real __bf16, the implementation of _mm_cvtsbh_ss went
wrong.

The patch add a builtin to generate pslld for the intrinsic, also
extendbfsf2 is supported with pslld when !HONOR_NANS (BFmode).

truncsfbf2 is supported with vcvtneps2bf16 when
!HONOR_NANS (BFmode) && flag_unsafe_math_optimizations.

gcc/ChangeLog:

	PR target/107748
	* config/i386/avx512bf16intrin.h (_mm_cvtsbh_ss): Refined.
	* config/i386/i386-builtin-types.def (FLOAT_FTYPE_BFLOAT16):
	New function type.
	* config/i386/i386-builtin.def (BDESC): New builtin.
	* config/i386/i386-expand.cc (ix86_expand_args_builtin):
	Handle the builtin.
	* config/i386/i386.md (extendbfsf2): New expander.
	(extendbfsf2_1): New define_insn.
	(truncsfbf2): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512bf16-cvtsbh2ss-1.c: Scan pslld.
	* gcc.target/i386/extendbfsf.c: New test.
2022-11-28 09:02:51 +08:00
GCC Administrator
14d11df963 Daily bump. 2022-11-28 00:16:43 +00:00
GCC Administrator
4ac789789e Daily bump. 2022-11-27 00:16:16 +00:00
Andrew Pinski
f9378e3cc3 tree-optimization/103356 Add missing (~a) == b folding for _Bool
The following makes sure to fold (~a) ==  b to a ^ b for truth
values.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

	PR tree-optimization/103356

gcc/ChangeLog:

	* match.pd: ((~a) == b -> a ^ b): New pattern.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr103356-1.c: New test.
2022-11-26 18:00:43 +00:00
GCC Administrator
d769c50408 Daily bump. 2022-11-26 00:17:08 +00:00
Sandra Loosemore
309e2d95e3 OpenMP: Generate SIMD clones for functions with "declare target"
This patch causes the IPA simdclone pass to generate clones for
functions with the "omp declare target" attribute as if they had
"omp declare simd", provided the function appears to be suitable for
SIMD execution.  The filter is conservative, rejecting functions
that write memory or that call other functions not known to be safe.
A new option -fopenmp-target-simd-clone is added to control this
transformation; it's enabled for offload processing at -O2 and higher.

gcc/ChangeLog:

	* common.opt (fopenmp-target-simd-clone): New option.
	(target_simd_clone_device): New enum to go with it.
	* doc/invoke.texi (-fopenmp-target-simd-clone): Document.
	* flag-types.h (enum omp_target_simd_clone_device_kind): New.
	* omp-simd-clone.cc (auto_simd_fail): New function.
	(auto_simd_check_stmt): New function.
	(plausible_type_for_simd_clone): New function.
	(ok_for_auto_simd_clone): New function.
	(simd_clone_create): Add force_local argument, make the symbol
	have internal linkage if it is true.
	(expand_simd_clones): Also check for cloneable functions with
	"omp declare target".  Pass explicit_p argument to
	simd_clone.compute_vecsize_and_simdlen target hook.
	* opts.cc (default_options_table): Add -fopenmp-target-simd-clone.
	* target.def (TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN):
	Add bool explicit_p argument.
	* doc/tm.texi: Regenerated.
	* config/aarch64/aarch64.cc
	(aarch64_simd_clone_compute_vecsize_and_simdlen): Update.
	* config/gcn/gcn.cc
	(gcn_simd_clone_compute_vecsize_and_simdlen): Update.
	* config/i386/i386.cc
	(ix86_simd_clone_compute_vecsize_and_simdlen): Update.

gcc/testsuite/ChangeLog:

	* g++.dg/gomp/target-simd-clone-1.C: New.
	* g++.dg/gomp/target-simd-clone-2.C: New.
	* gcc.dg/gomp/target-simd-clone-1.c: New.
	* gcc.dg/gomp/target-simd-clone-2.c: New.
	* gcc.dg/gomp/target-simd-clone-3.c: New.
	* gcc.dg/gomp/target-simd-clone-4.c: New.
	* gcc.dg/gomp/target-simd-clone-5.c: New.
	* gcc.dg/gomp/target-simd-clone-6.c: New.
	* gcc.dg/gomp/target-simd-clone-7.c: New.
	* gcc.dg/gomp/target-simd-clone-8.c: New.
	* lib/scanoffloadipa.exp: New.

libgomp/ChangeLog:

	* testsuite/lib/libgomp.exp: Load scanoffloadipa.exp library.
	* testsuite/libgomp.c/target-simd-clone-1.c: New.
	* testsuite/libgomp.c/target-simd-clone-2.c: New.
	* testsuite/libgomp.c/target-simd-clone-3.c: New.
2022-11-25 18:13:22 +00:00
Weimin Pan
3de627ffe4 sync libsframe toplevel from binutils-gdb
This pulls in the toplevel portion of this binutils-gdb commit:
   19e559f1c91bfaedbd2f91d85ee161f3f03fda3c libsframe: add the SFrame library

ChangeLog:
	* Makefile.def: Add libsframe as new module with its dependencies.
	* Makefile.in: Regenerated.
	* configure.ac: Add libsframe to host_libs.
	* configure: Regenerated.
2022-11-25 15:48:03 +00:00
Jonathan Wakely
7b648e8313 libstdc++: Fix orphaned/nested output of configure checks
This moves two AC_MSG_RESULT lines for <uchar.h> features so that they
are only printed when the corresponding AC_MSG_CHECKING actually
happened. This fixes configure output like:

checking for uchar.h... no
no
checking for int64_t... yes

Also move the AC_MSG_CHECKING for libbacktrace support so it doesn't
come after AC_CHECK_HEADERS output. This fixes:

checking whether to build libbacktrace support... checking for sys/mman.h... (cached) yes
yes

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_CHECK_UCHAR_H): Don't use AC_MSG_RESULT
	unless the AC_MSG_CHECKING happened.
	* configure: Regenerate.
2022-11-25 15:07:29 +00:00
Jonathan Wakely
f54ceb2062 libstdc++: Call predicate with non-const values in std::erase_if [PR107850]
As specified in the standard, the predicate for std::erase_if has to be
invocable as non-const with a non-const lvalues argument. Restore
support for predicates that only accept non-const arguments.

It's not strictly nevessary to change it for the set and unordered_set
overloads, because they only give const access to the elements anyway.
I've done it for them too just to keep them all consistent.

libstdc++-v3/ChangeLog:

	PR libstdc++/107850
	* include/bits/erase_if.h (__erase_nodes_if): Use non-const
	reference to the container.
	* include/experimental/map (erase_if): Likewise.
	* include/experimental/set (erase_if): Likewise.
	* include/experimental/unordered_map (erase_if): Likewise.
	* include/experimental/unordered_set (erase_if): Likewise.
	* include/std/map (erase_if): Likewise.
	* include/std/set (erase_if): Likewise.
	* include/std/unordered_map (erase_if): Likewise.
	* include/std/unordered_set (erase_if): Likewise.
	* testsuite/23_containers/map/erasure.cc: Check with
	const-incorrect predicate.
	* testsuite/23_containers/set/erasure.cc: Likewise.
	* testsuite/23_containers/unordered_map/erasure.cc: Likewise.
	* testsuite/23_containers/unordered_set/erasure.cc: Likewise.
	* testsuite/experimental/map/erasure.cc: Likewise.
	* testsuite/experimental/set/erasure.cc: Likewise.
	* testsuite/experimental/unordered_map/erasure.cc: Likewise.
	* testsuite/experimental/unordered_set/erasure.cc: Likewise.
2022-11-25 15:06:25 +00:00
Jonathan Wakely
48e4a9d938 libstdc++: Do not define operator!= in <random> for C++20
These overloads are not needed in C++20 as they can be synthesized by
the compiler. Removing them means less code to compile when including
these headers.

libstdc++-v3/ChangeLog:

	* include/bits/random.h [three_way_comparison] (operator!=):
	Do not define inequality operators when C++20 three way
	comparisons are supported.
	* include/ext/random [three_way_comparison] (operator!=):
	Likewise.
2022-11-25 15:01:50 +00:00
Jonathan Wakely
6bd8d11922 libstdc++: Add always_inline to trivial iterator operations
libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator_base_funcs.h (__distance):
	Add always_inline attribute to overload for random
	access iterators.
	(advance, distance, next, prev): Add always_inline attribute to
	inline functions that just forward to another function.
2022-11-25 15:01:49 +00:00
Tamar Christina
71f3036b8a sve2: Fix expansion of division [PR107830]
SVE has an actual division optab, and when using -Os we don't
optimize the division away.  This means that we need to distinguish
between a div which we can optimize and one we cannot even during
expansion.

gcc/ChangeLog:

	PR target/107830
	* config/aarch64/aarch64.cc
	(aarch64_vectorize_can_special_div_by_constant): Check validity during
	codegen phase as well.

gcc/testsuite/ChangeLog:

	PR target/107830
	* gcc.target/aarch64/sve2/pr107830-1.c: New test.
	* gcc.target/aarch64/sve2/pr107830-2.c: New test.
2022-11-25 12:57:24 +00:00
Tobias Burnus
9f9d128f45 libgomp: Add no-target-region rev offload test + fix plugin-nvptx
OpenMP permits that a 'target device(ancestor:1)' is called without being
enclosed in a target region - using the current device (i.e. the host) in
that case.  This commit adds a testcase for this.

In case of nvptx, the missing on-device 'GOMP_target_ext' call causes that
it and also the associated on-device GOMP_REV_OFFLOAD_VAR variable are not
linked in from nvptx's libgomp.a. Thus, handle the failing cuModuleGetGlobal
gracefully by disabling reverse offload and assuming that the failure is fine.

libgomp/ChangeLog:

	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_load_image): Use unsigned int
	for 'i' to match 'fn_entries'; regard absent GOMP_REV_OFFLOAD_VAR
	as valid and the code having no reverse-offload code.
	* testsuite/libgomp.c-c++-common/reverse-offload-2.c: New test.
2022-11-25 13:48:17 +01:00
Tobias Burnus
c16e85d726 libgomp.texi: OpenMP Impl Status 5.1 additions + TR11
libgomp/ChangeLog:

	* libgomp.texi (OpenMP Implementation Status): Add three 5.1 items
	and status for Technical Report (TR) 11.
2022-11-25 11:54:42 +01:00
Martin Liska
f9e9a15bb2 Revert "gcc-changelog: temporarily disable check_line_start"
This reverts commit a5878983d53db7513edb0e6bd99250dbb0c7d147.
2022-11-25 11:06:15 +01:00
GCC Administrator
9a1b4f1d3d Daily bump. 2022-11-25 10:03:24 +00:00
Martin Liska
a5878983d5 gcc-changelog: temporarily disable check_line_start
contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Temporarily disable
	check_line.start.
2022-11-25 11:01:00 +01:00
Eric Botcazou
a8404c07e7 Fix thinko in operator_bitwise_xor::op1_range
There is a thinko in the op1_range method of ranger's operator_bitwise_xor
class in a boolean context: if the result is known to be true, it may infer
that a specific operand is false without any basis.

gcc/
	* range-op.cc (operator_bitwise_xor::op1_range): Fix thinko.

gcc/testsuite/
	* gnat.dg/opt100.adb: New test.
	* gnat.dg/opt100_pkg.adb, gnat.dg/opt100_pkg.ads: New helper.
2022-11-25 10:51:38 +01:00
Martin Liska
2b3a3d7fe3 lto: fix usage of timer in materialize_cgraph
PR lto/107829

gcc/lto/ChangeLog:

	* lto.cc (materialize_cgraph): Call timevar_push before
	  materialization starts.
2022-11-25 10:47:32 +01:00
Richard Biener
bcc2449384 tree-optimization/107865 - ICE with outlining of loops
The following makes sure to clear loops number of iterations when
outlining them as part of a SESE region as can happen with
auto-parallelization.  The referenced SSA names become stale otherwise.

	PR tree-optimization/107865
	* tree-cfg.cc (move_sese_region_to_fn): Free the number of
	iterations of moved loops.

	* gfortran.dg/graphite/pr107865.f90: New testcase.
2022-11-25 08:27:42 +01:00
Kewen.Lin
f120196382 Adjust the symbol for SECTION_LINK_ORDER linked_to section [PR99889]
As discussed in PR98125, -fpatchable-function-entry with
SECTION_LINK_ORDER support doesn't work well on powerpc64
ELFv1 because the filled "Symbol" in

  .section name,"flags"o,@type,Symbol

sits in .opd section instead of in the function_section
like .text or named .text*.

Since we already generates one label LPFE* which sits in
function_section of current_function_decl, this patch is
to reuse it as the symbol for the linked_to section.  It
avoids the above ABI specific issue when using the symbol
concluded from current_function_decl.

Besides, with this support some previous workarounds can
be reverted.

	PR target/99889

gcc/ChangeLog:

	* config/rs6000/rs6000.cc (rs6000_print_patchable_function_entry):
	Adjust to call function default_print_patchable_function_entry.
	* targhooks.cc (default_print_patchable_function_entry_1): Remove and
	move the flags preparation ...
	(default_print_patchable_function_entry): ... here, adjust to use
	current_function_funcdef_no for label no.
	* targhooks.h (default_print_patchable_function_entry_1): Remove.
	* varasm.cc (default_elf_asm_named_section): Adjust code for
	__patchable_function_entries section support with LPFE label.

gcc/testsuite/ChangeLog:

	* g++.dg/pr93195a.C: Remove the skip on powerpc*-*-* 64-bit.
	* gcc.target/aarch64/pr92424-2.c: Adjust LPFE1 with LPFE0.
	* gcc.target/aarch64/pr92424-3.c: Likewise.
	* gcc.target/i386/pr93492-2.c: Likewise.
	* gcc.target/i386/pr93492-3.c: Likewise.
	* gcc.target/i386/pr93492-4.c: Likewise.
	* gcc.target/i386/pr93492-5.c: Likewise.
2022-11-24 21:17:28 -06:00
Jonathan Wakely
4581328022 libstdc++: Change return type of std::bit_width to int (LWG 3656)
libstdc++-v3/ChangeLog:

	* doc/html/manual/bugs.html: Regenerate.
	* doc/xml/manual/intro.xml: Document LWG 3656 change.
	* include/std/bit (__bit_width, bit_width): Return int.
	* testsuite/26_numerics/bit/bit.pow.two/lwg3656.cc: New test.
2022-11-25 00:22:01 +00:00
Jonathan Wakely
3892251498 libstdc++: Update tests on trunk [PR106201]
This copies the better tests from gcc-12 to trunk.

libstdc++-v3/ChangeLog:

	PR libstdc++/106201
	* testsuite/27_io/filesystem/iterators/106201.cc: Improve test.
	* testsuite/experimental/filesystem/iterators/106201.cc: New test.
2022-11-24 21:46:13 +00:00
Wilco Dijkstra
0c1b0a23f1 AArch64: Add fma_reassoc_width [PR107413]
Add a reassocation width for FMA in per-CPU tuning structures. Keep
the existing setting of 1 for cores with 2 FMA pipes (this disables
reassociation), and use 4 for cores with 4 FMA pipes.  This improves
SPECFP2017 on Neoverse V1 by ~1.5%.

gcc/
	PR tree-optimization/107413
	* config/aarch64/aarch64.cc (struct tune_params): Add
	fma_reassoc_width to all CPU tuning structures.
	(aarch64_reassociation_width): Use fma_reassoc_width.
	* config/aarch64/aarch64-protos.h (struct tune_params): Add
	fma_reassoc_width.
2022-11-24 13:30:04 +00:00
Jakub Jelinek
138ee8f745 c++: Further -fcontract* option description fixes
During testing I've missed my previous patch just changed:
-FAIL: compiler driver --help=c++ option(s): "^ +-.*[^:.]\$" absent from output: "  -fcontract-build-level=[off|default|audit] Specify max contract level to generate runtime checks for"
+FAIL: compiler driver --help=c++ option(s): "^ +-.*[^:.]\$" absent from output: "  -fcontract-role=<name>:<semantics> Specify the semantics for all levels in a role (default, review), or a custom contract role with given semantics (ex: opt:assume,assume,assume)"
rather than actually fixed it, the test only reports the first such problem.

This patch fixes the remaining ones.

2022-11-24  Jakub Jelinek  <jakub@redhat.com>

	* c.opt (fcontract-role=, fcontract-semantic=): Terminate descriptions
	with a dot.
2022-11-24 11:51:34 +01:00
Jakub Jelinek
b6330a7685 asan: Fix up error recovery for too large frames [PR107317]
asan_emit_stack_protection and functions it calls have various asserts that
verify sanity of the stack protection instrumentation.  But, that
verification can easily fail if we've diagnosed a frame offset overflow.
asan_emit_stack_protection just emits some extra code in the prologue,
if we've reported errors, we aren't producing assembly, so it doesn't
really matter if we don't include the protection code, compilation
is going to fail anyway.

2022-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/107317
	* asan.cc: Include diagnostic-core.h.
	(asan_emit_stack_protection): Return NULL early if seen_error ().

	* gcc.dg/asan/pr107317.c: New test.
2022-11-24 11:29:54 +01:00
Eric Botcazou
7f77aa6b2f ada: Add assertion for the implementation of storage models
We cannot generate a call to memset for an aggregate with an Others choice
when the target of the assignment has a storage model with Copy_To routine.

gcc/ada/

	* gcc-interface/trans.cc (gnat_to_gnu) <N_Assignment_Statement>: Add
	assertion that memset is not supposed to be used when the target has
	a storage model with Copy_To routine.
2022-11-24 11:11:25 +01:00
Justin Squirek
af94026524 ada: Spurious error on Lock_Free protected type with discriminants
This patch corrects an issue in the compiler whereby unprefixed discriminants
appearing in protected subprograms were unable to be properly resolved -
leading to spurious resolution errors.

gcc/ada/

	* sem_ch8.adb
	(Find_Direct_Name): Remove bypass to reanalyze incorrectly
	analyzed discriminals.
	(Set_Entity_Or_Discriminal): Avoid resetting the entity field of a
	discriminant reference to be the internally generated renaming
	when we are in strict preanalysis mode.
2022-11-24 11:11:25 +01:00
Florian Weimer
a42e39a7b9 c: Propagate erroneous types to declaration specifiers [PR107805]
Without this change, finish_declspecs cannot tell that whether there
was an erroneous type specified, or no type at all.  This may result
in additional diagnostics for implicit ints, or missing diagnostics
for multiple types.

	PR c/107805

gcc/c/
	* c-decl.cc (declspecs_add_type): Propagate error_mark_bode
	from type to specs.

gcc/testsuite/
	* gcc.dg/pr107805-1.c: New test.
	* gcc.dg/pr107805-2.c: Likewise.
2022-11-24 11:02:11 +01:00
Jakub Jelinek
ec73b55c75 libstdc++: Another merge from fast_float upstream [PR107468]
Upstream fast_float came up with a cheaper test for
fegetround () == FE_TONEAREST using one float addition, one subtraction
and one comparison.  If we know we are rounding to nearest, we can use
fast path in more cases as before.
The following patch merges those changes into libstdc++.

2022-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/107468
	* src/c++17/fast_float/MERGE: Adjust for merge from upstream.
	* src/c++17/fast_float/fast_float.h: Merge from fast_float
	2ef9abbcf6a11958b6fa685a89d0150022e82e78 commit.
2022-11-24 10:38:42 +01:00
Jakub Jelinek
d1389be011 libstdc++: Workaround buggy printf on Solaris in to_chars/float128_c++23.cc test [PR107815]
As mentioned in the PR, Solaris apparently can handle right
printf ("%.0Lf\n", 1e+202L * __DBL_MAX__);
which prints 511 chars long number, but can't handle
printf ("%.0Lf\n", 1e+203L * __DBL_MAX__);
nor
printf ("%.0Lf\n", __LDBL_MAX__);
properly, instead of printing 512 chars long number for the former and
4933 chars long number for the second, it handles them as
if user asked for "%.0Le\n" in those cases.

The following patch disables the single problematic value that fails
in the test, and also fixes commented out debugging printouts.

2022-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/107815
	* testsuite/20_util/to_chars/float128_c++23.cc (test): Disable
	__FLT128_MAX__ test on Solaris.  Fix up commented out debugging
	printouts.
2022-11-24 10:37:50 +01:00
Jakub Jelinek
add0f941be testsuite: Fix up broken testcase [PR107127]
I've added { dg-options "" } line manually in the patch but
forgot to adjust the number of added lines.

2022-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR c/107127
	* gcc.dg/pr107127.c (foo): Add missing closing }.
2022-11-24 10:33:00 +01:00
Martin Liska
4d6f6fd1af analyzer: fix Clang warnings
Fixes the following warnings:
gcc/analyzer/varargs.cc:655:8: warning: 'matches_call_types_p' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
gcc/analyzer/varargs.cc:707:50: warning: unused parameter 'cd' [-Wunused-parameter]
gcc/analyzer/varargs.cc:707:8: warning: 'matches_call_types_p' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]

gcc/analyzer/ChangeLog:

	* varargs.cc: Fix Clang warnings.
2022-11-24 08:40:10 +01:00
Aldy Hernandez
8c8ca87321 Remove use_equiv_p in vr-values.cc
With no equivalences, the use_equiv_p argument in various methods in
simplify_using_ranges is always false.  This means we can remove all
calls to compare_names, along with the function.

gcc/ChangeLog:

	* vr-values.cc (simplify_using_ranges::compare_names): Remove.
	(vrp_evaluate_conditional_warnv_with_ops): Remove call to
	compare_names.
	(simplify_using_ranges::vrp_visit_cond_stmt): Remove use_equiv_p
	argument to vrp_evaluate_conditional_warnv_with_ops.
	* vr-values.h (class simplify_using_ranges): Remove
	compare_names.
	Remove use_equiv_p to vrp_evaluate_conditional_warnv_with_ops.
2022-11-24 07:38:27 +01:00
Aldy Hernandez
22f402963f Remove follow_assert_exprs from overflow_comparison.
gcc/ChangeLog:

	* tree-vrp.cc (overflow_comparison_p_1): Remove follow_assert_exprs.
	(overflow_comparison_p): Remove use_equiv_p.
	* tree-vrp.h (overflow_comparison_p): Same.
	* vr-values.cc (vrp_evaluate_conditional_warnv_with_ops): Remove
	use_equiv_p argument to overflow_comparison_p.
2022-11-24 07:38:27 +01:00
Aldy Hernandez
42639a36bf Remove ASSERT_EXPR.
This removes all uses of ASSERT_EXPR except the internal one in ipa-*.

gcc/ChangeLog:

	* doc/gimple.texi: Remove ASSERT_EXPR references.
	* fold-const.cc (tree_expr_nonzero_warnv_p): Same.
	(fold_binary_loc): Same.
	(tree_expr_nonnegative_warnv_p): Same.
	* gimple-array-bounds.cc (get_base_decl): Same.
	* gimple-pretty-print.cc (dump_unary_rhs): Same.
	* gimple.cc (get_gimple_rhs_num_ops): Same.
	* pointer-query.cc (handle_ssa_name): Same.
	* tree-cfg.cc (verify_gimple_assign_single): Same.
	* tree-pretty-print.cc (dump_generic_node): Same.
	* tree-scalar-evolution.cc (scev_dfs::follow_ssa_edge_expr):Same.
	(interpret_rhs_expr): Same.
	* tree-ssa-operands.cc (operands_scanner::get_expr_operands): Same.
	* tree-ssa-propagate.cc
	(substitute_and_fold_dom_walker::before_dom_children): Same.
	* tree-ssa-threadedge.cc: Same.
	* tree-vrp.cc (overflow_comparison_p): Same.
	* tree.def (ASSERT_EXPR): Add note.
	* tree.h (ASSERT_EXPR_VAR): Remove.
	(ASSERT_EXPR_COND): Remove.
	* vr-values.cc (simplify_using_ranges::vrp_visit_cond_stmt):
	Remove comment.
2022-11-24 07:38:27 +01:00
Aldy Hernandez
a3f7deefd4 Remove value_range_equiv.
With legacy VRP gone, value_range_equiv serves no purpose and any uses
of it can just be replaced with value_range.

gcc/ChangeLog:

	* Makefile.in: Remove value-range-equiv.o
	* gimple-array-bounds.cc
	(array_bounds_checker::array_bounds_checker): Remove comment.
	* tree-vrp.cc (supported_types_p): Remove use of value_range_equiv.
	* value-query.cc (class equiv_allocator): Same.
	(range_query::allocate_value_range_equiv): Remove.
	(range_query::free_value_range_equiv): Remove.
	(range_query::get_value_range): Remove.
	* value-query.h (class range_query): Remove get_value_range.
	Remove allocate_value_range_equiv.
	Remove free_value_range_equiv.
	* vr-values.cc (compare_ranges): Replace value_range_equiv with
	value_range.
	(simplify_using_ranges::get_vr_for_comparison): Same.
	(simplify_using_ranges::compare_names): Same.
	* vr-values.h: Remove value_range_equiv references.
	* value-range-equiv.cc: Removed.
	* value-range-equiv.h: Removed.
2022-11-24 07:38:27 +01:00
Aldy Hernandez
ca0be1bbed Remove unused legacy VRP code.
Removes unused legacy VRP code.  The legacy mode in value_range's is
still around, as it can't be trivially deleted.

With this patch vr-values.cc melts away to simplify_using_ranges, but
I have avoided any renaming of actual files, since we have plans for
consolidation of other folding with ranges for the next release.

gcc/ChangeLog:

	* doc/invoke.texi: Remove docs for max-vrp-switch-assertions,
	vrp1-mode, and vrp2-mode.
	* params.opt: Same.
	* range-op.cc (masked_increment): Move from tree-vrp.cc.
	* tree-vrp.cc (class live_names): Remove.
	(live_names::init_bitmap_if_needed): Remove.
	(live_names::block_has_live_names_p): Remove.
	(live_names::clear_block): Remove.
	(live_names::merge): Remove.
	(live_names::set): Remove.
	(live_names::clear): Remove.
	(live_names::live_names): Remove.
	(live_names::~live_names): Remove.
	(live_names::live_on_block_p): Remove.
	(live_names::live_on_edge_p): Remove.
	(get_single_symbol): Make static.
	(build_symbolic_expr): Remove.
	(adjust_symbolic_bound): Remove.
	(combine_bound): Remove.
	(set_value_range_with_overflow): Remove.
	(extract_range_from_pointer_plus_expr): Remove.
	(extract_range_from_plus_minus_expr): Remove.
	(drop_undefines_to_varying): Remove.
	(range_fold_binary_symbolics_p): Remove.
	(range_fold_unary_symbolics_p): Remove.
	(range_fold_binary_expr): Remove.
	(infer_value_range): Remove.
	(dump_assert_info): Remove.
	(dump_asserts_info): Remove.
	(add_assert_info): Remove.
	(extract_code_and_val_from_cond_with_ops): Remove.
	(masked_increment): Move to range-op.cc.
	(register_edge_assert_for_2): Remove.
	(find_case_label_index): Remove.
	(find_case_label_range): Remove.
	(register_edge_assert_for_1): Remove.
	(is_masked_range_test): Remove.
	(register_edge_assert_for): Remove.
	(stmt_interesting_for_vrp): Remove.
	(struct case_info): Remove.
	(struct assert_locus): Remove.
	(class vrp_asserts): Remove.
	(vrp_asserts::build_assert_expr_for): Remove.
	(vrp_asserts::dump): Remove.
	(vrp_asserts::register_new_assert_for): Remove.
	(vrp_asserts::finish_register_edge_assert_for): Remove.
	(vrp_asserts::find_conditional_asserts): Remove.
	(vrp_asserts::compare_case_labels): Remove.
	(vrp_asserts::find_switch_asserts): Remove.
	(vrp_asserts::find_assert_locations_in_bb): Remove.
	(vrp_asserts::find_assert_locations): Remove.
	(vrp_asserts::process_assert_insertions_for): Remove.
	(vrp_asserts::compare_assert_loc): Remove.
	(vrp_asserts::process_assert_insertions): Remove.
	(vrp_asserts::insert_range_assertions): Remove.
	(vrp_asserts::all_imm_uses_in_stmt_or_feed_cond): Remove.
	(vrp_asserts::remove_range_assertions): Remove.
	(class vrp_prop): Remove.
	(vrp_prop::initialize): Remove.
	(enum ssa_prop_result): Remove.
	(vrp_prop::visit_stmt): Remove.
	(vrp_prop::visit_phi): Remove.
	(vrp_prop::finalize): Remove.
	(class vrp_folder): Remove.
	(vrp_folder::fold_predicate_in): Remove.
	(vrp_folder::fold_stmt): Remove.
	(vrp_folder::simplify_casted_conds): Remove.
	(execute_vrp): Remove.
	* tree-vrp.h (struct assert_info): Remove.
	(register_edge_assert_for): Remove.
	(stmt_interesting_for_vrp): Remove.
	(infer_value_range): Remove.
	(get_single_symbol): Remove.
	(masked_increment): Remove.
	(execute_ranger_vrp): Remove.
	* vr-values.cc (set_value_range_to_nonnegative): Remove.
	(set_value_range_to_truthvalue): Remove.
	(vr_values::get_lattice_entry): Remove.
	(vr_values::get_value_range): Remove.
	(vr_values::range_of_expr): Remove.
	(vr_values::value_of_expr): Remove.
	(vr_values::value_on_edge): Remove.
	(vr_values::value_of_stmt): Remove.
	(vr_values::set_def_to_varying): Remove.
	(vr_values::set_defs_to_varying): Remove.
	(vr_values::update_value_range): Remove.
	(symbolic_range_based_on_p): Remove.
	(gimple_assign_nonzero_p): Remove.
	(gimple_stmt_nonzero_p): Remove.
	(vr_values::vrp_stmt_computes_nonzero): Remove.
	(vr_values::op_with_constant_singleton_value_range): Remove.
	(vr_values::extract_range_for_var_from_comparison_expr): Remove.
	(vr_values::extract_range_from_assert): Remove.
	(vr_values::extract_range_from_ssa_name): Remove.
	(vr_values::extract_range_from_binary_expr): Remove.
	(vr_values::extract_range_from_unary_expr): Remove.
	(vr_values::extract_range_from_cond_expr): Remove.
	(vr_values::extract_range_from_comparison): Remove.
	(vr_values::extract_range_from_ubsan_builtin): Remove.
	(vr_values::extract_range_basic): Remove.
	(vr_values::extract_range_from_assignment): Remove.
	(vr_values::adjust_range_with_scev): Remove.
	(vr_values::dump): Remove.
	(vr_values::vr_values): Remove.
	(vr_values::~vr_values): Remove.
	(vrp_valueize): Remove.
	(vrp_valueize_1): Remove.
	(get_output_for_vrp): Remove.
	(vr_values::vrp_visit_assignment_or_call): Remove.
	(simplify_using_ranges::vrp_evaluate_conditional): Remove.
	(vr_values::vrp_visit_switch_stmt): Remove.
	(vr_values::extract_range_from_stmt): Remove.
	(vr_values::extract_range_from_phi_node): Remove.
	(simplify_using_ranges::fold_cond): Add FIXME note.
	(vr_values::set_vr_value): Remove.
	(vr_values::swap_vr_value): Remove.
	* vr-values.h (class vr_values): Remove.
	(get_output_for_vrp): Remove.
2022-11-24 07:38:27 +01:00
David Malcolm
ce917b0422 analyzer: revamp of heap-allocated regions [PR106473]
PR analyzer/106473 reports a false positive from -Wanalyzer-malloc-leak
on:

  void foo(char **args[], int *argc) {
      *argc = 1;
      (*args)[0] = __builtin_malloc(42);
  }

The issue is that at the write to *argc we don't know if argc could
point within *args, and so we conservatiely set *args to be unknown.
At the write "(*args)[0] = __builtin_malloc(42)" we have the result of
the allocation written through an unknown pointer, so we mark the
heap_allocated_region as having escaped.
Unfortunately, within store::canonicalize we overzealously purge the
heap allocated region, losing the information that it has escaped, and
thus errnoeously report a leak.

The first part of the fix is to update store::canonicalize so that it
doesn't purge heap_allocated_regions that are marked as escaping.

Doing so fixes the leak false positive, but leads to various state
explosions relating to anywhere we have a malloc/free pair in a loop,
where the analysis of the iteration appears to only have been reaching
a fixed state due to a bug in the state merger code that was erroneously
merging state about the region allocated in one iteration with that
of another.  On touching that, the analyzer fails to reach a fixed state
on any loops containing a malloc/free pair, since each analysis of a
malloc was creating a new heap_allocated_region instance.

Hence the second part of the fix is to revamp how heap_allocated_regions
are managed within the analyzer.  Rather than create a new one at each
analysis of a malloc call, instead we reuse them across the analysis,
only creating a new one if the current path's state is referencing all
of the existing ones.  Hence the heap_allocated_region instances get
used in a fixed order along every analysis path, so e.g. at:

  if (flag)
    p = malloc (4096);
  else
    p = malloc (1024);

both paths now use the same heap_allocated_region for their malloc
calls - but we still end up with two enodes after the CFG merger, by
rejecting merger of states with non-equal dynamic extents.

gcc/analyzer/ChangeLog:
	PR analyzer/106473
	* call-summary.cc
	(call_summary_replay::convert_region_from_summary_1): Update for
	change to creation of heap-allocated regions.
	* program-state.cc (test_program_state_1): Likewise.
	(test_program_state_merging): Likewise.
	* region-model-impl-calls.cc (kf_calloc::impl_call_pre): Likewise.
	(kf_malloc::impl_call_pre): Likewise.
	(kf_operator_new::impl_call_pre): Likewise.
	(kf_realloc::impl_call_postsuccess_with_move::update_model): Likewise.
	* region-model-manager.cc
	(region_model_manager::create_region_for_heap_alloc): Convert
	to...
	(region_model_manager::get_or_create_region_for_heap_alloc):
	...this, reusing an existing region if it's unreferenced in the
	client state.
	* region-model-manager.h (region_model_manager::get_num_regions): New.
	 (region_model_manager::create_region_for_heap_alloc): Convert to...
	 (region_model_manager::get_or_create_region_for_heap_alloc): ...this.
	* region-model.cc (region_to_value_map::can_merge_with_p): Reject
	merger when the values are different.
	(region_model::create_region_for_heap_alloc): Convert to...
	(region_model::get_or_create_region_for_heap_alloc): ...this.
	(region_model::get_referenced_base_regions): New.
	(selftest::test_state_merging):  Update for change to creation of
	heap-allocated regions.
	(selftest::test_malloc_constraints): Likewise.
	(selftest::test_malloc): Likewise.
	* region-model.h: Include "sbitmap.h".
	(region_model::create_region_for_heap_alloc): Convert to...
	(region_model::get_or_create_region_for_heap_alloc): ...this.
	(region_model::get_referenced_base_regions): New decl.
	* store.cc (store::canonicalize): Don't purge a heap-allocated region
	that's been marked as escaping.

gcc/testsuite/ChangeLog:
	PR analyzer/106473
	* gcc.dg/analyzer/aliasing-pr106473.c: New test.
	* gcc.dg/analyzer/allocation-size-2.c: Add
	-fanalyzer-fine-grained".
	* gcc.dg/analyzer/allocation-size-3.c: Likewise.
	* gcc.dg/analyzer/explode-1.c: Mark leak with XFAIL.
	* gcc.dg/analyzer/explode-3.c: New test.
	* gcc.dg/analyzer/malloc-reuse.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-11-23 20:43:33 -05:00
David Malcolm
e0f18b87bf analyzer: fix nondeterminism in logs
gcc/analyzer/ChangeLog:
	* checker-path.cc (checker_path::inject_any_inlined_call_events):
	Don't dump the address of the block when -fdump-noaddr.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-11-23 20:43:32 -05:00
David Malcolm
5d2908b7bf analyzer: eliminate region_model::on_ fns for sockets
This mostly mechanical patch eliminates a confusing extra layer of
redundant calls in the handling of socket-related functions.

gcc/analyzer/ChangeLog:
	* region-model.h (region_model::on_socket): Delete decl.
	(region_model::on_bind): Likewise.
	(region_model::on_listen): Likewise.
	(region_model::on_accept): Likewise.
	(region_model::on_connect): Likewise.
	* sm-fd.cc (kf_socket::outcome_of_socket::update_model): Move body
	of region_model::on_socket into here, ...
	(region_model::on_socket): ...eliminating this function.
	(kf_bind::outcome_of_bind::update_model): Likewise for on_bind...
	(region_model::on_bind): ...eliminating this function.
	(kf_listen::outcome_of_listen::update_model): Likewise fo
	on_listen...
	(region_model::on_listen): ...eliminating this function.
	(kf_accept::outcome_of_accept::update_model): Likewise fo
	on_accept...
	(region_model::on_accept): ...eliminating this function.
	(kf_connect::outcome_of_connect::update_model): Likewise fo
	on_connect...
	(region_model::on_connect): ...eliminating this function.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-11-23 20:43:32 -05:00
David Malcolm
50d5b24042 analyzer: move known funs for fds to sm-fd.cc
This mostly mechanical change enables a simplification in the
followup patch.  No functional change intended.

gcc/analyzer/ChangeLog:
	* analyzer.h (register_known_fd_functions): New decl.
	* region-model-impl-calls.cc (class kf_accept): Move to sm-fd.cc.
	(class kf_bind): Likewise.
	(class kf_connect): Likewise.
	(class kf_listen): Likewise.
	(class kf_pipe): Likewise.
	(class kf_socket): Likewise.
	(register_known_functions): Remove registration of the above
	functions, instead calling register_known_fd_functions.
	* sm-fd.cc: Include "analyzer/call-info.h".
	(class kf_socket): Move here from region-model-impl-calls.cc.
	(class kf_bind): Likewise.
	(class kf_listen): Likewise.
	(class kf_accept): Likewise.
	(class kf_connect): Likewise.
	(class kf_pipe): Likewise.
	(register_known_fd_functions): New.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-11-23 20:43:32 -05:00
Hongyu Wang
8caf155a3d i386: Only enable small loop unrolling in backend [PR 107692]
Followed by the discussion in pr107692, -munroll-only-small-loops
Does not turns on/off -funroll-loops, and current check in
pass_rtl_unroll_loops::gate would cause -fno-unroll-loops do not take
effect. Revert the change about targetm.loop_unroll_adjust and apply
the backend option change to strictly follow the rule that
-funroll-loops takes full control of loop unrolling, and
munroll-only-small-loops just change its behavior to unroll small size
loops.

gcc/ChangeLog:

	PR target/107692
	* common/config/i386/i386-common.cc (ix86_optimization_table):
	Enable loop unroll O2, disable -fweb and -frename-registers
	by default.
	* config/i386/i386-options.cc
	(ix86_override_options_after_change):
	Disable small loop unroll when funroll-loops enabled, reset
	cunroll_grow_size when it is not explicitly enabled.
	(ix86_option_override_internal): Call
	ix86_override_options_after_change instead of calling
	ix86_recompute_optlev_based_flags and ix86_default_align
	separately.
	* config/i386/i386.cc (ix86_loop_unroll_adjust): Adjust unroll
	factor if -munroll-only-small-loops enabled.
	* loop-init.cc (pass_rtl_unroll_loops::gate): Do not enable
	loop unrolling for -O2-speed.
	(pass_rtl_unroll_loops::execute): Rmove
	targetm.loop_unroll_adjust check.

gcc/testsuite/ChangeLog:

	PR target/107692
	* gcc.dg/guality/loop-1.c: Remove additional option for ia32.
	* gcc.target/i386/pr86270.c: Add -fno-unroll-loops.
	* gcc.target/i386/pr93002.c: Likewise.
2022-11-24 09:19:16 +08:00
GCC Administrator
8761284fd7 Daily bump. 2022-11-24 00:17:47 +00:00
Rainer Orth
603af25815 analyzer: Use __builtin_alloca in gcc.dg/analyzer/call-summaries-2.c
gcc.dg/analyzer/call-summaries-2.c currently FAILs on Solaris:

FAIL: gcc.dg/analyzer/call-summaries-2.c (test for excess errors)

Excess errors:
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c:468:12:
warning: implicit declaration of function 'alloca' [-Wimplicit-function-declaration]
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c:468:12:
warning: incompatible implicit declaration of built-in function 'alloca' [-Wbuiltin-declaration-mismatch]

alloca is only declared in <alloca.h>, which isn't included indirectly
anywhere.  To avoid this, I switched the test to use __builtin_alloca
instead, following the vast majority of analyzer tests that use alloca.

Tested no i386-pc-solaris2.11, sparc-sun-solaris2.11, and
x86_64-pc-linux-gnu.

2022-11-23  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc/testsuite:
	* gcc.dg/analyzer/call-summaries-2.c (uses_alloca): Use
	__builtin_alloca instead of alloca.
2022-11-23 21:54:26 +01:00
Steve Kargl
2eaa0cc45e Fortran: error recovery on associate with bad selector [PR107577]
gcc/fortran/ChangeLog:

	PR fortran/107577
	* resolve.cc (find_array_spec): Choose appropriate locus either of
	bad array reference or of non-array entity in error message.

gcc/testsuite/ChangeLog:

	PR fortran/107577
	* gfortran.dg/pr107577.f90: New test.
2022-11-23 19:10:42 +01:00
Jakub Jelinek
8a0fce6a51 c: Fix compile time hog in c_genericize [PR107127]
The complex multiplications result in deeply nested set of many SAVE_EXPRs,
which takes even on fast machines over 5 minutes to walk.
This patch fixes that by using walk_tree_without_duplicates where it is
instant.

2022-11-23  Andrew Pinski  <apinski@marvell.com>
	    Jakub Jelinek  <jakub@redhat.com>

	PR c/107127
	* c-gimplify.cc (c_genericize): Use walk_tree_without_duplicates
	instead of walk_tree for c_genericize_control_r.

	* gcc.dg/pr107127.c: New test.
2022-11-23 19:09:31 +01:00
Ramana Radhakrishnan
c087fe834b [Patch Arm] Add neon_fcadd and neon_fcmla to is_neon_type.
Appears to have been an oversight.

gcc/
	* config/arm/types.md: Update comment.
	(is_neon_type): Add neon_fcmla, neon_fcadd.

Signed-off-by: Ramana Radhakrishnan <ramana.gcc@gmail.com>
2022-11-23 16:33:39 +00:00