1. 08 Apr, 2020 8 commits
    • postreload: Fix autoinc handling in reload_cse_move2add [PR94516] · 70b55b25
      The following testcase shows two separate issues caused by the cselib
      changes.
      One is that through the cselib sp tracking improvements on
      ... r12 = rsp; rsp -= 8; push cst1; push cst2; push cst3; call
      rsp += 32; rsp -= 8; push cst4; push cst5; push cst6; call
      rsp += 32; rsp -= 8; push cst7; push cst8; push cst9; call
      rsp += 32
      reload_cse_simplify_set decides to optimize the rsp += 32 insns
      into rsp = r12 because cselib figures that the r12 register holds the right
      value.  From the pure cost perspective that seems like a win and on its own
      at least for -Os that would be beneficial, except that there are those
      rsp -= 8 stack adjustments after it, where rsp += 32; rsp -= 8; is optimized
      into rsp += 24; by the csa pass, but rsp = r12; rsp -= 8 can't.  Dunno
      what to do about this part, the PR has a hack in a comment.
      
      Anyway, the following patch fixes the other part, which isn't a missed
      optimization, but a wrong-code issue.  The problem is that the pushes of
      constant are on x86 represented through PRE_MODIFY and while
      move2add_note_store has some code to handle {PRE,POST}_{INC,DEC} without
      REG_INC note, it doesn't handle {PRE,POST}_MODIFY (that would be enough
      to fix this testcase).  But additionally it looks misplaced, because
      move2add_note_store is only called on the rtxes that are stored into,
      while RTX_AUTOINC can happen not just in those, but anywhere else in the
      instruction (e.g. pop insn can have autoinc in the SET_SRC MEM).
      REG_INC note seems to be required for any autoinc except for stack pointer
      autoinc which doesn't have those notes, so this patch just handles
      the sp autoinc after the REG_INC note handling loop.
      
      2020-04-08  Jakub Jelinek  <jakub@redhat.com>
      
      	PR rtl-optimization/94516
      	* postreload.c: Include rtl-iter.h.
      	(reload_cse_move2add): Handle SP autoinc here by FOR_EACH_SUBRTX_VAR
      	looking for all MEMs with RTX_AUTOINC operand.
      	(move2add_note_store): Remove {PRE,POST}_{INC,DEC} handling.
      
      	* gcc.dg/torture/pr94516.c: New test.
      Jakub Jelinek committed
    • HSA: omp-grid.c – access proper clause code · 4ed1ff7e
              * omp-grid.c (grid_eliminate_combined_simd_part): Use
              OMP_CLAUSE_CODE to access the omp clause code.
      Tobias Burnus committed
    • Undo accidental commit to omp-grid.c · 54cb3baa
      The following change accidentally got committed in the previous
      commit, r10-7614-g13e41d8b,
      among the intended changes. Hence:
      
      Revert:
      	gcc/
      	* omp-grid.c (grid_eliminate_combined_simd_part): Use
      	OMP_CLAUSE_CODE to access the omp clause code.
      Tobias Burnus committed
    • [C/C++, OpenACC] Reject vars of different scope in acc declare (PR94120) · 13e41d8b
      	gcc/c/
      	PR middle-end/94120
      	* c-decl.c (c_check_in_current_scope): New function.
      	* c-tree.h (c_check_in_current_scope): Declare it.
      	* c-parser.c (c_parser_oacc_declare): Add check that variables
      	are declared in the same scope as the directive. Fix handling
      	of namespace vars.
      
      	gcc/cp/
      	PR middle-end/94120
      	* paser.c (cp_parser_oacc_declare): Add check that variables
      	are declared in the same scope as the directive.
      
      	gcc/testsuite/
      	PR middle-end/94120
      	* c-c++-common/goacc/declare-pr94120.c: New.
      	* g++.dg/declare-pr94120.C: New.
      
      	libgomp/testsuite/
      	PR middle-end/94120
      	* libgomp.oacc-c++/declare-pr94120.C: New.
      Tobias Burnus committed
    • libphobos: Always build with warning flags enabled · 38c3017f
      This moves WARN_DFLAGS from GDCFLAGS to AM_DFLAGS so it is always
      included in the build and testsuite of libphobos.  Currently, this
      doesn't happen as GDCFLAGS is overriden by it being set at the
      top-level.
      
      libphobos/ChangeLog:
      
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Substite WARN_DFLAGS independently of GDCFLAGS.
      	* libdruntime/Makefile.am: Add WARN_DFLAGS to AM_DFLAGS.
      	* libdruntime/Makefile.in: Regenerate.
      	* src/Makefile.am: Add WARN_DFLAGS to AM_DFLAGS.
      	* src/Makefile.in: Regenerate.
      	* testsuite/Makefile.in: Regenerate.
      	* testsuite/testsuite_flags.in: Add WARN_DFLAGS to --gdcflags.
      Iain Buclaw committed
    • c++: requires-expression and tentative parse [PR94480] · 845d451e
      The problem here was that cp_parser_requires_expression committing to a
      tentative parse confused cp_parser_decltype_expr, which needs to still be
      tentative.  The only reason to commit here is to get syntax errors within
      the requires-expression, which we can still do when the commit is firewalled
      from the enclosing context.
      
      gcc/cp/ChangeLog
      2020-04-07  Jason Merrill  <jason@redhat.com>
      
      	PR c++/94480
      	* parser.c (cp_parser_requires_expression): Use tentative_firewall.
      Jason Merrill committed
    • libphobos: Merge upstream phobos fb4f6a713 · f1a6150e
      Improves the versioning of IeeeFlags and FloatingPointControl code and
      unit-tests, making it clearer which targets can and cannot support it.
      
      Reviewed-on: https://github.com/dlang/phobos/pull/7435
      Iain Buclaw committed
    • Daily bump. · 7e5367f3
      GCC Administrator committed
  2. 07 Apr, 2020 31 commits
    • Fix a variety of testsuite failures on the H8 after recent cselib changes · 14162197
      	PR rtl-optimization/92264
      	* config/h8300/h8300.md (mov;add peephole2): Avoid applying when
      	the destination is the stack pointer.
      Jeff Law committed
    • c++: ICE on invalid concept placeholder [PR94481]. · 31449cf8
      Here the 'decltype' is missing '(auto)', so open_paren was NULL, and trying
      to get its location is a SEGV.  Using matching_parens avoids that problem.
      
      gcc/cp/ChangeLog
      2020-04-07  Jason Merrill  <jason@redhat.com>
      
      	PR c++/94481
      	* parser.c (cp_parser_placeholder_type_specifier): Use
      	matching_parens.
      Jason Merrill committed
    • combine: Fix split_i2i3 ICE [PR94291] · c23c899a
      The following testcase ICEs on armv7hl-linux-gnueabi.
      try_combine is called on:
      (gdb) p debug_rtx (i3)
      (insn 20 12 22 2 (set (mem/c:SI (plus:SI (reg/f:SI 102 sfp)
                      (const_int -4 [0xfffffffffffffffc])) [1 x+0 S4 A32])
              (reg:SI 125)) "pr94291.c":7:8 241 {*arm_movsi_insn}
           (expr_list:REG_DEAD (reg:SI 125)
              (nil)))
      (gdb) p debug_rtx (i2)
      (insn 12 7 20 2 (parallel [
                  (set (reg:CC 100 cc)
                      (compare:CC (reg:SI 121 [ <retval> ])
                          (const_int 0 [0])))
                  (set (reg:SI 125)
                      (reg:SI 121 [ <retval> ]))
              ]) "pr94291.c":7:8 248 {*movsi_compare0}
           (expr_list:REG_UNUSED (reg:CC 100 cc)
              (nil)))
      and tries to recognize cc = r121 cmp 0; [sfp-4] = r121 parallel,
      but that isn't recognized, so it splits it into two: split_i2i3
      [sfp-4] = r121 followed by cc = r121 cmp 0 which is recognized, but
      ICEs because the code below insist that the SET_DEST of newi2pat
      (or first set in PARALLEL thereof) must be a REG or SUBREG of REG,
      but it is a MEM in this case.  I don't see any condition that would
      guarantee that, perhaps for the swap_i2i3 case it was somehow guaranteed.
      
      As the code just wants to update LOG_LINKS and LOG_LINKS are only for
      registers, not for MEM or anything else, the patch just doesn't update those
      if it isn't a REG or SUBREG of REG.
      
      2020-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR rtl-optimization/94291
      	PR rtl-optimization/84169
      	* combine.c (try_combine): For split_i2i3, don't assume SET_DEST
      	must be a REG or SUBREG of REG; if it is not one of these, don't
      	update LOG_LINKs.
      
      	* gcc.dg/pr94291.c: New test.
      Jakub Jelinek committed
    • S/390: Fix PR91628 · 88e508f9
      With this patch we get rid of the usage of the glibc-internal symbol
      __tls_get_addr_internal.
      
      If build with multilib, the file
      gcc/libphobos/libdruntime/config/systemz/get_tls_offset.S is used
      for both configurations: systemz and s390.
      Therefore both implementations are now in the systemz file which
      uses an "#ifdef __s390x__" in order to distinguish both cases.
      The s390 file is just including the systemz one.
      
      libphobos/ChangeLog:
      
      2020-04-07  Robin Dapp  <rdapp@linux.ibm.com>
                  Stefan Liebler  <stli@linux.ibm.com>
      
      	* configure: Regenerate.
      	* libdruntime/Makefile.am: Add s390x and s390.
      	* libdruntime/Makefile.in: Regenerate.
      	* libdruntime/config/s390/get_tls_offset.S: New file.
      	* libdruntime/config/systemz/get_tls_offset.S: New file.
      	* libdruntime/gcc/sections/elf_shared.d: Use ibmz_get_tls_offset.
      	* m4/druntime/cpu.m4: Add s390x and s390.
      Robin Dapp committed
    • libgcc: use syscall rather than __mmap/__munmap · 50c78532
      	PR libgcc/94513
      	* generic-morestack.c: Give up trying to use __mmap/__munmap, use
      	syscall instead.
      Ian Lance Taylor committed
    • middle-end/94479 - fix gimplification of address · 3d947f1f
      When gimplifying an address operand we may expose an indirect
      ref via DECL_VALUE_EXPR for example.  This is dealt with in the
      code already but it fails to consider that INDIRECT_REFs get
      gimplified to MEM_REFs.
      
      Fixed which makes the ICE observed on x86_64-netbsd go away.
      
      2020-04-07  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/94479
      	* gimplify.c (gimplify_addr_expr): Also consider generated
      	MEM_REFs.
      
      	* gcc.dg/torture/pr94479.c: New testcase.
      Richard Biener committed
    • Fix PR fortran/93871 and re-implement degree-valued trigonometric intrinsics. · 57391dda
      2020-04-01  Fritz Reese  <foreese@gcc.gnu.org>
      	    Steven G. Kargl  <kargl@gcc.gnu.org>
      
      gcc/fortran/ChangeLog
      
      	PR fortran/93871
      	* gfortran.h (GFC_ISYM_ACOSD, GFC_ISYM_ASIND, GFC_ISYM_ATAN2D,
      	GFC_ISYM_ATAND, GFC_ISYM_COSD, GFC_ISYM_COTAND, GFC_ISYM_SIND,
      	GFC_ISYM_TAND): New.
      	* intrinsic.c (add_functions): Remove check for flag_dec_math.
      	Give degree trig functions simplification and name resolution
      	functions (e.g, gfc_simplify_atrigd () and gfc_resolve_atrigd ()).
      	(do_simplify): Remove special casing of degree trig functions.
      	* intrinsic.h (gfc_simplify_acosd, gfc_simplify_asind,
      	gfc_simplify_atand, gfc_simplify_cosd, gfc_simplify_cotand,
      	gfc_simplify_sind, gfc_simplify_tand, gfc_resolve_trigd2): Add new
      	prototypes.
      	(gfc_simplify_atrigd, gfc_simplify_trigd, gfc_resolve_cotan,
      	resolve_atrigd): Remove prototypes of deleted functions.
      	* iresolve.c (is_trig_resolved, copy_replace_function_shallow,
      	gfc_resolve_cotan, get_radians, get_degrees, resolve_trig_call,
      	gfc_resolve_atrigd, gfc_resolve_atan2d): Delete functions.
      	(gfc_resolve_trigd, gfc_resolve_trigd2): Resolve to library functions.
      	* simplify.c (rad2deg, deg2rad, gfc_simplify_acosd, gfc_simplify_asind,
      	gfc_simplify_atand, gfc_simplify_atan2d, gfc_simplify_cosd,
      	gfc_simplify_sind, gfc_simplify_tand, gfc_simplify_cotand): New
      	functions.
      	(gfc_simplify_atan2): Fix error message.
      	(simplify_trig_call, gfc_simplify_trigd, gfc_simplify_atrigd,
      	radians_f): Delete functions.
      	* trans-intrinsic.c: Add LIB_FUNCTION decls for sind, cosd, tand.
      	(rad2deg, gfc_conv_intrinsic_atrigd, gfc_conv_intrinsic_cotan,
      	gfc_conv_intrinsic_cotand, gfc_conv_intrinsic_atan2d): New functions.
      	(gfc_conv_intrinsic_function): Handle ACOSD, ASIND, ATAND, COTAN,
      	COTAND, ATAN2D.
      	* trigd_fe.inc: New file. Included by simplify.c to implement
      	simplify_sind, simplify_cosd, simplify_tand with code common to the
      	libgfortran implementation.
      
      gcc/testsuite/ChangeLog
      
      	PR fortran/93871
      	* gfortran.dg/dec_math.f90: Extend coverage to real(10) and real(16).
      	* gfortran.dg/dec_math_2.f90: New test.
      	* gfortran.dg/dec_math_3.f90: Likewise.
      	* gfortran.dg/dec_math_4.f90: Likewise.
      	* gfortran.dg/dec_math_5.f90: Likewise.
      
      libgfortran/ChangeLog
      
      	PR fortran/93871
      	* Makefile.am, Makefile.in: New make rule for intrinsics/trigd.c.
      	* gfortran.map: New routines for {sind, cosd, tand}X{r4, r8, r10, r16}.
      	* intrinsics/trigd.c, intrinsics/trigd_lib.inc, intrinsics/trigd.inc:
      	New files. Defines native degree-valued trig functions.
      Fritz Reese committed
    • aarch64: Fix {ash[lr],lshr}<mode>3 expanders [PR94488] · 2daa92ac
      The following testcase ICEs on aarch64 apparently since the introduction of
      the aarch64 port.  The reason is that the {ashl,ashr,lshr}<mode>3 expanders
      completely unnecessarily FAIL; if operands[2] is something other than
      a CONST_INT or REG or MEM and the middle-end code can't cope with the
      pattern giving up in these cases.  All the expanders use general_operand
      predicate for the shift amount operand, but then have just a special case
      for CONST_INT (if in-bound, emit an immediate shift, otherwise force into
      REG), or MEM (force into REG), or REG (that is the case it handles).
      In the testcase, operands[2] is a lowpart SUBREG of a REG, which is valid
      general_operand.
      I don't see any reason what is magic about MEMs that it should be forced
      into REG and others like SUBREGs that it shouldn't, there isn't even a
      reason to check for !REG_P because force_reg will do nothing if the operand
      is already a REG, and otherwise can handle general_operand just fine.
      
      2020-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94488
      	* config/aarch64/aarch64-simd.md (ashl<mode>3, lshr<mode>3,
      	ashr<mode>3): Force operands[2] into reg whenever it is not CONST_INT.
      	Assume it is a REG after that instead of testing it and doing FAIL
      	otherwise.  Formatting fix.
      
      	* gcc.c-torture/compile/pr94488.c: New test.
      Jakub Jelinek committed
    • libstdc++: Restore ability to use <charconv> in C++14 (PR 94520) · c104e8f1
      This C++17 header is supported in C++14 as a GNU extension, but stopped
      working last year because I made it depend on an internal helper which
      is only defined for C++17 and up.
      
      	PR libstdc++/94520
      	* include/std/charconv (__integer_to_chars_result_type)
      	(__integer_from_chars_result_type): Use __or_ instead of __or_v_ to
      	allow use in C++14.
      	* testsuite/20_util/from_chars/1.cc: Run test as C++14 and replace
      	use of std::string_view with std::string.
      	* testsuite/20_util/from_chars/2.cc: Likewise.
      	* testsuite/20_util/to_chars/1.cc: Likewise.
      	* testsuite/20_util/to_chars/2.cc: Likewise.
      Jonathan Wakely committed
    • coroutines, ensure placeholder var is properly declared. · 89b01e86
      In cases that we need to extended the lifetime of a temporary captured
      by reference, we make a replacement var for the temporary.  This will
      be then used to define a coroutine frame entry (so that the var created
      is elided by a later phase).  However, we should ensure that the var
      is correctly declared anyway.
      
      gcc/cp/ChangeLog:
      
      2020-04-07  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* coroutines.cc (maybe_promote_captured_temps): Ensure that
      	reference capture placeholder vars are properly declared.
      Iain Sandoe committed
    • arm: MVE: Add C++ polymorphism and fix some more issues · 6a90680b
      This patch adds C++ polymorphism for the MVE intrinsics, by using the native C++
      polymorphic functions when C++ is used.
      
      It also moves the PRESERVE name macro definitions to the right place so that the
      variants without the '__arm_' prefix are not available if we define the PRESERVE
      NAMESPACE macro.
      
      This patch further fixes two testisms that were brought to light by C++ testing
      added in this patch.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm_mve.h: Add C++ polymorphism and fix preserve MACROs.
      
      gcc/testsuite/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* g++.target/arm/mve.exp: New.
      	* gcc.target/arm/mve/intrinsics/vcmpneq_n_f16: Fix testism.
      	* gcc.target/arm/mve/intrinsics/vcmpneq_n_f32: Likewise.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Fixes for pointers used in intrinsics for c++ · ff0597dc
      This patch fixes the passing of some pointers to builtins that expect slightly
      different types of pointers.  In C this didn't prove an issue, but when
      compiling for C++ gcc complains.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm_mve.h: Cast some pointers to expected types.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Fix -Wall testisms · f6d7098d
      This patch fixes some testisms I found when testing using -Wall/-Werror.
      
      gcc/testsuite/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* gcc.target/arm/mve/intrinsics/vuninitializedq_float.c: Fix testism.
      	* gcc.target/arm/mve/intrinsics/vuninitializedq_float1.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vuninitializedq_int.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vuninitializedq_int1.c: Likewise.
      Andre Simoes Dias Vieira committed
    • arm: MVE: make sure we only use the Arm namespace variant of vuninitializedq · c431634b
      This patch replaces all uses of 'vuninitializedq_*' by the same function but
      under the __arm_ namespace. In case we define the PRESERVE MACRO the variant
      without the '__arm_' prefix will not be available.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm_mve.h: Replace all uses of vuninitializedq_* with the
      	same with '__arm_' prefix.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Fix vec extracts to memory · 302b6836
      This patch fixes vec extracts to memory that can arise from code as seen in the
      testcase added. The patch fixes this by allowing mem operands in the set of
      mve_vec_extract patterns, which given the only '=r' constraint will lead to the
      scalar value being written to a register and then stored in memory using scalar
      store pattern.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/mve.md (mve_vec_extract*): Allow memory operands in set.
      
      gcc/testsuite/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* gcc.target/arm/mve/intrinsics/mve_vec_extracts_from_memory.c: New
      	test.
      Andre Simoes Dias Vieira committed
    • arm: MVE Fix immediate constraints on some vector instructions · d2ce75fe
      Hi,
      
      This patch fixes the immediate checks on vcvt and vqshr(u)n[bt] instructions.
      It also removes the 'arm_mve_immediate_check' as the check was wrong and the
      error message is not much better than the constraint one, which albeit isn't
      great either.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm.c (arm_mve_immediate_check): Removed.
      	* config/arm/mve.md (MVE_pred2, MVE_constraint2): Added FP types.
      	(mve_vcvtq_n_to_f_*, mve_vcvtq_n_from_f_*, mve_vqshrnbq_n_*,
      	 mve_vqshrntq_n_*, mve_vqshrunbq_n_s*, mve_vqshruntq_n_s*,
      	 mve_vcvtq_m_n_from_f_*, mve_vcvtq_m_n_to_f_*, mve_vqshrnbq_m_n_*,
      	 mve_vqrshruntq_m_n_s*, mve_vqshrunbq_m_n_s*,
      	 mve_vqshruntq_m_n_s*): Fixed immediate constraints.
      
      gcc/testsuite/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* gcc.target/arm/mve/intrinsics/mve_immediates_1_n.c: New test.
      Andre Simoes Dias Vieira committed
    • arm: MVE Don't use lsll for 32-bit shifts scalar · 094bc16b
      After fixing the v[id]wdups using the "moving the wrap parameter" into the
      top-end of a DImode operand using a shift, I noticed we were using lsll for
      32-bit shifts in scalars, where we don't need to, as we can simply do a move,
        which is much better if we don't need to use the bottom part.
      
      We can solve this in a better way, but for now this will do.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm.d (ashldi3): Don't use lsll for constant 32-bit shifts.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Fix v[id]wdup's · 9ce780ef
      This patch fixes v[id]wdup intrinsics. They had two issues:
      1) the predicated versions did not link the incoming inactive vector parameter
      to the output
      2) The backend didn't enforce the wrap limit operand be in an odd register.
      
      1) was fixed like we did for all other predicated intrinsics
      2) requires a temporary hack where we pass the value in the top end of DImode
      operand. The proper fix would be to add a register CLASS but this interacted
      badly with other existing targets codegen.  We will look to fix this properly in GCC 11.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm_mve.h: Fix v[id]wdup intrinsics.
      	* config/arm/mve/md: Fix v[id]wdup patterns.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Fix constant load pattern · b094133c
      This patch fixes the constant load pattern for MVE, this was not accounting
      correctly for label + offset cases.
      
      Added test that ICE'd before and removed the scan assemblers for the mve_vector*
      tests as they were too fragile.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm.c (output_move_neon): Deal with label + offset cases.
      	* config/arm/mve.md (*mve_mov<mode>): Handle const vectors.
      
      gcc/testsuite/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* gcc.target/arm/mve/intrinsics/mve_load_from_array.c: New test.
      	* gcc.target/arm/mve/intrinsics/mve_vector_float.c: Remove
      	scan-assembler.
      	* gcc.target/arm/mve/intrinsics/mve_vector_float1.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vector_int1.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vector_int2.c: Likewise.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Do not use typeof for pointer parameters · 3ce755a8
      To make sure our inlining of _Generic doesn't go crazy we added an in between
      declaration of the parameters used for _Generic selection. However, this will
      not work if the parameter being passed in is an array.  Since none of our
      intrinsics return pointers we do not need to use typeof here as we will never be
      able to nest intrinsics through this parameter. I also removed the unnecessary
      const pointers in mve_typeid.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm_mve.h: Remove use of typeof for addr pointer parameters
      	and remove const_ptr enums.
      Andre Simoes Dias Vieira committed
    • arm: MVE: Fix polymorphism for scalars and constants · 0f3cc1b3
      This patch merges some polymorphic functions that were uncorrectly separating
      scalar variants. It also simplifies the way we detect scalars and constants in
      mve_typeid.
      
      I also fixed some polymorphic intrinsics that were splitting of scalar cases.
      
      gcc/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/arm/arm_mve.h (vsubq_n): Merge with...
      	(vsubq): ... this.
      	(vmulq_n): Merge with...
      	(vmulq): ... this.
      	(__ARM_mve_typeid): Simplify scalar and constant detection.
      
      gcc/testsuite/ChangeLog:
      2020-04-07  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* gcc.target/arm/mve/intrinsics/vmulq_n_f16.c: Fix test.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_f32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_s16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_s32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_s8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/vmulq_n_u8.c: Likewise.
      Andre Simoes Dias Vieira committed
    • S/390: Fix layout of struct sigaction_t · 434fe1a4
      The ordering of some fields in  struct sigaction on s390x (64bit)
      differs compared to s390 and other architectures.
      This patch adjusts this order according to the definition of
      <glibc-src>/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
      
      Without this fix e.g. the call
      sigaction( suspendSignalNumber, &sigusr1, null ) in thread.d
      leads to setting the sa_restorer field to 0xffffffffffffffff.
      In case a signal, the signal handler returns to this address
      and the process stops with a SIGILL.
      
      This was observable in several execution testcases on s390x:
      libphobos.druntime/core/thread.d
      libphobos.druntime_shared/core/thread.d
      libphobos.thread/tlsgc_sections.d
      libphobos.allocations/tls_gc_integration.d
      libphobos.phobos/std/parallelism.d
      libphobos.phobos_shared/std/parallelism.d
      libphobos.shared/host.c
      libphobos.shared/linkD.c
      libphobos.shared/linkDR.c
      libphobos.shared/link_linkdep.d
      libphobos.shared/load.d
      libphobos.shared/loadDR.c
      libphobos.shared/load_linkdep.d
      libphobos.shared/load_loaddep.d
      
      libphobos/ChangeLog:
      
      2020-04-07  Stefan Liebler  <stli@linux.ibm.com>
      
      	* libdruntime/core/sys/posix/signal.d:
      	Add struct sigaction_t for SystemZ.
      Stefan Liebler committed
    • c++: Fix usage of CONSTRUCTOR_PLACEHOLDER_BOUNDARY inside array initializers [PR90996] · 23f1f679
      This PR reports that ever since the introduction of the
      CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag, we are sometimes failing to resolve
      PLACEHOLDER_EXPRs inside array initializers that refer to some inner
      constructor.  In the testcase in the PR, we have as the initializer for "S c[];"
      the following
      
        {{.a=(int &) &_ZGR1c_, .b={*(&<PLACEHOLDER_EXPR struct S>)->a}}}
      
      where CONSTRUCTOR_PLACEHOLDER_BOUNDARY is set on the middle constructor.  When
      calling replace_placeholders from store_init_value, we pass the entire
      initializer to it, and as a result we fail to resolve the PLACEHOLDER_EXPR
      within due to the CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag on the middle
      constructor blocking replace_placeholders_r from reaching it.
      
      To fix this, we could perhaps either call replace_placeholders in more places,
      or we could change where we set CONSTRUCTOR_PLACEHOLDER_BOUNDARY.  This patch
      takes this latter approach -- when building up an array initializer, we now
      bubble any CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag from the element initializers
      up to the array initializer so that the boundary doesn't later impede us when we
      call replace_placeholders from store_init_value.
      
      Besides fixing the kind of code like in the testcase, this shouldn't cause any
      other differences in PLACEHOLDER_EXPR resolution because we don't create or use
      PLACEHOLDER_EXPRs of array type in the frontend, as far as I can tell.
      
      gcc/cp/ChangeLog:
      
      	PR c++/90996
      	* tree.c (replace_placeholders): Look through all handled components,
      	not just COMPONENT_REFs.
      	* typeck2.c (process_init_constructor_array): Propagate
      	CONSTRUCTOR_PLACEHOLDER_BOUNDARY up from each element initializer to
      	the array initializer.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/90996
      	* g++.dg/cpp1y/pr90996.C: New test.
      Patrick Palka committed
    • i386: Fix V{64QI,32HI}mode constant permutations [PR94509] · d51af82b
      The following testcases are miscompiled, because expand_vec_perm_pshufb
      incorrectly thinks it can use vpshufb instruction for the permutations
      when it can't.
      The
                if (vmode == V32QImode)
                  {
                    /* vpshufb only works intra lanes, it is not
                       possible to shuffle bytes in between the lanes.  */
                    for (i = 0; i < nelt; ++i)
                      if ((d->perm[i] ^ i) & (nelt / 2))
                        return false;
                  }
      intra-lane check which is correct has been copied and adjusted for 64-byte
      modes into:
                if (vmode == V64QImode)
                  {
                    /* vpshufb only works intra lanes, it is not
                       possible to shuffle bytes in between the lanes.  */
                    for (i = 0; i < nelt; ++i)
                      if ((d->perm[i] ^ i) & (nelt / 4))
                        return false;
                  }
      which is not correct, because 64-byte modes have 4 lanes rather than just
      two and the above is only testing that the permutation grabs even lane elts
      from even lanes and odd lane elts from odd lanes, but not that they are
      from the same 256-bit half.
      
      The following patch fixes it by using 3 * nelt / 4 instead of nelt / 4,
      so we actually check the most significant 2 bits rather than just one.
      
      2020-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94509
      	* config/i386/i386-expand.c (expand_vec_perm_pshufb): Fix the check
      	for inter-lane permutation for 64-byte modes.
      
      	* gcc.target/i386/avx512bw-pr94509-1.c: New test.
      	* gcc.target/i386/avx512bw-pr94509-2.c: New test.
      Jakub Jelinek committed
    • openmp: Fix parallel master error recovery [PR94512] · 4df50a05
      We need to set OMP_PARALLEL_COMBINED only if the parsing of omp_master
      succeeded, because otherwise there is no nested master construct in the
      parallel.
      
      2020-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/94512
      	* c-parser.c (c_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
      	if c_parser_omp_master succeeded.
      
      	* parser.c (cp_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
      	if cp_parser_omp_master succeeded.
      
      	* g++.dg/gomp/pr94512.C: New test.
      Jakub Jelinek committed
    • aarch64: Fix {ash[lr],lshr}<mode>3 expanders [PR94488] · 7a6588fe
      The following testcase ICEs on aarch64 apparently since the introduction of
      the aarch64 port.  The reason is that the {ashl,ashr,lshr}<mode>3 expanders
      completely unnecessarily FAIL; if operands[2] is something other than
      a CONST_INT or REG or MEM and the middle-end code can't cope with the
      pattern giving up in these cases.  All the expanders use general_operand
      predicate for the shift amount operand, but then have just a special case
      for CONST_INT (if in-bound, emit an immediate shift, otherwise force into
      REG), or MEM (force into REG), or REG (that is the case it handles).
      In the testcase, operands[2] is a lowpart SUBREG of a REG, which is valid
      general_operand.
      I don't see any reason what is magic about MEMs that it should be forced
      into REG and others like SUBREGs that it shouldn't, there isn't even a
      reason to check for !REG_P because force_reg will do nothing if the operand
      is already a REG, and otherwise can handle general_operand just fine.
      
      2020-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94488
      	* config/aarch64/aarch64-simd.md (ashl<mode>3, lshr<mode>3,
      	ashr<mode>3): Force operands[2] into reg whenever it is not CONST_INT.
      	Assume it is a REG after that instead of testing it and doing FAIL
      	otherwise.  Formatting fix.
      
      	* gcc.c-torture/compile/pr94488.c: New test.
      Jakub Jelinek committed
    • d: Always set ASM_VOLATILE_P on asm statements (PR94425) · 30d26118
      gcc/d/ChangeLog:
      
      	PR d/94425
      	* toir.cc (IRVisitor::visit (GccAsmStatement *)): Set ASM_VOLATILE_P
      	on all asm statements.
      Iain Buclaw committed
    • RTEMS: Delete useless mcpu=8540 multilib · 42867b87
      The support for the 32-bit float GPRs was removed in GCC 8.
      
      gcc/
      
      	* config/rs6000/t-rtems: Delete mcpu=8540 multilib.
      Sebastian Huber committed
    • i386: Fix emit_reduc_half on V{64Q,32H}Imode [PR94500] · bee27152
      The following testcase is miscompiled in 8.x, because emit_reduc_half is
      prepared to handle for 512-bit modes only i equal to 512, 256, 128 and 64.
      V32HImode also needs i equal to 32 and V64QImode i equal to 32 and 16,
      but emit_reduc_half in that case performs a redundant permutation exactly
      like i == 32.  In 9+ the testcase works because Richard in r9-3393
      changed the reduc_* expanders so that they actually don't call
      ix86_expand_reduc on 512-bit modes, but only 128-bit ones.
      
      The patch fixes emit_reduc_half to handle also i of 32 and 16 similarly to
      how V32QImode/V16HImode are handled for AVX2.  I think it shouldn't hurt
      to fix the function even on the trunk and 9 branch even when nothing uses
      it ATM.
      
      2020-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94500
      	* config/i386/i386-expand.c (emit_reduc_half): For V{64QI,32HI}mode
      	handle i < 64 using avx512bw_lshrv4ti3.  Formatting fixes.
      
      	* gcc.target/i386/avx512bw-pr94500.c: New test.
      Jakub Jelinek committed
    • c++: Fix ICE with implicit operator== [PR94462] · 467fc7c8
      duplicate_decls assumed that any TREE_ARTIFICIAL function at namespace scope
      was a built-in function, but now in C++20 it's possible to have an
      implicitly declared hidden friend operator==.  We just need to move the
      assert into the if condition.
      
      gcc/cp/ChangeLog
      2020-04-06  Jason Merrill  <jason@redhat.com>
      
      	PR c++/94462
      	* decl.c (duplicate_decls): Fix handling of DECL_HIDDEN_FRIEND_P.
      Jason Merrill committed
    • Daily bump. · 93a49d2d
      GCC Administrator committed
  3. 06 Apr, 2020 1 commit