- May 02, 2022
-
-
Richard Biener authored
The following extends SLP discovery to handle swapped operands in comparisons. 2022-05-02 Richard Biener <rguenther@suse.de> PR tree-optimization/104240 * tree-vect-slp.cc (op1_op0_map): New. (vect_get_operand_map): Handle compares. (vect_build_slp_tree_1): Support swapped operands for tcc_comparison. * gcc.dg/vect/bb-slp-pr104240.c: New testcase.
-
Patrick Palka authored
As with std::isdigit in r12-6281-gc83ecfbe74a5cf, we shouldn't be using std::tolower in <charconv> either. PR libstdc++/103911 libstdc++-v3/ChangeLog: * src/c++17/floating_from_chars.cc (find_end_of_float): Accept two delimeters for the exponent part in the form of a possibly NULL string of length two. Don't use std::tolower. (pattern): Adjust calls to find_end_of_float accordingly.
-
Patrick Palka authored
The hexfloat parser for binary32/64 added in r12-6645-gcc3bf3404e4b1c overlooked that the exponent part can also begin with an uppercase 'P'. PR libstdc++/105441 libstdc++-v3/ChangeLog: * src/c++17/floating_from_chars.cc (__floating_from_chars_hex): Also accept 'P' as the start of the exponent. * testsuite/20_util/from_chars/7.cc: Add corresponding testcase.
-
Jakub Jelinek authored
The following testcase fails -fcompare-debug on aarch64-linux. The problem is that for the n variable we create a varpool node, then remove it again because the var isn't really used, but it keeps being referenced in debug stmts/insns with -g. Later during sched1 pass we ask whether the n var can be modified through some store to an anchored variable and with -g we create a new varpool node for it again just so that we can find its ultimate alias target. Even later on we create some cgraph node for the loop parallelization, but as there has been an extra varpool node creation in between, we get higher node->order with -g than without. The patch fixes that by throwing variables without varpool nodes away during expansion time, they are very unlikely to actually end up with useful debug info anyway. I've bootstrapped/regtested the following on x86_64-linux and i686-linux, then bootstrapped with the patch reverted, reapplied the patch and did make cc1plus in stage3. The debug section sizes are identical, .debug_info and .debug_loc is identical too, so I think we don't lose any debug info through it. So at least on cc1plus it makes no difference. 2022-05-02 Jakub Jelinek <jakub@redhat.com> PR debug/105415 * cfgexpand.cc (expand_debug_expr): Don't make_decl_rtl_for_debug if there is no symtab node for the VAR_DECL. * gcc.dg/pr105415.c: New test.
-
Sebastian Huber authored
This patch fixes an issue introduced by commit ef9a53fe: gcc --coverage main.c && ./a.out libgcov profiling error:a-main.gcda:Error writing gcc/ChangeLog: * gcov-io.cc (gcov_rewrite): Clear the file error status.
-
Richard Biener authored
We have to watch out for vectorized stmt insert locations if the def from the last stmt alters control flow. We constrain region building so we know the def is outside of the current region and thus we can insert at the region start point. 2022-05-02 Richard Biener <rguenther@suse.de> PR tree-optimization/105437 * tree-vect-slp.cc (vect_schedule_slp_node): Handle the case where last_stmt alters control flow. * g++.dg/vect/pr105437.cc: New testcase.
-
Richard Biener authored
This uses CASE_CONVERT more which eases eventual removal of NOP_EXPR. 2022-04-29 Richard Biener <rguenther@suse.de> gcc/cp/ * constexpr.cc (fold_simple_1): Use CASE_CONVERT. * cp-gimplify.cc (cp_fold): Likewise. * pt.cc (tsubst_copy): Likewise. gcc/ * dojump.cc (do_jump): Use CASE_CONVERT. * tree-ssa-dom.cc (edge_info::derive_equivalences): Likewise.
-
Jakub Jelinek authored
On Sun, May 01, 2022 at 07:06:53PM +0100, Jonathan Wakely wrote: > > >> the reason is that "gcc/analyzer/region-model.cc” uses initializer_lists, and it seems that <initializer_list> > > >> is not transitively included by any used headers for _LIBCPP_VERSION < 4000. I fixed that locally by > > >> adding initializer_list into system.h (and adding INCLUDE_INITIALIZER_LIST to the top of gcc/analyzer/region-model.cc) > > >> - with that change those versions do bootstrap and test OK*** > > > > > > From what I can see, with libstdc++ it works because <utility> which is > > > included by system.h includes <initializer_list>. > > > If I rename initializer_list in analyzer/region-model.ii to initializer_listx, I > > > also get: > > > ../../gcc/analyzer/region-model.cc: In function ‘void ana::selftest::test_binop_svalue_folding()’: > > > ../../gcc/analyzer/region-model.cc:4966:48: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’ > > > 4508 | > > > +++ |+#include <initializer_list> > > > 4509 | static void > > > ...... > > > 4966 | for (auto op : {BIT_IOR_EXPR, TRUTH_OR_EXPR}) > > > | ^ > > > ../../gcc/analyzer/region-model.cc:4978:49: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’ > > > 4978 | for (auto op : {BIT_AND_EXPR, TRUTH_AND_EXPR}) > > > | ^ > > > > > > I think we have 2 options, one is do what you wrote above, > > > INCLUDE_INITIALIZER_LIST defined before system.h to get #include <initializer_list>. > > > The other option is just to include that unconditionally, it is a very small > > > header. For libstdc++ it will make no difference as it is included anyway > > > and the header is really small there, libc++ includes <cstddef> which isn't > > > normally included and system.h includes <stddef.h> instead. > > > > I’d say unconditionally would be OK. I suppose the chance that any host > > C++ is good enough to build GCC as-is but fails to provide > > <initializer_list> is zero? > > > > Yes, definitely. > > > I’d be OK to do this change without a new RC even. 2022-05-02 Jakub Jelinek <jakub@redhat.com> * system.h: Include initializer_list.
-
Martin Liska authored
Mitigates the following clang warning: libgcc/libgcov-driver.c:416:1: warning: unused function 'dump_string' [-Wunused-function] libgcc/ChangeLog: * libgcov-driver.c: Add ATTRIBUTE_UNUSED.
-
GCC Administrator authored
-
- May 01, 2022
-
-
Segher Boessenkool authored
2022-05-01 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/constraints.md (Y constraint): Fix comment.
-
Aldy Hernandez authored
We are ICEing in set_range_info_raw because value_range_kind cannot be VR_VARYING, since SSA_NAME_RANGE_TYPE can only hold VR_RANGE / VR_ANTI_RANGE. Most of the time setting a VR_VARYING as a global range makes no sense. However, we can have a range spanning the entire domain (VR_RANGE of [MIN,MAX] which is essentially a VR_VARYING), if the nonzero bits are set. This was working before because set_range_info_raw allows setting VR_RANGE of [MIN, MAX]. However, when going through an irange, we normalize this to a VR_VARYING, thus causing the ICE. It's interesting that other calls to set_range_info with an irange haven't triggered this. One solution would be to just ignore VR_VARYING and bail, since set_range_info* is really an update of the current range semantic wise. After all, we keep the nonzero bits which provide additional info. But this would be a change in behavior, so not suitable until after GCC 12 is released. So in order to keep with current behavior we can just denormalize the varying to VR_RANGE. Tested on x86-64 Linux. PR tree-optimization/105432 gcc/ChangeLog: * tree-ssanames.cc (set_range_info): Denormalize VR_VARYING to VR_RANGE before passing a piecewise range to set_range_info_raw.
-
GCC Administrator authored
-
- Apr 30, 2022
-
-
Patrick Palka authored
The function comment for adjust_field_tree_exp says this attribute is for handling expression trees whose operands may contain pointers to RTL instead of to trees. But ever since r0-59671-gac45df5dba5804, which fixed/removed the last two tree codes for which this was possible (WITH_CLEANUP_EXPR and GOTO_SUBROUTINE_EXPR), this special attribute is mostly a no-op. This patch removes it and instead just annotates struct tree_exp with the "length" attribute directly. Not sure it makes a difference, but I use %h instead of %0 in the attribute string to be consistent with the other uses of the "length" attribute within tree-core.h. This changes the code generated for TS_EXP handling in gt-cp-tree.h from: case TS_EXP: gt_ggc_m_9tree_node ((*x).generic.exp.typed.type); switch ((int) (TREE_CODE ((tree) &(*x)))) { default: { size_t i3; size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree) &(*x))); for (i3 = 0; i3 != l3; i3++) { gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]); } } break; } break; to: case TS_EXP: { size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree)&((*x).generic.exp))); gt_ggc_m_9tree_node ((*x).generic.exp.typed.type); { size_t i3; for (i3 = 0; i3 != l3; i3++) { gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]); } } } which seems equivalent and simpler. gcc/ChangeLog: * gengtype.cc (adjust_field_tree_exp): Remove. (adjust_field_type): Don't handle the "tree_exp" special attribute. * tree-core.h (struct tree_exp): Remove "special" and "desc" attributes. Add "length" attribute.
-
Jason Merrill authored
The problem here was that handle_mode_attribute clobbered the changes of any previous attribute, only copying type qualifiers to the new type. And common_handle_aligned_attribute had previously set up the typedef, so when we later called set_underlying_type it saw DECL_ORIGINAL_TYPE set and just returned, even though handle_mode_attribute had messed up the TREE_TYPE. So, let's fix handle_mode_attribute to copy attributes, alignment, and typedefness to the new type. PR c/100545 gcc/c-family/ChangeLog: * c-attribs.cc (handle_mode_attribute): Copy attributes, aligned, and typedef. * c-common.cc (set_underlying_type): Add assert. gcc/testsuite/ChangeLog: * c-c++-common/attr-mode-1.c: New test. * c-c++-common/attr-mode-2.c: New test.
-
GCC Administrator authored
-
- Apr 29, 2022
-
-
Jason Merrill authored
The the different calling of check_explicit_specialization for class and namespace scope friends bothered me, so this patch combines them. PR c++/91618 PR c++/96604 gcc/cp/ChangeLog: * friend.cc (do_friend): Call check_explicit_specialization here. * decl.cc (grokdeclarator): Not here. * decl2.cc (check_classfn): Or here.
-
Jason Merrill authored
In this testcase, we were trying to substitute into variant<Foo<T>>::__accepted_type, but failed to look it up because variant<Foo<T>> doesn't exist. In other cases we already rewrite such things into a dependent reference; we need to do that for alias templates as well. This caused some testsuite regressions on alias uses outside of deduction guides, so I've made all of this rewriting conditional on a new tf_dguide tsubst flag. PR c++/104470 gcc/cp/ChangeLog: * cp-tree.h (enum tsubst_flags): Add tf_dguide. * pt.cc (tsubst_aggr_type): Check it. (tsubst_baselink, tsubst_copy): Check it. (maybe_dependent_member_ref): Check it. (instantiate_alias_template): Handle it. (build_deduction_guide): Set it. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/explicit11.C: Second example also ill-formed. * g++.dg/cpp2a/class-deduction-alias12.C: New test.
-
Jason Merrill authored
The stage 4 patch limited direct propagation of dependent type to capture field/proxy to the "current instantiation", but many more types should be suitable as well. PR c++/82980 gcc/cp/ChangeLog: * lambda.cc (type_deducible_expression_p): Allow more types.
-
Jason Merrill authored
In r185768 I added the !FUNCTION_DECL check, but we might as well just check for variable; nothing else should take this path, and asserting as much doesn't regress anything. gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): Only consider auto for vars.
-
Marek Polacek authored
[dcl.dcl]/5 says that enum { }; is ill-formed, and since r197742 we issue a pedwarn. However, the pedwarn also fires for enum { } x; which is well-formed. So only warn when {} is followed by a ;. This should be correct since you can't have "enum {}, <whatever>" -- that produces "expected unqualified-id before ',' token". PR c++/67048 gcc/cp/ChangeLog: * parser.cc (cp_parser_enum_specifier): Warn about empty unnamed enum only when it's followed by a semicolon. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/enum42.C: New test.
-
Jason Merrill authored
Normally we check for incomplete type in start_decl, but that obviously doesn't work for auto variables. Thanks to Pokechu22 for the analysis and testcases: "When cp_finish_decl calls cp_apply_type_quals_to_decl on a const auto or constexpr auto variable, the type might not be complete the first time (this happened when auto deduces to an initializer_list). cp_apply_type_quals_to_decl removes the const qualifier if the type is not complete, which is appropriate for grokdeclarator, on the assumption that the type will be complete when called by cp_finish_decl." PR c++/80351 gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): Check completeness of deduced type. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-77482.C: Adjust message. * g++.dg/cpp1y/auto-fn27.C: Likewise. * g++.dg/cpp1y/lambda-generic-variadic22.C: Likewise. * g++.dg/cpp1z/decomp54.C: Likewise. * g++.dg/cpp0x/initlist-const1.C: New test. * g++.dg/warn/Wunused-var-37.C: New test. * g++.dg/warn/Wunused-var-38.C: New test. * g++.dg/warn/Wunused-var-39.C: New test.
-
Thomas Koenig authored
gcc/fortran/ChangeLog: * gfortran.texi: Fix exchanged period and letter.
-
Martin Jambor authored
In the PR, the verifier complains that we did not manage to remove the body of a node and it is right. The node is kept for materialization of two clones but after one is materialized, the other one is removed as unneeded (as a part of delete_unreachable_blocks_update_callgraph). The problem is that the node removal does not check for this situation and can leave the clone_of node there with a body attached to it even though there is no use for it any more. This patch does checks for it and handles the situation in a simlar way that cgraph_node::materialize_clone does it, except that it also has to be careful that the removed node itself does not have any clones, which would still need the clone_of's body. Failing to do that results in a bootstrap failure. gcc/ChangeLog: 2022-04-27 Martin Jambor <mjambor@suse.cz> PR ipa/100413 * cgraph.cc (cgraph_node::remove): Release body of the node this is clone_of if appropriate. gcc/testsuite/ChangeLog: 2022-04-27 Martin Jambor <mjambor@suse.cz> PR ipa/100413 * g++.dg/ipa/pr100413.C: New test.
-
Andre Vieira authored
Add option that originally caused testcase to fail for aarch64. gcc/testsuite/ChangeLog: PR tree-optimization/105219 * gcc.dg/vect/pr105219.c: Add aarch64 target option.
-
Marek Polacek authored
This was fixed by r269078. PR c++/83596 gcc/testsuite/ChangeLog: * g++.dg/cpp1z/nontype5.C: New test.
-
Jonathan Wakely authored
The --with-long-double-abi=ibm build is missing some exports that are present in the --with-long-double-abi=ieee build. Those symbols never should have been exported at all, but now that they have been, they should be exported consistently by both ibm and ieee. This simply defines them as aliases for equivalent symbols that are already present. The abi-tag on num_get::_M_extract_int isn't really needed, because it only uses a std::string as a local variable, not in the return type or function parameters, so it's safe to define the _M_extract_int[abi:cxx11] symbols as aliases for the corresponding function without the abi-tag. This causes some new symbols to be added to the GLIBCXX_3.4.29 version for the ibm long double build mode, but there is no advantage to adding them to 3.4.30 for that build. That would just create more inconsistencies. libstdc++-v3/ChangeLog: PR libstdc++/105417 * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Regenerate. * src/c++11/compatibility-ldbl-alt128.cc [_GLIBCXX_USE_DUAL_ABI]: Define __gnu_ieee128::num_get<C>::_M_extract_int[abi:cxx11]<I> symbols as aliases for corresponding symbols without abi-tag.
-
Marek Polacek authored
This was finally fixed for GCC 11 by r11-434. PR c++/78244 gcc/testsuite/ChangeLog: * g++.dg/cpp0x/Wnarrowing20.C: New test.
-
Marek Polacek authored
This was fixed by r12-6329-g4f6bc28fc7dd86. PR c++/71424 gcc/testsuite/ChangeLog: * g++.dg/cpp0x/initlist-array15.C: New test.
-
Jason Merrill authored
The decl pretty-printing code wasn't looking at the flags parameter, so we were printing 'using' in the middle of an expression. PR c++/102987 gcc/cp/ChangeLog: * error.cc (dump_decl) [USING_DECL]: Respect flags. gcc/testsuite/ChangeLog: * g++.dg/diagnostic/using1.C: Check pretty-printing.
-
Jason Merrill authored
An alias can't be declared with a qualified-id in actual code, but in diagnostics we want to know which scope it belongs to, and I think a nested-name-specifier is the best way to provide that. gcc/cp/ChangeLog: * error.cc (dump_decl): Check TFF_UNQUALIFIED_NAME. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/alias-decl-1.C: Expect qualified name.
-
Jakub Jelinek authored
As mentioned in the PR, for C++98 we have diagnostics that expect >> terminating template arguments to be a mistake for > > (C++11 said it has to be treated that way), while if user trying to spare the spacebar doesn't separate > from following = or >> from following =, the diagnostics is confusing, while clang suggests adding space in between. The following patch does that for >= and >>= too. For some strange reason the error recovery emits further errors, not really sure what's going on because I overwrite the token->type like the code does for the C++11 >> case or for the C++98 >> cases, but at least the first error is nicer (well, for the C++98 nested template case and >>= I need to overwrite it to > and so the = is lost, so perhaps some follow-up errors are needed for that case). 2022-04-29 Jakub Jelinek <jakub@redhat.com> PR c++/104319 * parser.cc (cp_parser_template_argument): Treat >= like C++98 >> after a type id by setting maybe_type_id and aborting tentative parse. (cp_parser_enclosed_template_argument_list): Handle CPP_GREATER_EQ like misspelled CPP_GREATER CPP_RQ and CPP_RSHIFT_EQ like misspelled CPP_GREATER CPP_GREATER_EQ or CPP_RSHIFT CPP_EQ or CPP_GREATER CPP_GREATER CPP_EQ. (cp_parser_next_token_ends_template_argument_p): Return true also for CPP_GREATER_EQ and CPP_RSHIFT_EQ. * g++.dg/parse/template28.C: Adjust expected diagnostics. * g++.dg/parse/template30.C: New test.
-
Rainer Orth authored
The following patch updates the Solaris baselines for GCC 12.1. Tested on i386-pc-solaris2.11 and sparc-sun-solaris2.11 (Solaris 11.3 and 11.4 in each case). The only (expected) difference between the 11.3 and 11.4 versions is --- baseline_symbols.txt.s113s 2022-04-28 10:37:11.464068450 +0000 +++ baseline_symbols.txt.s114s 2022-04-27 16:54:31.995636805 +0000 @@ -4070,3 +4070,3 @@ -FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.30 -FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.30 -FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.30 +FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.29 which is handled by the fix for PR libstdc++/103407. I'm using the 11.4 version here. 2022-04-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> libstdc++-v3: * config/abi/post/i386-solaris/baseline_symbols.txt: Regenerate. * config/abi/post/i386-solaris/amd64/baseline_symbols.txt: Likewise. * config/abi/post/sparc-solaris/baseline_symbols.txt: Likewise. * config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt: Likewise.
-
Uros Bizjak authored
Introduce peephole2 pattern to convert from: mov %esi, %edx negl %eax adcl $0, %edx negl %edx to: xorl %edx, %edx negl %eax sbbl %esi, %edx This conversion is profitable only when initial move is found. Otherwise, additional move to a temporary together with clearing xor is needed. 2022-04-29 Uroš Bizjak <ubizjak@gmail.com> gcc/ChangeLog: PR target/51954 * config/i386/i386.md (adcl/neg -> sbb peephole): New peephole2. gcc/testsuite/ChangeLog: PR target/51954 * gcc.target/i386/pr51954.c: New test.
-
Richard Biener authored
The following fixes wrongly used is_gimple_condexpr and makes canonicalize_cond_expr_cond honor either, delaying final checking to callers where all but two in ifcombine are doing the correct thing already. This fixes bugs but is now mainly in preparation for making COND_EXPRs in GIMPLE assignments no longer have a GENERIC expression as condition operand like we already transitioned VEC_COND_EXPR earlier. 2022-04-11 Richard Biener <rguenther@suse.de> * gimple-expr.cc (is_gimple_condexpr): Adjust comment. (canonicalize_cond_expr_cond): Move here from gimple.cc, allow both COND_EXPR and GIMPLE_COND forms. * gimple-expr.h (canonicalize_cond_expr_cond): Declare. * gimple.cc (canonicalize_cond_expr_cond): Remove here. * gimple.h (canonicalize_cond_expr_cond): Likewise. * gimple-loop-versioning.cc (loop_versioning::version_loop): Use is_gimple_condexpr_for_cond. * tree-parloops.cc (gen_parallel_loop): Likewise. * tree-ssa-ifcombine.cc (ifcombine_ifandif): Check for a proper cond expr after canonicalize_cond_expr_cond. Use is_gimple_condexpr_for_cond where appropriate. * tree-ssa-loop-manip.cc (determine_exit_conditions): Likewise. * tree-vect-loop-manip.cc (slpeel_add_loop_guard): Likewise.
-
Richard Biener authored
The following adds gsi_after_labels for gimple_seq so I do not have to open-code it. I took the liberty to remove the two #defines wrapping gsi_start_1 and gsi_last_1 as we now have C++ references. 2022-02-01 Richard Biener <rguenther@suse.de> * gimple-iterator.h (gsi_after_labels): Add overload for gimple_seq. (gsi_start_1): Rename to gsi_start and take a reference. (gsi_last_1): Likewise. * gimple-iterator.cc (gsi_for_stmt): Use gsi_start. * omp-low.cc (lower_rec_input_clauses): Likewise. (lower_omp_scan): Likewise.
-
Richard Biener authored
This avoids undefined signed overflow when calling powi_as_mults_1. 2022-04-29 Richard Biener <rguenther@suse.de> PR tree-optimization/105431 * tree-ssa-math-opts.cc (powi_as_mults_1): Make n unsigned. (powi_as_mults): Use absu_hwi. (gimple_expand_builtin_powi): Remove now pointless n != -n check.
-
Aldy Hernandez authored
In preparation for the agnostication of ranger, this patch moves common code that can be shared between non-integer ranges (initially pointers) into the relevant header files. This is a relatively non-invasive change, as any changes that would need to be ported to GCC 12, would occur in the range-op entries themselves, not in the supporting glue which I'm moving. Tested and benchmarked on x86-64 Linux. gcc/ChangeLog: * range-op.cc (empty_range_varying): Move to range-op.h. (range_true): Move to range.h. (range_false): Same. (range_true_and_false): Same. (enum bool_range_state): Move to range-op.h. (relop_early_resolve): Same. (operator_equal::op1_op2_relation): Abstract code to... (equal_op1_op2_relation): ...here. (operator_not_equal::op1_op2_relation): Abstract code to... (not_equal_op1_op2_relation): ...here. (operator_lt::op1_op2_relation): Abstract code to... (lt_op1_op2_relation): ...here. (operator_le::op1_op2_relation): Abstract code to... (le_op1_op2_relation): ...here. (operator_gt::op1_op2_relation): Abstract code to... (gt_op1_op2_relation): ...here. (operator_ge::op1_op2_relation): Abstract code to... (ge_op1_op2_relation): ...here. (class range_op_table): Move to range-op.h. * range-op.h (equal_op1_op2_relation): Moved from range-op.cc. (not_equal_op1_op2_relation): Same. (lt_op1_op2_relation): Same. (le_op1_op2_relation): Same. (gt_op1_op2_relation): Same. (ge_op1_op2_relation): Same. (enum bool_range_state): Same. (get_bool_state): Same. (empty_range_varying): Same. (relop_early_resolve): Same. (class range_op_table): Same. * range.h (range_true): Same. (range_false): Same. (range_true_and_false): Same.
-
Aldy Hernandez authored
This patch cleans up some irange methods in preparation for other cleanups later in the cycle. First, we prefer the reference overloads for union and intersect as the pointer versions have been deprecated for a couple releases. Also, I've renamed the legacy union/intersect whose only function was to provide additional verbosity for VRP into legacy_verbose_{union,intersect}. This is a temporary rename to serve as a visual reminder of which of the methods are bound for the chopping block when the legacy code gets removed later this cycle. Tested on x86-64 Linux. gcc/ChangeLog: * gimple-fold.cc (size_must_be_zero_p): Use reference instead of pointer * gimple-ssa-evrp-analyze.cc (evrp_range_analyzer::record_ranges_from_incoming_edge): Rename intersect to legacy_verbose_intersect. * ipa-cp.cc (ipcp_vr_lattice::meet_with_1): Use reference instead of pointer. * tree-ssa-dom.cc (dom_jt_simplifier::simplify): Use value_range instead of value_range_equiv. * tree-vrp.cc (extract_range_from_plus_minus_expr): Use reference instead of pointer. (find_case_label_range): Same. * value-range-equiv.cc (value_range_equiv::intersect): Rename to... (value_range_equiv::legacy_verbose_intersect): ...this. (value_range_equiv::union_): Rename to... (value_range_equiv::legacy_verbose_union_): ...this. * value-range-equiv.h (class value_range_equiv): Rename union and intersect to legacy_verbose_{intersect,union}. * value-range.cc (irange::union_): Rename to... (irange::legacy_verbose_union_): ...this. (irange::intersect): Rename to... (irange::legacy_verbose_intersect): ...this. * value-range.h (irange::union_): Rename union_ to legacy_verbose_union. (irange::intersect): Rename intersect to legacy_verbose_intersect. * vr-values.cc (vr_values::update_value_range): Same. (vr_values::extract_range_for_var_from_comparison_expr): Same. (vr_values::extract_range_from_cond_expr): Rename union_ to legacy_verbose_union. (vr_values::extract_range_from_phi_node): Same.
-
Aldy Hernandez authored
This patch consolidates the multiple ways we have of storing global ranges into one accepting a range. In an upcoming patch series later this cycle we will be providing a way to store iranges globally, as opposed to the mechanism we have now which squishes wider ranges into value_range's. This is preparation for such work. Tested and benchmarked on x86-64 Linux. gcc/ChangeLog: * gimple-ssa-evrp-analyze.cc (evrp_range_analyzer::set_ssa_range_info): Use *range_info methods that take a range. * gimple-ssa-sprintf.cc (try_substitute_return_value): Same. * ipa-prop.cc (ipcp_update_vr): Same. * tree-inline.cc (remap_ssa_name): Same. * tree-ssa-copy.cc (fini_copy_prop): Same. * tree-ssa-math-opts.cc (optimize_spaceship): Same. * tree-ssa-phiopt.cc (replace_phi_edge_with_variable): Same. * tree-ssa-pre.cc (insert_into_preds_of_block): Same. * tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): Same. * tree-ssa-strlen.cc (set_strlen_range): Same. (strlen_pass::handle_builtin_string_cmp): Same. * tree-ssanames.cc (set_range_info): Make static. (duplicate_ssa_name_range_info): Make static and add a new variant calling the static. * tree-ssanames.h (set_range_info): Remove version taking wide ints. (duplicate_ssa_name_range_info): Remove version taking a range_info_def and replace with a version taking SSA names. * tree-vect-loop-manip.cc (vect_gen_vector_loop_niters): Use *range_info methods that take a range. (vect_do_peeling): Same. * tree-vrp.cc (vrp_asserts::remove_range_assertions): Same. * vr-values.cc (simplify_truth_ops_using_ranges): Same.
-