1. 29 Jul, 2019 7 commits
    • Don't run DSE at -Og · c0fe6bce
      This patch stops gimple and rtl DSE from running by default at -Og.
      The idea is both to improve compile time and to stop us from deleting
      stores that we can't track in debug info.
      
      We could rein this back in future for stores to local variables
      with is_gimple_reg_type, but at the moment we don't have any
      infrastructure for switching between binds to specific values
      and binds to evolving memory locations.  Even then, location
      tracking only works for direct references to the variables, and doesn't
      for example help with printing dereferenced pointers (see the next patch
      in the series for an example).
      
      I'm also not sure that DSE is important enough for -Og to justify the
      compile time cost --  especially in the case of RTL DSE, which is pretty
      expensive.
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* common.opt (Og): Change the initial value of flag_dse to 0.
      	* opts.c (default_options_table): Move OPT_ftree_dse from
      	OPT_LEVELS_1_PLUS to OPT_LEVELS_1_PLUS_NOT_DEBUG.  Also add
      	OPT_fdse to OPT_LEVELS_1_PLUS_NOT_DEBUG.  Put the OPT_ftree_pta
      	entry before the OPT_ftree_sra entry.
      	* doc/invoke.texi (Og): Add -fdse and -ftree-dse to the list
      	of flags disabled by Og.
      
      gcc/testsuite/
      	* c-c++-common/guality/Og-global-dse-1.c: New test.
      
      From-SVN: r273871
      Richard Sandiford committed
    • Prevent -Og from deleting stores to write-only variables · ec8ac265
      This patch prevents -Og from deleting stores to write-only variables,
      so that the values are still available when debugging.  This seems
      more convenient than forcing users to use __attribute__((used))
      (probably conditionally, if it's not something they want in release
      builds).
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-cfg.c (execute_fixup_cfg): Don't delete stores to write-only
      	variables for -Og.
      
      gcc/testsuite/
      	* c-c++-common/guality/Og-static-wo-1.c: New test.
      	* g++.dg/guality/guality.exp: Separate the c-c++-common tests into
      	"Og" and "general" tests.  Run the latter at -O0 and -Og only.
      	* gcc.dg/guality/guality.exp: Likewise.
      
      From-SVN: r273870
      Richard Sandiford committed
    • Add dg test for matching function bodies · 4d706ff8
      There isn't a 1:1 mapping from SVE intrinsics to SVE instructions,
      but the intrinsics are still close enough to the instructions for
      there to be a specific preferred sequence (or sometimes choice of
      preferred sequences) for a given combination of operands.  Sometimes
      these sequences will be one instruction, sometimes they'll be several.
      
      I therefore wanted a convenient way of matching the exact assembly
      implementation of a given function.  It's possible to do that using
      single scan-assembler lines, but:
      
      (a) they become hard to read for multiline matches
      (b) the PASS/FAIL lines tend to be overly long
      (c) it's useful to have a single place that skips over uninteresting
          lines, such as entry block labels and .cfi_* directives, without
          being overly broad
      
      This patch therefore adds a new check-function-bodies dg-final test
      that looks for specially-formatted comments.  As a demo, the patch
      converts the SVE vec_init tests to use the new harness instead of
      scan-assembler.
      
      The regexps in parse_function_bodies are fairly general, but might
      still need to be extended in future for targets like Darwin or AIX.
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* doc/sourcebuild.texi (check-function-bodies): Document.
      
      gcc/testsuite/
      	* lib/scanasm.exp (parse_function_bodies, check_function_body)
      	(check-function-bodies): New procedures.
      	* gcc.target/aarch64/sve/init_1.c: Use check-function-bodies
      	instead of scan-assembler.
      	* gcc.target/aarch64/sve/init_2.c: Likewise.
      	* gcc.target/aarch64/sve/init_3.c: Likewise.
      	* gcc.target/aarch64/sve/init_4.c: Likewise.
      	* gcc.target/aarch64/sve/init_5.c: Likewise.
      	* gcc.target/aarch64/sve/init_6.c: Likewise.
      	* gcc.target/aarch64/sve/init_7.c: Likewise.
      	* gcc.target/aarch64/sve/init_8.c: Likewise.
      	* gcc.target/aarch64/sve/init_9.c: Likewise.
      	* gcc.target/aarch64/sve/init_10.c: Likewise.
      	* gcc.target/aarch64/sve/init_11.c: Likewise.
      	* gcc.target/aarch64/sve/init_12.c: Likewise.
      
      From-SVN: r273869
      Richard Sandiford committed
    • Generalise VEC_DUPLICATE folding for variable-length vectors · 708cc613
      This patch uses the constant vector encoding scheme to handle
      more cases of a VEC_DUPLICATE of another vector.  Duplicating
      any fixed-length vector is fine, and duplicating a variable-length
      vector is OK as long as that vector is also a duplicate of a
      fixed-length sequence.
      
      Other cases fell through to:
      
        if (VECTOR_MODE_P (mode) && GET_CODE (op) == CONST_VECTOR)
      
      which was only expecting to deal with elementwise operations.
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* simplify-rtx.c (simplify_const_unary_operation): Fold a
      	VEC_DUPLICATE of a fixed-length vector even if the result
      	is variable-length.  Likewise fold a duplicate of a
      	variable-length vector if the variable-length vector is
      	itself a duplicate of a fixed-length sequence.
      	(test_vector_ops_duplicate): Test more cases.
      
      From-SVN: r273868
      Richard Sandiford committed
    • Implement more rtx vector folds on variable-length vectors · 4ce6ab68
      This patch extends the tree-level folding of variable-length vectors
      so that it can also be used on rtxes.  The first step is to move
      the tree_vector_builder new_unary/binary_operator routines to the
      parent vector_builder class (which in turn means adding a new
      template parameter).  The second step is to make simplify-rtx.c
      use a direct rtx analogue of the VECTOR_CST handling in fold-const.c.
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* vector-builder.h (vector_builder): Add a shape template parameter.
      	(vector_builder::new_unary_operation): New function, generalizing
      	the old tree_vector_builder function.
      	(vector_builder::new_binary_operation): Likewise.
      	(vector_builder::binary_encoded_nelts): Likewise.
      	* int-vector-builder.h (int_vector_builder): Update template
      	parameters to vector_builder.
      	(int_vector_builder::shape_nelts): New function.
      	* rtx-vector-builder.h (rtx_vector_builder): Update template
      	parameters to vector_builder.
      	(rtx_vector_builder::shape_nelts): New function.
      	(rtx_vector_builder::nelts_of): Likewise.
      	(rtx_vector_builder::npatterns_of): Likewise.
      	(rtx_vector_builder::nelts_per_pattern_of): Likewise.
      	* tree-vector-builder.h (tree_vector_builder): Update template
      	parameters to vector_builder.
      	(tree_vector_builder::shape_nelts): New function.
      	(tree_vector_builder::nelts_of): Likewise.
      	(tree_vector_builder::npatterns_of): Likewise.
      	(tree_vector_builder::nelts_per_pattern_of): Likewise.
      	* tree-vector-builder.c (tree_vector_builder::new_unary_operation)
      	(tree_vector_builder::new_binary_operation): Delete.
      	(tree_vector_builder::binary_encoded_nelts): Likewise.
      	* simplify-rtx.c: Include rtx-vector-builder.h.
      	(distributes_over_addition_p): New function.
      	(simplify_const_unary_operation)
      	(simplify_const_binary_operation): Generalize handling of vector
      	constants to include variable-length vectors.
      	(test_vector_ops_series): Add more tests.
      
      From-SVN: r273867
      Richard Sandiford committed
    • re PR c++/91222 (507.cactuBSSN_r build fails in warn_types_mismatch at… · 66fafc3b
      re PR c++/91222 (507.cactuBSSN_r build fails in warn_types_mismatch at ipa-devirt.c:1006 since r273571)
      
      
      	PR lto/91222
      	* ipa-devirt.c (warn_types_mismatch): Compare indentifiers
      	than INDENTIFIER_POINTER.
      
      From-SVN: r273866
      Jan Hubicka committed
    • Daily bump. · a8cc00bf
      From-SVN: r273864
      GCC Administrator committed
  2. 28 Jul, 2019 8 commits
    • Release cgraph_{node,edge} via ggc_free (PR ipa/89330). · fe248a88
      2019-07-28  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/89330
      	* cgraph.c (symbol_table::create_edge): Always allocate
      	a cgraph_edge.
      	(symbol_table::free_edge): Store summary_id to
      	edge_released_summary_ids if != -1;
      	* cgraph.h (NEXT_FREE_NODE): Remove.
      	(SET_NEXT_FREE_NODE): Likewise.
      	(NEXT_FREE_EDGE): Likewise.
      	(symbol_table::release_symbol): Store summary_id to
      	cgraph_released_summary_ids if != -1;
      	(symbol_table::allocate_cgraph_symbol): Always allocate
      	a cgraph_node.
      
      From-SVN: r273857
      Martin Liska committed
    • Fix g++.dg/lto/pr89330 on Solaris · 4f394a9e
      	* g++.dg/lto/pr89330_0.C (dg-lto-options): Add -fPIC.
      	Require fpic support.
      
      From-SVN: r273856
      Rainer Orth committed
    • [RS6000] rs6000_output_mi_thunk tidy · aef57966
      Since svn r123193 (git 327202e27a) the comment about scratch regs was
      no longer correct, and I think gen_sibcall could have been used even
      then.
      
      	* gcc/config/rs6000/rs6000-call.c (rs6000_output_mi_thunk): Use
      	gen_sibcall.
      
      From-SVN: r273855
      Alan Modra committed
    • [RS6000] PR91135, __linux__ not defined with -mcall-aixdesc on 9.x and ppc64 · 295ac7c7
      This patch makes the obvious fix for PR91135, and deletes extraneous
      copies of GNU_USER_TARGET_D_OS_VERSIONS that appear in rs6000/linux.h
      and rs6000/linux64.h.  Since all configurations using either of these
      files also include linux.h there is no need to duplicate the macro.
      
      	PR target/91135
      	* config/rs6000/linux.h (GNU_USER_TARGET_D_OS_VERSIONS): Don't
      	define.
      	* config/rs6000/linux64.h (TARGET_OS_CPP_BUILTINS): Invoke
      	GNU_USER_TARGET_OS_CPP_BUILTINS for aixdesc abi.
      	(GNU_USER_TARGET_D_OS_VERSIONS): Don't define.
      
      From-SVN: r273854
      Alan Modra committed
    • [RS6000] Make assembler command line cpu match default for gcc · 8d852645
      When gcc is configured using --with-cpu=<cpu>, the specified cpu
      effectively becomes a default -mcpu=<cpu> passed to gcc.  This then
      affects the cpu passed to gas via ASM_CPU_SPEC.  If gcc is not
      configured using --with-cpu then the cpu passed to gas is that given
      by ASM_DEFAULT_SPEC, which currently does not match the default flags
      selected in default64.h.  This patch makes ASM_DEFAULT_SPEC agree with
      TARGET_DEFAULT flags.
      
      rs6000/default64.h appears in three places in config.gcc, the first
      one immediately followed by rs6000/freebsd64.h in $tm_file, and the
      other two immediately followed by rs6000/linux64.h.  To be able to
      define ASM_DEFAULT_SPEC in rs6000/default64.h we don't want to
      redefine in the other two files.  rs6000/freebsd64.h is easy since
      that file is always preceded by rs6000/default64.h, but
      rs6000/linux64.h can appear without rs6000/default64.h (a
      powerpc*-linux config where the default is -m32).  In that case we
      will have TARGET_DEFAULT flags of 0 (from rs6000/sysv4.h) and want to
      use -mppc without -m64 and -mppc64 with -m64.  This can be done by
      using the rs6000/rtems.h ASM_DEFAULT_SPEC in rs6000/sysv4.h, a change
      that won't affect sysv4 configurations where -m64 is invalid.
      
      The patch also introduces ASM_DEFAULT_EXTRA for the altivec variant
      targets so as to enable -maltivec by default.
      
      	PR target/91050
      	* config/rs6000/sysv4.h (ASM_DEFAULT_SPEC): Modify if -m64.
      	* config/rs6000/default64.h (ASM_DEFAULT_SPEC): Define.
      	* config/rs6000/freebsd64.h (ASM_DEFAULT_SPEC): Don't define.
      	* config/rs6000/linux64.h (ASM_DEFAULT_SPEC): Likewise.
      	* config/rs6000/rtems.h (ASM_DEFAULT_SPEC): Likewise.
      	* config/rs6000/rs6000.h (ASM_DEFAULT_EXTRA): Define and use
      	in asm_default spec.
      	* config/rs6000/eabialtivec.h (ASM_DEFAULT_EXTRA): Redefine.
      	* config/rs6000/linuxaltivec.h (ASM_DEFAULT_EXTRA): Redefine.
      
      From-SVN: r273853
      Alan Modra committed
    • documentation_hacking.xml: Fix broken reference to the Doxygen manual. · c5993c9a
      	* doc/xml/manual/documentation_hacking.xml: Fix broken reference
      	to the Doxygen manual. Avoid a "here" link on the way.
      	Fix another broken link to Doxygen docblocks.
      
      From-SVN: r273852
      Gerald Pfeifer committed
    • Daily bump. · 93ca0712
      From-SVN: r273850
      GCC Administrator committed
  3. 27 Jul, 2019 2 commits
    • [Darwin, PPC, testsuite] Fix fail for bmi2-bzhi64-1a.c · 5bca9dd4
      This test is failing with older cpus because the included header needs both
      altivec and vsx to be enabled to succeed in compiling.  Without this (if these
      are not defaults for the cpu) there are errors like:
      
      In file included from ... x86intrin.h:41,
                       from ... bmi2-bzhi64-1a.c:6:
       ... xmmintrin.h: In function '_mm_loadu_ps':
       ... xmmintrin.h:122:11: 
      error: incompatible types when returning type 'int' but '__m128' {aka '__vector(4) float'} was expected
      <snip>
       ... xmmintrin.h: In function '_mm_cvtps_pi32':
       ... xmmintrin.h:996:3: 
      error: use of 'long long' in AltiVec types is invalid without '-mvsx'
      <snip>
      
      Fixed by adding -maltivec -mvsx to the options.
      
      gcc/testsuite/
      
      2019-07-27  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* gcc.target/powerpc/bmi2-bzhi64-1a.c: Add options to enable altivec
      	and vsx.
      
      From-SVN: r273844
      Iain Sandoe committed
    • Daily bump. · eebbac58
      From-SVN: r273843
      GCC Administrator committed
  4. 26 Jul, 2019 7 commits
    • [Darwin, testsuite] Handle Darwin's size command. · 4f67cda8
      Darwin's "size" command has a different header line, reflecting the Mach-O
      section naming conventions.  This causes tests using the command to fail
      because scanasm.exp expects and checks specific layout of the header line.
      
      gcc/testsuite/
      
      2019-07-26  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* lib/scanasm.exp (object-size): Handle Darwin's size command.
      
      From-SVN: r273839
      Iain Sandoe committed
    • Define __cpp_lib_endian feature test macro · a5378f9b
      This macro was added as part of moving std::endian from <type_traits> to
      <bit>.
      
      	* include/std/bit (__cpp_lib_endian): Define.
      	* include/std/version (__cpp_lib_endian): Define.
      	* testsuite/26_numerics/endian/2.cc: New.
      	* testsuite/26_numerics/endian/3.cc: New.
      	* testsuite/26_numerics/endian/4.cc: New.
      
      From-SVN: r273828
      Jonathan Wakely committed
    • AArch64: Make processing less fragile in config.gcc · 3644cadf
      Due to config.gcc all the options need to be on one line because of the grep
      lines which would select only the first line of the option.
      
      This causes it not to select the right bits on options that are spread over
      multiple lines when the --with-arch configure option is used.  The issue happens
      silently and you just get a compiler with an incorrect set of default flags.
      
      The current rules are quite rigid:
      
         1) No space between the AARCH64_OPT_EXTENSION and the opening (.
         2) No space between the opening ( and the extension name.
         3) No space after the extension name before the ,.
         4) Spaces are only allowed after a , and around |.
      
      This patch makes this a lot less fragile by using the C pre-processor to flatten
      the list and then provides much more flexible regex using group matching to
      process the options instead of string replacement.  This removes all the
      restrictions above and makes the code a bit more readable.
      
      gcc/ChangeLog:
      
      	PR target/89517
      	* config.gcc: Relax parsing of AARCH64_OPT_EXTENSION.
      	* config/aarch64/aarch64-option-extensions.def: Add new comments
      	and restore easier to read options.
      
      From-SVN: r273827
      Tamar Christina committed
    • Add rules to strip away unneeded type casts in expressions · 8f5331b2
      This patch moves part of the type conversion code from convert.c to match.pd
      because match.pd is able to apply these transformations in the presence of
      intermediate temporary variables.
      
      Concretely it makes both these cases behave the same
      
        float e = (float)a * (float)b;
        *c = (_Float16)e;
      
      and 
      
        *c = (_Float16)((float)a * (float)b);
      
      gcc/ChangeLog:
      
      	* convert.c (convert_to_real_1): Move part of conversion code...
      	* match.pd: ...To here.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/type-convert-var.c: New test.
      
      From-SVN: r273826
      Tamar Christina committed
    • [PR 89330] Remove non-useful speculations from new_edges · 4517b378
      2019-07-26  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/89330
      	* ipa-inline-transform.c (check_speculations_1): New function.
      	(push_all_edges_in_set_to_vec): Likewise.
      	(check_speculations): Use check_speculations_1, new parameter
      	new_edges.
      	(inline_call): Pass new_edges to check_speculations.
      	* ipa-inline.c (add_new_edges_to_heap): Assert edge_callee is not
      	NULL.
      	(speculation_useful_p): Early return true if edge is inlined, remove
      	later checks for inline_failed.
      
      	testsuite/
      	* g++.dg/lto/pr89330_[01].C: New test.
      	* g++.dg/tree-prof/devirt.C: Added -fno-profile-values to dg-options.
      
      From-SVN: r273825
      Martin Jambor committed
    • 2019-07-26 François Dumont <fdumont@gcc.gnu.org> · ac2dca4d
      	* testsuite/util/testsuite_iterators.h
      	(bidirectional_iterator_wrapper): Fix type comment.
      	(random_access_iterator_wrapper): Likewise.
      
      From-SVN: r273824
      François Dumont committed
    • Daily bump. · cc00790c
      From-SVN: r273823
      GCC Administrator committed
  5. 25 Jul, 2019 16 commits
    • Relocate std::endian from <type_traits> to <bit> · 45c7215c
      This change to an early C++2a feature was just approved (P1612R1).
      
      	* include/std/bit (endian): Move definition here as per P1612R1.
      	* include/std/type_traits (endian): Remove definition from here.
      	* testsuite/20_util/endian/1.cc: Rename to ...
      	* testsuite/26_numerics/endian/1.cc: ... here. Adjust header.
      
      From-SVN: r273816
      Jonathan Wakely committed
    • Wstringop-overflow-14.c: Disable for stricly aligned targets. · 599780d6
      gcc/testsuite/ChangeLog:
      	* gcc.dg/Wstringop-overflow-14.c: Disable for stricly aligned targets.
      
      From-SVN: r273814
      Martin Sebor committed
    • re PR tree-optimization/91183 (strlen of a strcpy result with a conditional source not folded) · f2d52e00
      PR tree-optimization/91183
      PR tree-optimization/86688
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/strlenopt-70.c: Fix bugs.
      	* gcc.dg/strlenopt-71.c: Same.
      	* gcc.dg/strlenopt-72.c: Same.
      
      From-SVN: r273812
      Martin Sebor committed
    • re PR rtl-optimization/91223 (ICE: in curr_insn_transform, at lra-constraints.c:4459) · 9f41de41
      2019-07-25  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR rtl-optimization/91223
      	* lra-constraints.c (process_alt_operands): Fail for unsuccessful
      	matching with INOUT operand.
      
      2019-07-25  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR rtl-optimization/91223
      	* gcc.target/i386/pr91223.c: New test.
      
      From-SVN: r273810
      Vladimir Makarov committed
    • [Darwin, testsuite] Address PR91087 - XFAIL parts of pr16855.C. · 7649f2e4
      The testcase is failing to instrument part of the source because of a bug
      in the ordering of static DTORs.  It seems unlikely that this is generically
      fixable in the toolchain (and given that it's likely to be a dynamic loader
      change would not be expected to be applied retrospectively to OS versions
      that are out of support).  To avoid the testsuite noise, xfail the count lines
      that don't match (we can adjust the xfails as/when the upstream bug is fixed).
      
      dejagnu xfails do not seem to work when embedded in a line like:
        ~Test (void) { .... /* count(1) { xfail ... } */ }
      the closing brace seems to confuse the parser.  The solution is to exapnd the
      text onto three lines.
      
      2019-07-25  Iain Sandoe  <iain@sandoe.co.uk>
      
      	PR gcov-profile/91087
      	* g++.dg/gcov/pr16855.C: Xfail the count lines for the DTORs and the
      	"final" line for the failure summaries.  Adjust source layout so that
      	dejagnu xfail expressions work.
      
      From-SVN: r273809
      Iain Sandoe committed
    • re PR fortran/65819 (overzealous checking in gfc_check_dependency for identical=true) · 40e1ed26
      2019-07-25  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/65819
      	* dependency.h (gfc_dep_resovler): Add optional argument identical.
      	* dependency.c (gfc_check_dependency): Do not alway return 1 if
      	the symbol is the same. Pass on identical to gfc_dep_resolver.
      	(gfc_check_element_vs_element): Whitespace fix.
      	(gfc_dep_resolver): Adjust comment for function.  If identical is
      	true, return 1 if any overlap has been found.
      
      2019-07-25  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/65819
      	* gfortran.dg/dependency_54.f90: New test.
      
      From-SVN: r273807
      Thomas Koenig committed
    • stmt.c (expand_case): Try to narrow the index type if it's larger than a word. · 0dfa7ba1
      	* stmt.c (expand_case): Try to narrow the index type if it's larger
      	than a word.  Tidy up.
      
      From-SVN: r273805
      Eric Botcazou committed
    • cif-code.def (NEVER_CALL): New code. · 5ab2422a
      	* cif-code.def (NEVER_CALL): New code.
      	* ipa-inline.c (want_inline_small_function_p): Fix formatting issues.
      	Set the failure to CIF_NEVER_CALL if the IPA count is zero.
      
      From-SVN: r273804
      Eric Botcazou committed
    • Fix low reg issue in Thumb-2 movsi patterns · 75088696
      The Thumb-2 movsi patterns try to prefer low registers for loads and stores.
      However this is done incorrectly by using 2 separate variants with 'l' and 'h'
      register classes.  The register allocator will only use low registers, and
      as a result we end up with significantly more spills and moves to high
      registers.  Fix this by merging the alternatives and use 'l*r' to indicate
      preference for low registers.  This saves ~400 instructions from the pr77308
      testcase.
      
          gcc/
      	* config/arm/thumb2.md (thumb2_movsi_insn): Fix load/store low reg.
      	* config/arm/vfp.md (thumb2_movsi_vfp): Likewise.
      
      From-SVN: r273802
      Wilco Dijkstra committed
    • * ipa-devirt.c (add_type_duplicate): Fix return value. · 2fc233b7
      From-SVN: r273800
      Jan Hubicka committed
    • tree-vrp.c (extract_range_from_multiplicative_op): Add type parameter and use it… · e2cfa983
      tree-vrp.c (extract_range_from_multiplicative_op): Add type parameter and use it instead of guessing expression type from the...
      
      2019-07-25  Richard Biener  <rguenther@suse.de>
      
      	* tree-vrp.c (extract_range_from_multiplicative_op): Add
      	type parameter and use it instead of guessing expression
      	type from the first operand.
      	(extract_range_from_binary_expr): Pass expr_type down.
      
      From-SVN: r273797
      Richard Biener committed
    • [arm][committed] Clean up code iterator usage in satsi* patterns · c9357dc1
      
      GCC 10 now supports having RTL codes being code attributes (thanks
      Richard) allowing us to map smax to smin and vice versa.
      This means we can clean up their use in the saturation patterns that do
      the cross product of [smin, smax] and use the pattern
      predicate to cancel out the nonsense ones.
      
      	* config/arm/arm.md (SATrev): Change to code attribute.
      	(*satsi_<SAT:code>): Adjust for the above.
      	(*satsi_<SAT:code>_shift): Likewise.
      
      From-SVN: r273796
      Kyrylo Tkachov committed
    • gimple-loop-versioning.cc (loop_versioning::prune_loop_conditions): Make… · 0982acbe
      gimple-loop-versioning.cc (loop_versioning::prune_loop_conditions): Make value_range * temporary const.
      
      2019-07-25  Richard Biener  <rguenther@suse.de>
      
      	* gimple-loop-versioning.cc (loop_versioning::prune_loop_conditions):
      	Make value_range * temporary const.
      	* gimple-ssa-evrp-analyze.c (evrp_range_analyzer::try_find_new_range):
      	Likewise.
      	(evrp_range_analyzer::record_ranges_from_): Likewise.
      	(evrp_range_analyzer::pop_value_range): Return a const value_range *,
      	deal with having recorded a const one.
      	* gimple-ssa-evrp-analyze.h (evrp_range_analyzer::get_value_range):
      	Return a const value_range *.
      	(evrp_range_analyzer::pop_value_range): Likewise.
      	(evrp_range_analyzer::stack): Record const value_range *s.
      	* gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children):
      	Adjust.
      	* gimple-ssa-sprintf.c (get_int_range): Likewise.
      	(format_integer): Likewise.
      	(sprintf_dom_walker::handle_gimple_call): Likewise.
      	* tree-ssa-dom.c (simplify_stmt_for_jump_threading): Likewise.
      	* tree-vrp.c (vrp_prop::set_def_to_varying): Add.
      	(vrp_prop::get_value_range): Adjust.
      	(vrp_prop::vrp_initialize): Use set_def_to_varying instead of
      	modifying the lattice in-place.
      	(vrp_prop::visit_stmt): Likewise.
      	* vr-values.c (vr_values::get_lattice_entry): New private method.
      	(vr_values::get_value_range): Wrap it and return a const
      	value_range *.
      	(vr_values::set_def_to_varying): New.
      	(vr_values::set_defs_to_varying): Use it.
      	(vr_values::update_value_range): Likewise.
      	(vr_values::vrp_stmt_computes_nonzero): Adjust.
      	(values::op_with_constant_singleton_va): Likewise.
      	(vr_values::extract_range_for_var_from_co): Likewise.
      	(vr_values::extract_range_from_ssa_name): Likewise.
      	(vr_values::extract_range_from_cond_expr): Likewise.
      	(vr_values::extract_range_basic): Likewise.
      	(compare_ranges): Take const value_range *, adjust.
      	(compare_range_with_value): Likewise.
      	(vrp_valueize): Adjust.
      	(vrp_valueize_1): Likewise.
      	(vr_values::get_vr_for_comparison): Return a const value_range *.
      	(vr_values::compare_name_with_value): Adjust.
      	(vr_values::compare_names): Likewise.
      	(vr_values::vrp_evaluate_conditional_warnv_with_ops_using_ranges):
      	Likewise.
      	(vr_values::vrp_evaluate_conditional): Likewise.
      	(find_case_label_ranges): Take a const value_range *.
      	(vr_values::vrp_visit_switch_stmt): Adjust.
      	(vr_values::extract_range_from_phi_node): Likewise.
      	(vr_values::simplify_div_or_mod_using_ran): Likewise.
      	(vr_values::simplify_abs_using_ranges): Likewise.
      	(test_for_singularity): Take a const value_range *.
      	(range_fits_type_p): Likewise.
      	(vr_values::simplify_cond_using_ranges_1): Adjust.
      	(vr_values::simplify_cond_using_ranges_2): Likewise.
      	(vr_values::simplify_switch_using_ranges): Likewise.
      	(vr_values::simplify_float_conversion_usi): Likewise.
      	(vr_values::two_valued_val_range_p): Likewise.
      	* vr-values.h (vr_values::get_value_range): Return a const
      	value_range *.
      	(vr_values::set_def_to_varying): New.
      	(vr_values::get_lattice_entry): New private method.
      	(vr_values::get_vr_for_comparison): Return a const value_range *.
      
      From-SVN: r273792
      Richard Biener committed
    • Extend DCE to remove unnecessary new/delete-pairs (PR c++/23383). · 6343b6bf
      2019-07-25  Martin Liska  <mliska@suse.cz>
      	    Dominik Infuhr  <dominik.infuehr@theobroma-systems.com>
      
      	PR c++/23383
      	* common.opt: Add -fallocation-dce
      	* gimple.c (gimple_call_operator_delete_p): New.
      	* gimple.h (gimple_call_operator_delete_p): Likewise.
      	* tree-core.h (enum function_decl_type): Add OPERATOR_DELETE.
      	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Handle
      	DECL_IS_OPERATOR_DELETE_P.
      	(mark_all_reaching_defs_necessary_1): Likewise.
      	(propagate_necessity): Likewise.
      	(eliminate_unnecessary_stmts): Handle
      	gimple_call_operator_delete_p.
      	* tree-streamer-in.c (unpack_ts_function_decl_value_fields):
      	Add packing of OPERATOR_DELETE.
      	* tree-streamer-out.c (pack_ts_function_decl_value_fields):
      	Similarly here.
      	* tree.h (DECL_IS_OPERATOR_DELETE_P): New.
      	(DECL_SET_IS_OPERATOR_DELETE): New.
      	(DECL_IS_REPLACEABLE_OPERATOR_NEW_P): Likewise.
      2019-07-25  Martin Liska  <mliska@suse.cz>
      	    Dominik Infuhr  <dominik.infuehr@theobroma-systems.com>
      
      	PR c++/23383
      	* c-decl.c (merge_decls): Merge OPERATOR_DELETE flag.
      2019-07-25  Martin Liska  <mliska@suse.cz>
      	    Dominik Infuhr  <dominik.infuehr@theobroma-systems.com>
      
      	PR c++/23383
      	* decl.c (cxx_init_decl_processing): Mark delete operators
      	with DECL_SET_IS_OPERATOR_DELETE.
      2019-07-25  Martin Liska  <mliska@suse.cz
      	    Dominik Infuhr  <dominik.infuehr@theobroma-systems.com>
      
      	PR c++/23383
      	* g++.dg/cpp1y/new1.C: New test.
      2019-07-25  Martin Liska  <mliska@suse.cz>
      	    Dominik Infuhr  <dominik.infuehr@theobroma-systems.com>
      
      	PR c++/23383
      	* testsuite/ext/bitmap_allocator/check_delete.cc: Add
      	-fno-allocation-dce.
      	* testsuite/ext/bitmap_allocator/check_new.cc: Likewise.
      	* testsuite/ext/new_allocator/check_delete.cc: Likewise.
      	* testsuite/ext/new_allocator/check_new.cc: Likewise.
      
      Co-Authored-By: Dominik Infuehr <dominik.infuehr@theobroma-systems.com>
      
      From-SVN: r273791
      Martin Liska committed
    • Come up with function_decl_type and use it in tree_function_decl. · cb50701e
      2019-07-25  Martin Liska  <mliska@suse.cz>
      
      	* calls.c (maybe_warn_alloc_args_overflow): Use new macros
      	(e.g. DECL_SET_LAMBDA_FUNCTION and DECL_LAMBDA_FUNCTION_P).
      	* coverage.c (coverage_begin_function): Likewise.
      	* fold-const.c (tree_expr_nonzero_warnv_p): Likewise.
      	* gimple.c (gimple_call_nonnull_result_p): Likewise.
      	* ipa-icf.c (sem_item::compare_referenced_symbol_properties): Likewise.
      	(sem_item::hash_referenced_symbol_properties): Likewise.
      	* lto-streamer-out.c (hash_tree): Likewise.
      	* predict.c (expr_expected_value_1): Likewise.
      	* tree-inline.c (expand_call_inline): Likewise.
      	* tree-streamer-in.c (unpack_ts_function_decl_value_fields): Likewise.
      	* tree-streamer-out.c (pack_ts_function_decl_value_fields): Likewise.
      	* tree-core.h (enum function_decl_type): New enum.
      	(struct tree_function_decl): Remove operator_new_flag and lambda_function.
      	* tree.h (FUNCTION_DECL_DECL_TYPE): New.
      	(set_function_decl_type): Likewise.
      	(DECL_IS_OPERATOR_NEW_P): New.
      	(DECL_SET_IS_OPERATOR_NEW): Likewise.
      	(DECL_LAMBDA_FUNCTION): Likewise.
      	(DECL_LAMBDA_FUNCTION_P): Likewise.
      	(DECL_IS_OPERATOR_NEW): Remove.
      	(DECL_SET_LAMBDA_FUNCTION): Likewise.
      2019-07-25  Martin Liska  <mliska@suse.cz>
      
      	* c-decl.c (merge_decls): Use new macros
      	(e.g. DECL_SET_LAMBDA_FUNCTION and DECL_LAMBDA_FUNCTION_P).
      2019-07-25  Martin Liska  <mliska@suse.cz>
      
      	* decl.c (duplicate_decls): Use new macros
      	(e.g. DECL_SET_LAMBDA_FUNCTION and DECL_LAMBDA_FUNCTION_P).
      	(cxx_init_decl_processing): Likewise.
      	(grok_op_properties): Likewise.
      	* parser.c (cp_parser_lambda_declarator_opt): Likewise.
      2019-07-25  Martin Liska  <mliska@suse.cz>
      
      	* lto-common.c (compare_tree_sccs_1): Use new macros
      	(e.g. DECL_SET_LAMBDA_FUNCTION and DECL_LAMBDA_FUNCTION_P).
      
      From-SVN: r273790
      Martin Liska committed
    • Generalize get_most_common_single_value to return n_th value & count · 982b1497
      Currently get_most_common_single_value could only return the max hist
      <value, count>, add sort after reading from disk, then it return nth value
      in later use.  Rename it to get_nth_most_common_value.
      
      gcc/ChangeLog:
      
      2019-07-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>
      
      	* ipa-profile.c (get_most_common_single_value): Use
      	get_nth_most_common_value.
      	* profile.c (sort_hist_value): New function.
      	(compute_value_histograms): Call sort_hist_value to sort the
      	values after loading from disk.
      	* value-prof.c (get_most_common_single_value): Rename to ...
      	get_nth_most_common_value.  Add input params n, return
      	the n_th value and count.
      	(gimple_divmod_fixed_value_transform): Use
      	get_nth_most_common_value.
      	(gimple_ic_transform): Likewise.
      	(gimple_stringops_transform): Likewise.
      	* value-prof.h (get_most_common_single_value): Add input params
      	n, default to 0.
      
      From-SVN: r273789
      Xiong Hu Luo committed