1. 10 Feb, 2020 27 commits
    • i386: Fix -mavx -mno-mavx2 ICE with VEC_COND_EXPR [PR93637] · f57aa950
      As mentioned in the PR, for -mavx -mno-avx2 the backend does support
      vcondv4div4df and vcondv8siv8sf optabs (while generally 32-byte vectors
      aren't much supported in that case, it is performed using
      vandps/vandnps/vorps).  The problem is that after the last generic vector
      lowering (where the VEC_COND_EXPR still compares two V4DF vectors and
      has two V4DI last operands and V4DI result and so is considered ok) fre4
      folds the condition into constant, at which point the middle-end during
      expansion will try vcond_mask_optab and fall back to trying to expand it
      as the constant vector < 0 vcondv4div4di, but neither of them is supported
      for -mavx -mno-avx2 and thus we ICE.
      
      So, the options I see is either what the following patch does, also support
      vcond_mask_v4div4di and vcond_mask_v4siv4si already for TARGET_AVX, or
      require for vcondv4div4df and vcondv8siv8sf TARGET_AVX2 rather than current
      TARGET_AVX.
      
      2020-02-10  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/93637
      	* config/i386/sse.md (VI_256_AVX2): New mode iterator.
      	(vcond_mask_<mode><sseintvecmodelower>): Use it instead of VI_256.
      	Change condition from TARGET_AVX2 to TARGET_AVX.
      
      	* gcc.target/i386/avx-pr93637.c: New test.
      Jakub Jelinek committed
    • analyzer: fix ICE with fortran constant arguments (PR 93405) · 41a9e940
      PR analyzer/93405 reports an ICE with -fanalyzer when passing
      a constant "by reference" in gfortran.
      
      The issue is that the constant is passed as an ADDR_EXPR
      of a CONST_DECL, and region_model::get_lvalue_1 doesn't
      know how to handle CONST_DECL.
      
      This patch implements it for CONST_DECL by providing
      a placeholder region, holding the CONST_DECL's value,
      fixing the ICE.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/93405
      	* region-model.cc (region_model::get_lvalue_1): Implement
      	CONST_DECL.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/93405
      	* gfortran.dg/analyzer/pr93405.f90: New test.
      David Malcolm committed
    • analyzer: gfortran testsuite support · e9fb7579
      This patch adds a gfortran.dg/analyzer subdirectory with an analyzer.exp,
      setting DEFAULT_FFLAGS on the tests run within it.
      
      It also adds a couple of simple proof-of-concept tests of e.g. detecting
      double-frees from gfortran.
      
      gcc/testsuite/ChangeLog:
      	* gfortran.dg/analyzer/analyzer.exp: New subdirectory and .exp
      	suite.
      	* gfortran.dg/analyzer/malloc-example.f90: New test.
      	* gfortran.dg/analyzer/malloc.f90: New test.
      David Malcolm committed
    • Fix libgcc build failure for FRV with recent versions of gas. · 7214fce3
      	* config/frv/frvbegin.c: Use right flags for .ctors and .dtors
      	sections.
      	* config/frv/frvend.c: Similarly.
      Jeff Law committed
    • Darwin: -Wformat-diag fix (PR93641) · c88ffcc6
      The length used for the comparison for 'CFStringRef' was only comparing
      for 'CFString', potentially allowing mismatched identifiers.
      
      2020-02-10  Iain Sandoe  <iain@sandoe.co.uk>
      
      	PR other/93641
      	* config/darwin-c.c (darwin_cfstring_ref_p): Fix up last
      	argument of strncmp.
      Iain Sandoe committed
    • Fix bogus duplicate attribute errors for submodule functions. · 7848054c
              PR fortran/83113
              * array.c: Do not attempt to set the array spec for a submodule
              function symbol (as it has already been set in the corresponding
              module procedure interface).
              * symbol.c: Do not reject duplicate POINTER, ALLOCATABLE, or
              DIMENSION attributes in declarations of a submodule function.
              * gfortran.h: Add a macro that tests for a module procedure in a
              submodule.
              * gfortran.dg/pr83113.f90: New test.
      Andrew Benson committed
    • PR c/93640 - The write_only and read_write attributes can be mistyped due to… · 0cc575e4
      PR c/93640 - The write_only and read_write attributes can be mistyped due to invalid strncmp size argument
      
      gcc/c-family/ChangeLog:
      
      	PR c/93640
      	* c-attribs.c (handle_access_attribute): Correct off-by-one mistakes.
      
      gcc/testsuite/ChangeLog:
      
      	PR c/93640
      	* gcc.dg/attr-access.c: New test.
      Martin Sebor committed
    • gcc.target/cris/dbr-1.c: New test. · d50ecb83
      Random spotting.  Exposes the missed benefit for delay-slot
      filling of a splitter for indexed addressing mode (the [rN+M]
      one).  To be considered for common instructions and perhaps only
      for suitable M; at least +-63 is obvious (when there's a register
      available) as both the original and the add fit in delay-slots.
      Hans-Peter Nilsson committed
    • gcc.target/cris/pr93372-3.c, -4.c...-35.c: New tests. · 7573521f
      PR target/93372
      * gcc.target/cris/pr93372-3.c, gcc.target/cris/pr93372-4.c,
      gcc.target/cris/pr93372-6.c, gcc.target/cris/pr93372-7.c,
      gcc.target/cris/pr93372-9.c, gcc.target/cris/pr93372-10.c,
      gcc.target/cris/pr93372-11.c, gcc.target/cris/pr93372-12.c,
      gcc.target/cris/pr93372-13.c, gcc.target/cris/pr93372-14.c,
      gcc.target/cris/pr93372-15.c, gcc.target/cris/pr93372-16.c,
      gcc.target/cris/pr93372-17.c, gcc.target/cris/pr93372-18.c,
      gcc.target/cris/pr93372-19.c, gcc.target/cris/pr93372-20.c,
      gcc.target/cris/pr93372-21.c, gcc.target/cris/pr93372-22.c,
      gcc.target/cris/pr93372-23.c, gcc.target/cris/pr93372-24.c,
      gcc.target/cris/pr93372-25.c, gcc.target/cris/pr93372-26.c,
      gcc.target/cris/pr93372-27.c, gcc.target/cris/pr93372-28.c,
      gcc.target/cris/pr93372-29.c, gcc.target/cris/pr93372-30.c,
      gcc.target/cris/pr93372-31.c, gcc.target/cris/pr93372-32.c,
      gcc.target/cris/pr93372-33.c, gcc.target/cris/pr93372-34.c,
      gcc.target/cris/pr93372-35.c: New tests.
      
      Check that somewhat-trivially eliminable compare-instructions
      are eliminated, for all instructions.  Note that pr93372-23.c
      and pr93372-24.c are xfailed with cc0.
      Hans-Peter Nilsson committed
    • gcc.target/cris/pr93372-2.c, -5.c, -8.c: New tests. · 991c1376
      * gcc.target/cris/pr93372-2.c, gcc.target/cris/pr93372-5.c,
      gcc.target/cris/pr93372-8.c: New tests.
      
      These tests fails miserably both at being an example of cc0
      eliminating compare instructions, and post-cc0-CRIS at showing a
      significant improvement.  They're here to track suboptimal
      comparison code for CRIS.
      Hans-Peter Nilsson committed
    • gcc.target/cris/pr93372-1.c: New test. · d12f1b91
      This test was separated from the posted and approved patch named
      "dbr: Filter-out TARGET_FLAGS_REGNUM from end_of_function_needs"
      and applied: it doesn't fail yet.  It differs from the posted
      version in that function "g" is commented-out; see the added
      comment.
      Hans-Peter Nilsson committed
    • gcc.target/cris/cris.exp (check_effective_target_cc0): New. · dcdd0aa8
      To simplify separating the cc0-specific xfails, let's have an
      effective-target.
      
      This likely fits all targets.
      Hans-Peter Nilsson committed
    • cris: try to generate zero-based comparisons · cfaf5204
      * config/cris/cris.c (cris_reduce_compare): New function.
      * config/cris/cris-protos.h  (cris_reduce_compare): Add prototype.
      * config/cris/cris.md ("cbranch<mode>4", "cbranchdi4", "cstoredi4")
      (cstore<mode>4"): Apply cris_reduce_compare in expanders.
      
      The decc0ration work of the CRIS port made me look closer at the
      code for trivial comparisons, as in the condition for branches
      and conditional-stores, like in:
      
      void g(short int a, short int b)
      {
        short int c = a + b;
      
        if (c >= 0)
          foo ();
      }
      
      At -O2, the cc0 version of the CRIS port has an explicit
      *uneliminated* compare instruction ("cmp.w -1,$r10") instead of
      an (eliminated) compare against 0 (which below I'll call a
      zero-compare).  This for the CRIS-cc0 version, but I see this
      also for a much older gcc, at 4.7.  For the decc0rated port, the
      compare *is* a test against 0, eventually eliminated.  To wit,
      for cc0 (mind the delay-slot):
      
      _g:
      	subq 4,$sp
      	add.w $r11,$r10
      	cmp.w -1,$r10
      	ble .L9
      	move $srp,[$sp]
      
      	jsr _foo
      .L9:
      	jump [$sp+]
      
      The compare instruction is expected to be eliminated, i.e.  the
      following diff to the above is desired, modulo the missing
      sibling call, which corresponds to what I get from 4.7 and for
      the decc0rated port:
      
      !--- a	Wed Feb  5 15:22:27 2020
      !+++ b	Wed Feb  5 15:22:51 2020
      !@@ -1,8 +1,7 @@
      ! _g:
      !	 subq 4,$sp
      !	 add.w $r11,$r10
      !-	cmp.w -1,$r10
      !-	ble .L9
      !+	bmi .L9
      !	 move $srp,[$sp]
      !
      !	 jsr _foo
      
      Tracking this difference, I see that for both cc0-CRIS and the
      decc0rated CRIS, the comparison actually starts out as a compare
      against -1 at "expand" time, but is transformed for decc0rated
      CRIS to a zero-compare in "cse1".
      
      For CRIS-cc0 "cse1" does try to replace the compare with a
      zero-compare, but fails because at the same time it tries to
      replace the c operand with (a + b).  Or some such; it fails and
      no other pass succeeds.  I was not into fixing cc0-handling in
      core gcc, so I didn't look closer.
      
      BTW, at first, I was a bit surprised to see that for compares
      against a constant, a zero-compare is not canonical RTX for
      *all* conditions, and that instead only a subset of all RTX
      conditions against a constant are canonical, transforming one
      condition to the canonical one by adding 1 or -1 to the
      constant.  It does makes sense at a closer look, but still not
      so much when emitting RTL.
      
      There are several places that mention in comments that emitting
      RTX as zero-compare is preferable, but nothing is done about it.
      Some generic code instead seems confused that the *target* is
      helped by seeing canonical RTX, or perhaps it (its authors) like
      me, confused about what a canonical comparison is.  For example,
      prepare_cmp_insn calls canonicalize_comparison last before
      emitting the actual instructions.  I see most ports for various
      port-specific reasons does their own massaging in their cbranch
      and cstore expanders.  Still, the suboptimal compares *should*
      be fixed at expand time; better start out right than just
      relying on later optimizations.
      
      This kind of change is not acceptable in the current gcc
      development stage, at least as a change in generic code.
      However, it's problematic enough that I chose to fix this right
      now in the CRIS port.  For that, I claim a possibly
      long-standing regression.  After this, code before and after
      decc0ration is similar enough that I can spot
      compare-elimination-efforts and apply regression test-cases
      without them drowning in cc0-specific xfailing.
      
      I hope to eventually lift out cris_reduce_compare (renamed) into
      say expmed.c, called in e.g. emit_store_flag_1 (replacing the
      in-line code) and prepare_cmp_insn.  Later.
      Hans-Peter Nilsson committed
    • arm: Add testcase for already fixed ICE [PR91913] · 86edfcfe
      2020-02-10  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/91913
      	* gfortran.dg/pr91913.f90: New test.
      Jakub Jelinek committed
    • i386: Properly pop restore token in signal frame · bf6465d0
      Linux CET kernel places a restore token on shadow stack for signal
      handler to enhance security.  The restore token is 8 byte and aligned
      to 8 bytes.  It is usually transparent to user programs since kernel
      will pop the restore token when signal handler returns.  But when an
      exception is thrown from a signal handler, now we need to pop the
      restore token from shadow stack.  For x86-64, we just need to treat
      the signal frame as normal frame.  For i386, we need to search for
      the restore token to check if the original shadow stack is 8 byte
      aligned.  If the original shadow stack is 8 byte aligned, we just
      need to pop 2 slots, one restore token, from shadow stack.  Otherwise,
      we need to pop 3 slots, one restore token + 4 byte padding, from
      shadow stack.
      
      This patch also includes 2 tests, one has a restore token with 4 byte
      padding and one without.
      
      Tested on Linux/x86-64 CET machine with and without -m32.
      
      libgcc/
      
      	PR libgcc/85334
      	* config/i386/shadow-stack-unwind.h (_Unwind_Frames_Increment):
      	New.
      
      gcc/testsuite/
      
      	PR libgcc/85334
      	* g++.target/i386/pr85334-1.C: New test.
      	* g++.target/i386/pr85334-2.C: Likewise.
      H.J. Lu committed
    • arm: correct constraints on movsi_compare0 [PR91913] · 1cad5e89
      The peephole that detects a mov of one register to another followed by
      a comparison of the original register against zero is only used in Arm
      state; but the instruction that matches this is generic to all 32-bit
      compilation states.  That instruction lacks support for SP which is
      permitted in Arm state, but has restrictions in Thumb2 code.
      
      This patch fixes the problem by allowing SP when in ARM state for all
      registers; in Thumb state it allows SP only as a source when the
      register really is copied to another target.
      
      	* config/arm/arm.md (movsi_compare0): Allow SP as a source register
      	in Thumb state and also as a destination in Arm state.  Add T16
      	variants.
      Richard Earnshaw committed
    • c-format: -Wformat-diag fix [PR93641] · a59aa302
      The last argument to strncasecmp is incorrect, so it matched even when
      can%' wasn't followed by t.  Also, the !ISALPHA (format_chars[1]) test
      looks pointless, format_chars[1] must be ' if strncasecmp succeeded and
      so will never be ISALPHA.
      
      2020-02-10  Jakub Jelinek  <jakub@redhat.com>
      
      	PR other/93641
      	* c-format.c (check_plain): Fix up last argument of strncasecmp.
      	Remove useless extra test.
      
      	* gcc.dg/format/gcc_diag-11.c (test_cdiag_bad_words): Add two further
      	tests.
      Jakub Jelinek committed
    • arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615] · 5602b48b
      Commit r10-6500-g811a475e broke the
      GCC build for arm-none-uclinuxfdpiceabi, as it forgot to update some
      uses of gnu_Unwind_Find_got.
      
      2020-02-10  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	libgcc/
      	PR target/93615
      	* unwind-arm-common.inc: Replace uses of gnu_Unwind_Find_got with
      	_Unwind_gnu_Find_got.
      	* unwind-pe.h: Likewise.
      Christophe Lyon committed
    • c++: Fux strncmp last argument in dump_decl_name [PR93641] · 13686ece
      I'm not aware of symbols starting with _ZG that don't start with _ZGR
      prefix, but perhaps in the future there might be some.
      
      2020-02-10  Jakub Jelinek  <jakub@redhat.com>
      
      	PR other/93641
      	* error.c (dump_decl_name): Fix up last argument to strncmp.
      Jakub Jelinek committed
    • i386: Fix strncmp last arguments in x86_64_elf_section_type_flags · 36a798fd
      Clearly I can't count, so we would consider as SECTION_BSS even sections
      like .lbssfoo or .gnu.linkonce.lbbar, even when linker only considers as
      special .lbss or .lbss.baz or .gnu.linkonce.lb.qux.
      
      2020-02-10  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/58218
      	PR other/93641
      	* config/i386/i386.c (x86_64_elf_section_type_flags): Fix up last
      	arguments of strncmp.
      Jakub Jelinek committed
    • c++: Fix flexible array with synthesized constructor. · 59dbb04d
      We were already rejecting initialization of a flexible array member in a
      constructor; we similarly shouldn't try to clean it up.
      
      	PR c++/93618
      	* tree.c (array_of_unknown_bound_p): New.
      	* init.c (perform_member_init): Do nothing for flexible arrays.
      Jason Merrill committed
    • Add xfails to libgomp tests target-{33,34}.c, target-link-1.c · fd789c81
      Add xfails for nvptx offloading because
      "no GOMP_OFFLOAD_async_run implemented in plugin-nvptx.c"
      (https://gcc.gnu.org/PR81688) and because
      "omp target link not implemented for nvptx"
      (https://gcc.gnu.org/PR81689).
      
      libgomp/
      	* testsuite/libgomp.c/target-33.c: Add xfail for execution on
      	offload_target_nvptx, cf. https://gcc.gnu.org/PR81688.
      	* testsuite/libgomp.c/target-34.c: Likewise.
      	* testsuite/libgomp.c/target-link-1.c: Add xfail for
      	offload_target_nvptx, cf. https://gcc.gnu.org/PR81689.
      Frederik Harwath committed
    • Update testcase ChangeLog for PR93203 · a5f79f22
      2020-02-10  Feng Xue  <fxue@os.amperecomputing.com>
      
              PR ipa/93203
              * g++.dg/ipa/pr93203.C: New test.
              * gcc.dg/ipa/ipcp-1.c: Change dump string.
      Feng Xue committed
    • Generalized value pass-through for self-recusive function (PR ipa/93203) · a0f6a8cb
      Besides simple pass-through (aggregate) jump function, arithmetic (aggregate)
      jump function could also bring same (aggregate) value as parameter passed-in
      for self-feeding recursive call.  For example,
      
            f1 (int i)    /*  normal jump function */
               {
                  f1 (i & 1);
               }
      
      Suppose i is 0, recursive propagation via (i & 1) also gets 0, which
      can be seen as a simple pass-through of i.
      
            f2 (int *p)  /* aggregate jump function */
               {
                  int t = *p & 1;
                  f2 (&t);
               }
      Likewise, if *p is 0, (*p & 1) is also 0, and &t is an aggregate simple
      pass-through of p.
      
      2020-02-10  Feng Xue  <fxue@os.amperecomputing.com>
      
              PR ipa/93203
              * ipa-cp.c (ipcp_lattice::add_value): Add source with same call edge
              but different source value.
              (adjust_callers_for_value_intersection): New function.
              (gather_edges_for_value): Adjust order of callers to let a
              non-self-recursive caller be the first element.
              (self_recursive_pass_through_p): Add a new parameter "simple", and
              check generalized self-recursive pass-through jump function.
              (self_recursive_agg_pass_through_p): Likewise.
              (find_more_scalar_values_for_callers_subset): Compute value from
              pass-through jump function for self-recursive.
              (intersect_with_plats): Cleanup previous implementation code for value
              itersection with self-recursive call edge.
              (intersect_with_agg_replacements): Likewise.
              (intersect_aggregates_with_edge): Deduce value from pass-through jump
              function for self-recursive call edge.  Cleanup previous implementation
              code for value intersection with self-recursive call edge.
              (decide_whether_version_node): Remove dead callers and adjust order
              to let a non-self-recursive caller be the first element.
      
              PR ipa/93203
              * g++.dg/ipa/pr93203.C: New test.
      Feng Xue committed
    • Daily bump. · 04c3a1f2
      GCC Administrator committed
  2. 09 Feb, 2020 8 commits
    • Fix target selector for pr91333.c · 8686c4d8
      	* gcc.target/i386/pr91333.c (dg-do): Fix target selector.
      Uros Bizjak committed
    • Improve splitX passes management · f4777088
      The names of split_before_sched2 ("split4") and split_before_regstack
      ("split3") do not reflect their insertion point in the sequence of passes,
      where split_before_regstack follows split_before_sched2. Reorder the code
      and rename the passes to reflect the reality.
      
      split_before_regstack pass does not need to run if split_before_sched2 pass
      was already performed. Introduce enable_split_before_sched2 function to
      simplify gating functions of these two passes.
      
      There is no need for a separate rest_of_handle_split_before_sched2.
      split_all_insns can be called unconditionally from
      pass_split_before_sched2::execute, since the corresponding gating function
      determines if the pass is executed or not.
      
      	* recog.c: Move pass_split_before_sched2 code in front of
      	pass_split_before_regstack.
      	(pass_data_split_before_sched2): Rename pass to split3 from split4.
      	(pass_data_split_before_regstack): Rename pass to split4 from split3.
      	(rest_of_handle_split_before_sched2): Remove.
      	(pass_split_before_sched2::execute): Unconditionally call
      	split_all_insns.
      	(enable_split_before_sched2): New function.
      	(pass_split_before_sched2::gate): Use enable_split_before_sched2.
      	(pass_split_before_regstack::gate): Ditto.
      	* config/nds32/nds32.c (nds32_split_double_word_load_store_p):
      	Update name check for renamed split4 pass.
      	* config/sh/sh.c (register_sh_passes): Update pass insertion
      	point for renamed split4 pass.
      Uros Bizjak committed
    • libstdc++: Fix names of types in comment · 38660e87
      	* testsuite/20_util/function_objects/range.cmp/equal_to.cc: Fix
      	comment.
      	* testsuite/20_util/function_objects/range.cmp/less.ccL Likewise.
      Jonathan Wakely committed
    • libstdc++: Fix non-ASCII characters in comment · 97a7c229
      	* include/std/ranges: Fix non-ASCII characters in comment.
      Jonathan Wakely committed
    • libstdc++: Fix BUILTIN-PTR-CMP helpers · dcda050e
      The helpers that implement BUILTIN-PTR-CMP do not currently check if the
      arguments are actually comparable, so the concept is true when it
      shouldn't be.
      
      Since we're trying to test for an unambiguous conversion to pointers, we
      can also require that it returns bool, because the built-in comparisons
      for pointers do return bool.
      
      	* include/bits/range_cmp.h (__detail::__eq_builtin_ptr_cmp): Require
      	equality comparison to be valid and return bool.
      	(__detail::__less_builtin_ptr_cmp): Likewise for less-than comparison.
      	* testsuite/20_util/function_objects/range.cmp/equal_to.cc: Check
      	type with ambiguous conversion to fundamental types.
      	* testsuite/20_util/function_objects/range.cmp/less.cc: Likewise.
      Jonathan Wakely committed
    • c++: Fix ICE during constexpr virtual call evaluation [PR93633] · 81958cd6
      The first (valid) testcase ICEs because for
        A *a = new B ();
        a->foo (); // virtual method call
      we actually see &heap  and the "heap " objects don't have the class or
      whatever else type was used in new expression, but an array type containing
      one (or more of those for array new) and so when using TYPE_BINFO (objtype)
      on it we ICE.
      This patch handles this special case, and otherwise punts (as shown e.g. in
      the second testcase, where because the heap object is already deleted,
      we don't really want to allow it to be used.
      
      2020-02-09  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/93633
      	* constexpr.c (cxx_eval_constant_expression): If obj is heap var with
      	ARRAY_TYPE, use the element type.  Punt if objtype after that is not
      	a class type.
      
      	* g++.dg/cpp2a/constexpr-new11.C: New test.
      	* g++.dg/cpp2a/constexpr-new12.C: New test.
      	* g++.dg/cpp2a/constexpr-new13.C: New test.
      Jakub Jelinek committed
    • openmp: Optimize DECL_IN_CONSTANT_POOL vars in target regions · 9bc3b95d
      DECL_IN_CONSTANT_POOL are shared and thus don't really get emitted in the
      BLOCK where they are used, so for OpenMP target regions that have initializers
      gimplified into copying from them we actually map them at runtime from host to
      offload devices.  This patch instead marks them as "omp declare target", so
      that they are on the target device from the beginning and don't need to be
      copied there.
      
      2020-02-09  Jakub Jelinek  <jakub@redhat.com>
      
      	* gimplify.c (gimplify_adjust_omp_clauses_1): Promote
      	DECL_IN_CONSTANT_POOL variables into "omp declare target" to avoid
      	copying them around between host and target.
      
      	* testsuite/libgomp.c/target-38.c: New test.
      Jakub Jelinek committed
    • Daily bump. · a5691173
      GCC Administrator committed
  3. 08 Feb, 2020 5 commits
    • aarch64: fix strict alignment for vector load/stores (PR 91927) · c2a4bf2d
      Hi,
        The problem here is that the vector mode version of movmisalign<mode>
      was only conditionalized on if SIMD was enabled instead of being
      also conditionalized on STRICT_ALIGNMENT too.
      
      Applied as pre-approved in the bug report by Richard Sandiford
      after a bootstrap/test on aarch64-linux-gnu.
      
      Thanks,
      Andrew Pinski
      
      ChangeLog:
      PR target/91927
      * config/aarch64/aarch64-simd.md (movmisalign<mode>): Check
      STRICT_ALIGNMENT also.
      
      testsuite/ChangeLog:
      PR target/91927
      * gcc.target/aarch64/pr91927.c: New testcase.
      Andrew Pinski committed
    • rs6000: Fix testsuite fallout from previous fix. [PR93136] · 4b39d801
      The fix for PR target/92923 exposed some test cases with fragile
      scan-assembler-times counting.  Split the test cases into smaller
      functions, which allows less chance of optimizations causing slight
      instruction count numbers.
      
      gcc/testsuite/
      	PR target/93136
      	* gcc.dg/vmx/ops.c: Add -flax-vector-conversions to dg-options.
      	* gcc.target/powerpc/vsx-vector-6.h: Split tests into smaller functions.
      	* gcc.target/powerpc/vsx-vector-6.p7.c: Adjust scan-assembler-times
      	regex directives.  Adjust expected instruction counts.
      	* gcc.target/powerpc/vsx-vector-6.p8.c: Likewise.
      	* gcc.target/powerpc/vsx-vector-6.p9.c: Likewise.
      Peter Bergner committed
    • RISC-V: Improve caller-save code generation. · b780f68e
      Avoid paradoxical subregs when caller save.  This reduces stack frame size
      due to smaller loads and stores, and more frequent rematerialization.
      
      	PR target/93532
      	* config/riscv/riscv.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
      Jim Wilson committed
    • c++: Use constexpr to avoid wrong -Wsign-compare (PR90691). · aaa26bf4
      We would like to do constexpr evaluation to avoid false positives on
      warnings, but constexpr evaluation can involve function body copying that
      changes DECL_UID, which breaks -fcompare-debug.  So let's remember
      that we need to avoid that.
      
      	PR c++/90691
      	* expr.c (fold_for_warn): Call maybe_constant_value.
      	* constexpr.c (struct constexpr_ctx): Add uid_sensitive field.
      	(maybe_constant_value): Add uid_sensitive parm.
      	(get_fundef_copy): Don't copy if it's true.
      	(cxx_eval_call_expression): Don't instantiate if it's true.
      	(cxx_eval_outermost_constant_expr): Likewise.
      Jason Merrill committed
    • c++: Preserve location in maybe_constant_value. · 173c8def
      If cxx_eval_outermost_constant_expr doesn't change the argument, we really
      shouldn't unshare it when we try to fold it again.
      
      	PR c++/92852
      	* constexpr.c (maybe_constant_value): Don't unshare if the cached
      	value is the same as the argument.
      Jason Merrill committed