Skip to content
Snippets Groups Projects
  1. Feb 14, 2022
    • Richard Biener's avatar
      middle-end/104497 - gimplification of vector indexing · 3f10e0d5
      Richard Biener authored
      The following attempts to address gimplification of
      
         ... = VIEW_CONVERT_EXPR<int[4]>((i & 1) != 0 ? inv : src)[i];
      
      which is problematic since gimplifying the base object
      ? inv : src produces a register temporary but GIMPLE does not
      really support a register as a base for an ARRAY_REF (even
      though that's not strictly validated it seems as can be seen
      at -O0).  Interestingly the C++ frontend avoids this issue
      by emitting the following GENERIC instead:
      
         ... = (i & 1) != 0 ? VIEW_CONVERT_EXPR<int[4]>(inv)[i] : VIEW_CONVERT_EXPR<int[4]>(src)[i];
      
      The proposed patch below fixes things up when using an rvalue
      as the base is OK by emitting a copy from a register base to a
      non-register one.  The ?: as lvalue extension seems to be gone
      for C, C++ again unwraps the COND_EXPR in that case.
      
      2022-02-11  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/104497
      	* gimplify.cc (gimplify_compound_lval): Make sure the
      	base is a non-register if needed and possible.
      
      	* c-c++-common/torture/pr104497.c: New testcase.
      3f10e0d5
    • GCC Administrator's avatar
      Daily bump. · 0d31c8ec
      GCC Administrator authored
      0d31c8ec
  2. Feb 13, 2022
    • Maciej W. Rozycki's avatar
      [Ada] PR ada/98724: Alpha/Linux/libada: Use wraplf for Aux_Long_Long_Float · 4493c5a2
      Maciej W. Rozycki authored
      Use the Long Long Float wrapper in terms of Long Float for Alpha/Linux
      targets as well, fixing gnatlib compilation errors:
      
      a-nallfl.ads:48:13: warning: intrinsic binding type mismatch on result [enabledby default]
      a-nallfl.ads:48:13: warning: intrinsic binding type mismatch on parameter 1 [enabled by default]
      a-nallfl.ads:48:13: warning: profile of "Sin" doesn't match the builtin it binds [enabled by default]
      
      etc. with the `alpha-linux-gnu' target.
      
      	gcc/ada/
      	PR ada/98724
      	PR ada/97504
      	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <alpha*-*-linux*>: Use
      	wraplf version of Aux_Long_Long_Float.
      4493c5a2
    • Ian Lance Taylor's avatar
      runtime: call timer functions via syscall · 58aeb75d
      Ian Lance Taylor authored
      It turns out to be painful to require linking against -lrt on
      GNU/Linux, as that makes it harder to link Go code into C programs.
      Instead just call the timer syscalls directly.  That is what the
      upstream library does anyhow.
      
      gcc/go/
      	* gospec.cc: Revert 2022-02-09 change:
      	(RTLIB, RT_LIBRARY): Don't define.
      	(lang_specific_driver): Don't add -lrt if linking statically
      	on GNU/Linux.
      
      gotools/
      	* configure.ac: Revert 2022-02-09 change:
      	(RT_LIBS): Don't define.
      	* Makefile.am (check-runtime): Don't set GOLIBS to $(RT_LIBS).
      	* configure, Makefile.in: Regenerate.
      
      Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/385475
      58aeb75d
    • Ian Lance Taylor's avatar
    • Mikael Morin's avatar
      fortran: Unshare associate var charlen [PR104228] · 57da3493
      Mikael Morin authored
      PR104228 showed that character lengths were shared between associate
      variable and associate targets.  This is problematic when the associate
      target is itself a variable and gets a variable to hold the length, as
      the length variable is added (and all the variables following it in the chain)
      to both the associate variable scope and the target variable scope.
      This caused an ICE when compiling with -O0 -fsanitize=address.
      
      This change forces the creation of a separate character length for the
      associate variable.  It also forces the initialization of the character
      length variable to avoid regressing associate_32 and associate_47 tests.
      
      	PR fortran/104228
      
      gcc/fortran/ChangeLog:
      
      	* resolve.cc (resolve_assoc_var): Also create a new character
      	length for non-dummy associate targets.
      	* trans-stmt.cc (trans_associate_var): Initialize character length
      	even if no temporary is used for the associate variable.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/asan/associate_58.f90: New test.
      	* gfortran.dg/asan/associate_59.f90: New test.
      57da3493
    • liuhongt's avatar
      Add vect_recog_cond_expr_convert_pattern. · 7e204bd2
      liuhongt authored
      The pattern converts (cond (cmp a b) (convert c) (convert d))
      to (convert (cond (cmp a b) c d)) when
      1) types_match (c, d)
      2) single_use for (convert c) and (convert d)
      3) TYPE_PRECISION (TREE_TYPE (c)) == TYPE_PRECISION (TREE_TYPE (a))
      4) INTEGERAL_TYPE_P (TREE_TYPE (c))
      
      The pattern can save packing of mask and data(partial for data, 2 vs
      1).
      
      gcc/ChangeLog:
      
      	PR target/103771
      	* match.pd (cond_expr_convert_p): New match.
      	* tree-vect-patterns.cc (gimple_cond_expr_convert_p): Declare.
      	(vect_recog_cond_expr_convert_pattern): New.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/i386/pr103771-2.c: New test.
      	* gcc.target/i386/pr103771-3.c: New test.
      7e204bd2
    • GCC Administrator's avatar
      Daily bump. · 23756b70
      GCC Administrator authored
      23756b70
  3. Feb 12, 2022
    • Jakub Jelinek's avatar
      asan: Fix up address sanitizer instrumentation of __builtin_alloca* if it can throw [PR104449] · f0c7367b
      Jakub Jelinek authored
      With -fstack-check* __builtin_alloca* can throw and the asan
      instrumentation of this builtin wasn't prepared for that case.
      The following patch fixes that by replacing the builtin with the
      replacement builtin and emitting any further insns on the fallthru
      edge.
      
      I haven't touched the hwasan code which most likely suffers from the
      same problem.
      
      2022-02-12  Jakub Jelinek  <jakub@redhat.com>
      
      	PR sanitizer/104449
      	* asan.cc: Include tree-eh.h.
      	(handle_builtin_alloca): Handle the case when __builtin_alloca or
      	__builtin_alloca_with_align can throw.
      
      	* gcc.dg/asan/pr104449.c: New test.
      	* g++.dg/asan/pr104449.C: New test.
      f0c7367b
    • H.J. Lu's avatar
      x86: Update PR 35513 tests · 5c4258d7
      H.J. Lu authored
      1. Require linker with GNU_PROPERTY_1_NEEDED support for PR 35513
      run-time tests.
      2. Compile pr35513-8.c to scan assembly code.
      
      	PR testsuite/104481
      	* g++.target/i386/pr35513-1.C: Require property_1_needed target.
      	* g++.target/i386/pr35513-2.C: Likewise.
      	* gcc.target/i386/pr35513-8.c: Change to compile.
      	* lib/target-supports.exp (check_compile): Support assembly code.
      	(check_effective_target_property_1_needed): New proc.
      5c4258d7
    • Jakub Jelinek's avatar
      i386: Fix up cvtsd2ss splitter [PR104502] · 0538d42c
      Jakub Jelinek authored
      The following testcase ICEs, because AVX512F is enabled, AVX512VL is not,
      and the cvtsd2ss insn has %xmm0-15 as output operand and %xmm16-31 as
      input operand.  For output operand %xmm16+ the splitter just gives up
      in such case, but for such input it just emits vmovddup which requires
      AVX512VL if either operand is EXT_REX_SSE_REG_P (when it is 128-bit).
      
      The following patch fixes it by treating that case like the pre-SSE3
      output != input case - move the input to output and do everything on
      the output reg which is known to be < %xmm16.
      
      2022-02-12  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/104502
      	* config/i386/i386.md (cvtsd2ss splitter): If operands[1] is xmm16+
      	and AVX512VL isn't available, move operands[1] to operands[0] first.
      
      	* gcc.target/i386/pr104502.c: New test.
      0538d42c
    • Uros Bizjak's avatar
      i386: Skip decimal float vector modes in type_natural_mode [PR79754] · edadc7e0
      Uros Bizjak authored
      2022-02-12  Uroš Bizjak  <ubizjak@gmail.com>
      
      gcc/ChangeLog:
      
      	PR target/79754
      	* config/i386/i386.cc (type_natural_mode):
      	Skip decimal float vector modes.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/79754
      	* gcc.target/i386/pr79754.c: New test.
      edadc7e0
    • GCC Administrator's avatar
      Daily bump. · e8d68f0a
      GCC Administrator authored
      e8d68f0a
  4. Feb 11, 2022
    • Iain Sandoe's avatar
      LRA, rs6000, Darwin: Amend lo_sum use for forced constants [PR104117]. · 4c3792d4
      Iain Sandoe authored
      
      Two issues resulted in this PR, which manifests when we force a constant into
      memory in LRA (in PIC code on Darwin).  The presence of such forced constants
      is quite dependent on other RTL optimisations, and it is easy for the issue to
      become latent for a specific case.
      
      First, in the Darwin-specific rs6000 backend code, we were not being careful
      enough in rejecting invalid symbolic addresses.  Specifically, when generating
      PIC code, we require a SYMBOL_REF to be wrapped in an UNSPEC_MACHOPIC_OFFSET.
      
      Second, LRA was attempting to load a register using an invalid lo_sum address.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      Co-authored-by: default avatarVladimir Makarov <vmakarov@redhat.com>
      
      	PR target/104117
      
      gcc/ChangeLog:
      
      	* config/rs6000/rs6000.cc (darwin_rs6000_legitimate_lo_sum_const_p):
      	Check for UNSPEC_MACHOPIC_OFFSET wrappers on symbolic addresses when
      	emitting PIC code.
      	(legitimate_lo_sum_address_p): Likewise.
      	* lra-constraints.cc (process_address_1): Do not attempt to emit a reg
      	load from an invalid lo_sum address.
      4c3792d4
    • Joseph Myers's avatar
      Regenerate .pot files. · 13caa028
      Joseph Myers authored
      gcc/po/
      	* gcc.pot: Regenerate.
      
      libcpp/po/
      	* cpplib.pot: Regenerate.
      13caa028
    • Joseph Myers's avatar
      preprocessor: Extract messages from cpp_*_at calls for translation · becc9a12
      Joseph Myers authored
      The logic in libcpp/Makefile.in listing diagnostic functions in a call
      to xgettext was missing cpp_warning_at, cpp_pedwarning_at and
      cpp_error_at, so resulting in some messages not being extracted for
      translation; add those functions to those for which messages are
      extracted.
      
      Tested with "make cpplib.pot".
      
      	* Makefile.in (po/$(PACKAGE).pot): Also handle cpp_warning_at,
      	cpp_pedwarning_at and cpp_error_at.
      becc9a12
    • Joseph Myers's avatar
      i18n: fix exgettext handling of C++ sources · 434b2caf
      Joseph Myers authored
      The move of source files to .cc names broke most message extraction by
      exgettext because it processed .c files with --language=GCC-source but
      didn't process .cc files that way.  Fix to process files identified as
      C++ that way as well.
      
      Tested with "make gcc.pot".
      
      	* exgettext: Also process C++ sources with --language=GCC-source.
      434b2caf
    • Ian Lance Taylor's avatar
      libgo: update to Go1.18beta2 · 8dc2499a
      Ian Lance Taylor authored
      gotools/
      	* Makefile.am (go_cmd_cgo_files): Add ast_go118.go
      	(check-go-tool): Copy golang.org/x/tools directories.
      	* Makefile.in: Regenerate.
      
      Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/384695
      8dc2499a
    • Jonathan Wakely's avatar
      libstdc++: Fix FAIL: 20_util/temporary_buffer.cc for C++14 · 9a56779d
      Jonathan Wakely authored
      The std::get_temporary_buffer function is deprecated since C++17, but
      the test was expecting a warning for C++14 as well.
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/20_util/temporary_buffer.cc: Fix dg-warning target
      	selector.
      9a56779d
    • Jonathan Wakely's avatar
      libstdc++: Fix test failures at -O0 · b0224734
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* testsuite/20_util/monotonic_buffer_resource/allocate.cc:
      	Ignore -Walloc-larger-than warning.
      	* testsuite/20_util/unsynchronized_pool_resource/allocate.cc:
      	Likewise.
      	* testsuite/29_atomics/atomic/cons/user_pod.cc: Compile with -O1
      	to avoid linker error for __atomic_is_lock_free.
      b0224734
    • Jakub Jelinek's avatar
      match.pd: Fix up (X & Y) CMP 0 -> X CMP2 ~Y simplifications [PR104499] · 9355a8c3
      Jakub Jelinek authored
      The following testcase ICEs on x86_64-linux, because match.pd emits
      there a NOP_EXPR cast from int*8 vector type with BLKmode to
      unsigned*8 vector type with BLKmode and vec-lowering isn't prepared
      to handle such casts.
      
      Fixed by using VIEW_CONVERT_EXPR instead.
      
      2022-02-11  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/104499
      	* match.pd ((X & Y) CMP 0 -> X CMP2 ~Y): Use view_convert instead
      	of convert.
      
      	* gcc.c-torture/compile/pr104499.c: New test.
      9355a8c3
    • Jakub Jelinek's avatar
      middle-end: Small __builtin_clear_padding improvements · b56ad958
      Jakub Jelinek authored
      When looking at __builtin_clear_padding today, I've noticed that
      it is quite wasteful to extend the original user one argument to 3,
      2 is enough.  We need to encode the original type of the first argument
      because pointer conversions are useless in GIMPLE, and we need to record
      a boolean whether it is for -ftrivial-auto-var-init=* or not.
      But for recording the type we don't need the value (we've always used
      zero) and for recording the boolean we don't need the type (we've always
      used integer_type_node).
      So, this patch merges the two into one.
      
      2022-02-11  Jakub Jelinek  <jakub@redhat.com>
      
      	* tree.cc (build_common_builtin_nodes): Fix up formatting in
      	__builtin_clear_padding decl creation.
      	* gimplify.cc (gimple_add_padding_init_for_auto_var): Encode
      	for_auto_init in the value of 2nd BUILT_IN_CLEAR_PADDING
      	argument rather than in 3rd argument.
      	(gimplify_call_expr): Likewise.  Fix up comment formatting.
      	* gimple-fold.cc (gimple_fold_builtin_clear_padding): Expect
      	2 arguments instead of 3, take for_auto_init from the value
      	of 2nd argument.
      b56ad958
    • Vladimir N. Makarov's avatar
      [PR104400] LRA: Modify exclude start hard register calculation for insn alternative · 274a4d29
      Vladimir N. Makarov authored
      v850 target has an interesting insn alternative constraint 'e!r' where e
      denotes even general regs and e is a subset of r.  We cannot just make
      union of exclude start hard registers for e and r and should use only
      exclude start hard registers of r.  The following patch implements this.
      
      gcc/ChangeLog:
      
      	PR rtl-optimization/104400
      	* lra-constraints.cc (process_alt_operands): Don't make union of
      	this_alternative_exclude_start_hard_regs when reg class in insn
      	alternative covers other reg classes in the same alternative.
      
      gcc/testsuite/ChangeLog:
      
      	PR rtl-optimization/104400
      	* gcc.target/v850/pr104400.c: New.
      	* gcc.target/v850/v850.exp: New.
      274a4d29
    • David Malcolm's avatar
      analyzer: ignore uninitialized uses of empty types [PR104274] · cc68ad87
      David Malcolm authored
      
      PR analyzer/104274 reports a false positive from
      -Wanalyzer-use-of-uninitialized-value on hppa when passing
      an empty struct as a function parameter.
      
      pa_pass_by_reference returns true for empty structs, so the
      call is turned into:
      
        struct empty arg.0;
        arg.0 = arg
        called_function (arg.0);
      
      by gimplify_parameters.
      
      However, gimplify_modify_expr discards assignments statments
      of empty types, so that we end up with:
      
        struct empty arg.0;
        called_function (arg.0);
      
      which the analyzer considers to be a use of uninitialized "arg.0";
      
      Given that gimplify_modify_expr will discard any assignments to
      such types, it seems simplest for -Wanalyzer-use-of-uninitialized-value
      to ignore values of empty types.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/104274
      	* region-model.cc (region_model::check_for_poison): Ignore
      	uninitialized uses of empty types.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/104274
      	* gcc.dg/analyzer/torture/empty-struct-1.c: New test.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      cc68ad87
    • Richard Biener's avatar
      [gimplefe] Add vector_mask attribute to get access to vector bools · ae117af4
      Richard Biener authored
      The following adds __attribute__((vector_mask)) to get access to
      the corresponding mask type for a vector type.  The implementation
      simply uses truth_type_for so creating a mask type that's not
      what the target would choose as canonical, say a AVX2 style one
      when AVX512VL is enabled, is not possible.  It might be possible
      to provide access to that with an optional argument specifying
      the precision of the bool element.  The syntax is as simple as
      
      typedef vector_type mask_type __attribute__((vector_mask));
      
      In theory this allows to create unit testcases for vector
      lowering and ISEL.
      
      2022-02-11  Richard Biener  <rguenther@suse.de>
      
      gcc/c-family/
      	* c-attribs.cc (c_common_attribute_table): Add entry for
      	vector_mask.
      	(handle_vector_mask_attribute): New.
      
      gcc/c/
      	* gimple-parser.cc (c_parser_gimple_statement): Properly parse
      	VEC_COND_EXPRs.
      
      gcc/testsuite/
      	* gcc.dg/gimplefe-48.c: New testcase.
      ae117af4
    • Jakub Jelinek's avatar
      c++: Fix up constant expression __builtin_convertvector folding [PR104472] · 84993d94
      Jakub Jelinek authored
      The following testcase ICEs, because due to the -frounding-math
      fold_const_call fails, which is it returns NULL, and returning NULL from
      cxx_eval* is wrong, all the callers rely on them to either return folded
      value or original with *non_constant_p = true.
      
      The following patch does that, and additionally falls through into the
      default case where there is diagnostics for the !ctx->quiet case too.
      
      2022-02-11  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/104472
      	* constexpr.cc (cxx_eval_internal_function) <case IFN_VEC_CONVERT>:
      	Only return fold_const_call result if it is non-NULL.  Otherwise
      	fall through into the default: case to return t, set *non_constant_p
      	and emit diagnostics if needed.
      
      	* g++.dg/cpp0x/constexpr-104472.C: New test.
      84993d94
    • Jakub Jelinek's avatar
      combine: Fix ICE with substitution of CONST_INT into PRE_DEC argument [PR104446] · fb76c0ad
      Jakub Jelinek authored
      The following testcase ICEs, because combine substitutes
      (insn 10 9 11 2 (set (reg/v:SI 7 sp [ a ])
              (const_int 0 [0])) "pr104446.c":9:5 81 {*movsi_internal}
           (nil))
      (insn 13 11 14 2 (set (mem/f:SI (pre_dec:SI (reg/f:SI 7 sp)) [0  S4 A32])
              (reg:SI 85)) "pr104446.c":10:3 56 {*pushsi2}
           (expr_list:REG_DEAD (reg:SI 85)
              (expr_list:REG_ARGS_SIZE (const_int 16 [0x10])
                  (nil))))
      forming
      (insn 13 11 14 2 (set (mem/f:SI (pre_dec:SI (const_int 0 [0])) [0  S4 A32])
              (reg:SI 85)) "pr104446.c":10:3 56 {*pushsi2}
           (expr_list:REG_DEAD (reg:SI 85)
              (expr_list:REG_ARGS_SIZE (const_int 16 [0x10])
                  (nil))))
      which is invalid RTL (pre_dec's argument must be a REG).
      I know substitution creates various forms of invalid RTL and hopes that
      invalid RTL just won't recog.
      But unfortunately in this case we ICE before we get to recog, as
      try_combine does:
        if (n_auto_inc)
          {
            int new_n_auto_inc = 0;
            for_each_inc_dec (newpat, count_auto_inc, &new_n_auto_inc);
      
            if (n_auto_inc != new_n_auto_inc)
              {
                if (dump_file && (dump_flags & TDF_DETAILS))
                  fprintf (dump_file, "Number of auto_inc expressions changed\n");
                undo_all ();
                return 0;
              }
          }
      and for_each_inc_dec under the hood will do e.g. for the PRE_DEC case:
          case PRE_DEC:
          case POST_DEC:
            {
              poly_int64 size = GET_MODE_SIZE (GET_MODE (mem));
              rtx r1 = XEXP (x, 0);
              rtx c = gen_int_mode (-size, GET_MODE (r1));
              return fn (mem, x, r1, r1, c, data);
            }
      and that code rightfully expects that the PRE_DEC operand has non-VOIDmode
      (as it needs to be a REG) - gen_int_mode for VOIDmode results in ICE.
      I think it is better not to emit the clearly invalid RTL during substitution
      like we do for other cases, than to adding workarounds for invalid IL
      created by combine to rtlanal.cc and perhaps elsewhere.
      As for the testcase, of course it is UB at runtime to modify sp that way,
      but if such code is never reached, we must compile it, not to ICE on it.
      And I don't see why on other targets which use the autoinc rtxes much more
      it couldn't happen with other registers.
      
      2022-02-11  Jakub Jelinek  <jakub@redhat.com>
      
      	PR middle-end/104446
      	* combine.cc (subst): Don't substitute CONST_INTs into RTX_AUTOINC
      	operands.
      
      	* gcc.target/i386/pr104446.c: New test.
      fb76c0ad
    • Richard Biener's avatar
      middle-end/104496 - fix vectorized_internal_fn_supported_p · 72f8d228
      Richard Biener authored
      This fixes vectorized_internal_fn_supported_p behavior when
      facing vector types with an integer mode.
      
      2022-02-11  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/104496
      	* internal-fn.cc (vectorized_internal_fn_supported_p):
      	Bail out for integer mode vector types.
      
      	* gcc.target/i386/pr104496.c: New testcase.
      72f8d228
    • Jakub Jelinek's avatar
      df: Don't set bbs dirty because of debug insn moves [PR104459] · 18c8086d
      Jakub Jelinek authored
      As mentioned in the PR, we get -fcompare-debug failure, which is caused by
      cfg_layout_merge_blocks successfully merging two bbs where both bbs
      contained just CODE_LABEL, NOTE_INSN_BASIC_BLOCK and in the -g case both
      some debug insns at the end.  cfg_layout_merge_blocks calls
      update_bb_for_insn_chain which for the post-label insns in the second block
      (except for BARRIERs) calls df_insn_change_bb.  This function changes
      the bb of the insns and for notes just punts, but for other insns calls
      df_set_bb_dirty.  Now the problem is that because there were only debug
      insns and notes in the second block, df_set_bb_dirty is called on both
      only in the -g case and not with -g0.  df_set_bb_dirty these days
      sets both the BB_MODIFIED flag and marks the bb as dirty, and the former
      is what 6 spots in cfgcleanup.cc use in code-generation decisions,
      in this case
                may_thread |= (target->flags & BB_MODIFIED) != 0;
      in particular.  So, with -g may_thread is true while with -g0 it is not
      and we diverge from that point onwards.
      I've thought about introducing df_set_bb_dirty_nondebug that wouldn't
      set BB_MODIFIED but would mark the bb dirty, but then I went through
      history and found changes like:
      https://gcc.gnu.org/legacy-ml/gcc-patches/2010-10/msg00059.html
      so I've also tried just not calling df_set_bb_dirty for debug insns
      at all and it passed x86_64-linux and i686-linux
      --enable-checking=yes,rtl,extra,df bootstraps/regtests, so perhaps
      that works too.
      Now that I look at it again, if we don't need those from %d to %d messages
      for debug insns in the dump files, another way to fix it would be just to
      change the very first line in the hunk from
        if (!INSN_P (insn))
      to
        if (!DEBUG_INSN_P (insn))
      Though, df_set_bb_dirty_nondebug which will do everything but
      set bb->flags |= BB_MODIFIED is yet another option I can test.
      Perhaps even that PR42889 was solely about those 6 decisions in cfgcleanup
      (at that point it used df_get_bb_dirty) and not about actually the
      recomputation of some of the problems causing different code generations.
      
      2022-02-11  Jakub Jelinek  <jakub@redhat.com>
      
      	PR rtl-optimization/104459
      	* df-scan.cc (df_insn_change_bb): Don't call df_set_bb_dirty when
      	moving DEBUG_INSNs between bbs.
      
      	* gcc.dg/pr104459.c: New test.
      18c8086d
    • liuhongt's avatar
      Add single_use to simplification (uncond_op + vec_cond -> cond_op). · 165947fe
      liuhongt authored
      gcc/ChangeLog:
      
      	PR tree-optimization/104479
      	* match.pd (uncond_op + vec_cond -> cond_op): Add single_use
      	for the dest of uncond_op.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/i386/pr104479.c: New test.
      	* gcc.target/i386/cond_op_shift_w-1.c: Adjust testcase.
      165947fe
    • Tom de Vries's avatar
      [testsuite] Require non_strict_prototype in a few tests · 7cc6a8d0
      Tom de Vries authored
      Require effective target non_strict_prototype in a few test-cases.
      
      Tested on nvptx.
      
      gcc/testsuite/ChangeLog:
      
      2022-02-10  Tom de Vries  <tdevries@suse.de>
      
      	* gcc.c-torture/compile/pr100576.c: Require effective target
      	non_strict_prototype.
      	* gcc.c-torture/compile/pr97576.c: Same.
      7cc6a8d0
    • Tom de Vries's avatar
      [testsuite] Require alloca support in a few tests · 893aeac1
      Tom de Vries authored
      Require effective target alloca in a few test-cases.
      
      Tested on nvptx.
      
      gcc/testsuite/ChangeLog:
      
      2022-02-10  Tom de Vries  <tdevries@suse.de>
      
      	* c-c++-common/Walloca-larger-than.c: Require effective target alloca.
      	* c-c++-common/Warray-bounds-9.c: Same.
      	* c-c++-common/Wdangling-pointer-2.c: Same.
      	* c-c++-common/Wdangling-pointer-4.c: Same.
      	* c-c++-common/Wdangling-pointer-5.c: Same.
      	* c-c++-common/Wdangling-pointer.c: Same.
      	* c-c++-common/auto-init-11.c: Same.
      	* c-c++-common/auto-init-12.c: Same.
      	* c-c++-common/auto-init-15.c: Same.
      	* c-c++-common/auto-init-16.c: Same.
      	* c-c++-common/torture/builtin-clear-padding-4.c: Same.
      	* gcc.c-torture/compile/pr99787-1.c: Same.
      	* gcc.dg/Walloca-larger-than-4.c: Same.
      	* gcc.dg/Wdangling-pointer.c: Same.
      	* gcc.dg/Wfree-nonheap-object-2.c: Same.
      	* gcc.dg/Wfree-nonheap-object.c: Same.
      	* gcc.dg/Wstringop-overflow-56.c: Same.
      	* gcc.dg/Wstringop-overflow-57.c: Same.
      	* gcc.dg/Wstringop-overflow-67.c: Same.
      	* gcc.dg/Wstringop-overflow-71.c: Same.
      	* gcc.dg/Wvla-larger-than-5.c: Same.
      	* gcc.dg/analyzer/taint-alloc-1.c: Same.
      	* gcc.dg/analyzer/torture/ubsan-1.c: Same.
      	* gcc.dg/graphite/pr99085.c: Same.
      	* gcc.dg/pr100225.c: Same.
      	* gcc.dg/pr98721-1.c: Same.
      	* gcc.dg/pr99122-2.c: Same.
      	* gcc.dg/sso-14.c: Same.
      	* gcc.dg/tree-ssa/builtin-sprintf-warn-25.c: Same.
      	* gcc.dg/uninit-38.c: Same.
      	* gcc.dg/uninit-39.c: Same.
      	* gcc.dg/uninit-41.c: Same.
      	* gcc.dg/uninit-pr100250.c: Same.
      	* gcc.dg/uninit-pr101300.c: Same.
      	* gcc.dg/uninit-pr101494.c: Same.
      	* gcc.dg/uninit-pr98578.c: Same.
      	* gcc.dg/uninit-pr98583.c: Same.
      	* gcc.dg/vla-stexp-1.c: Same.
      	* gcc.dg/vla-stexp-2.c: Same.
      	* gcc.dg/vla-stexp-4.c: Same.
      	* gcc.dg/vla-stexp-5.c: Same.
      893aeac1
    • Tom de Vries's avatar
      [nvptx] Handle asm insn in prevent_branch_around_nothing · fd64b092
      Tom de Vries authored
      With GOMP_NVPTX_JIT=-00 and -mptx=3.1, I run into:
      ...
      FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/acc_prof-version-1.c \
        -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none  -O2 \
        execution test
      ...
      
      The problem is that we're generating a diverging branch around nothing:
      ...
              {
                      .reg.u32        %x;
                      mov.u32 %x, %tid.x;
                      setp.ne.u32     %r23, %x, 0;
              }
              @%r23   bra     $L2;
      $L2:
      ...
      which the driver JIT has problems with at -O0, so consequently we run into the
      nvptx_uniform_warp_check.
      
      Fix this by handling asm ("") and alike in prevent_branch_around_nothing.
      
      Tested on x86_64 with nvptx accelerator.
      
      gcc/ChangeLog:
      
      2022-02-10  Tom de Vries  <tdevries@suse.de>
      
      	PR target/104456
      	* config/nvptx/nvptx.cc (prevent_branch_around_nothing): Handle asm
      	insn.
      fd64b092
    • GCC Administrator's avatar
      Daily bump. · a645583d
      GCC Administrator authored
      a645583d
  5. Feb 10, 2022
    • Jakub Jelinek's avatar
      testsuite: Fix up g++.dg/warn/Wuninitialized-32.C test for ilp32 [PR104373] · 50243f49
      Jakub Jelinek authored
      The testcase FAILs whenever size_t is not unsigned long:
      FAIL: g++.dg/warn/Wuninitialized-32.C  -std=c++98 (test for excess errors)
      Excess errors:
      .../gcc/testsuite/g++.dg/warn/Wuninitialized-32.C:4:7: error: 'operator new' takes type 'size_t' ('unsigned int') as first parameter [-fpermissive]
      
      Fixed by using __SIZE_TYPE__ instead of unsigned long.
      
      2022-02-11  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/104373
      	* g++.dg/warn/Wuninitialized-32.C (operator new[]): Use __SIZE_TYPE__
      	as type of the first argument instead of unsigned long.
      50243f49
    • Jason Merrill's avatar
      c++: ICE on xtreme-header_a.H · db84f382
      Jason Merrill authored
      This test regressed after my PR103752 patch with -march=cascadelake.  I
      don't understand why that flag makes a difference, but this patch is correct
      in any case.
      
      gcc/cp/ChangeLog:
      
      	* module.cc (depset::hash::add_specializations): Use
      	STRIP_TEMPLATE.
      db84f382
    • Thomas Rodgers's avatar
      libstdc++: Strengthen memory order for atomic<T>::wait/notify · b25a7c05
      Thomas Rodgers authored
      This changes the memory order used in the spin wait code to match
      that of libc++.
      
      libstdc++-v3/ChangeLog:
      	* include/bits/atomic_wait.h (__waiter_base::_S_do_spin,
      	__waiter_base::_S_do_spin_v): Change memory order from relaxed
      	to acquire.
      b25a7c05
    • Tobias Burnus's avatar
      OpenMP/C++: Permit mapping classes with virtual members [PR102204] · c22f3fb7
      Tobias Burnus authored
      	PR c++/102204
      gcc/cp/ChangeLog:
      
      	* decl2.cc (cp_omp_mappable_type_1): Remove check for virtual
      	members as those are permitted since OpenMP 5.0.
      
      libgomp/ChangeLog:
      
      	* testsuite/libgomp.c++/target-virtual-1.C: New test.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/gomp/unmappable-1.C: Remove previously expected dg-message.
      c22f3fb7
    • David Malcolm's avatar
      analyzer: handle more casts of string literals [PR98797] · 2ac7b19f
      David Malcolm authored
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/98797
      	* region-model-manager.cc
      	(region_model_manager::maybe_fold_sub_svalue): Generalize getting
      	individual chars of a STRING_CST from element_region to any
      	subregion which is a concrete access of a single byte from its
      	parent region.
      	* region.cc (region::get_relative_concrete_byte_range): New.
      	* region.h (region::get_relative_concrete_byte_range): New decl.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/98797
      	* gcc.dg/analyzer/casts-1.c: Mark xfails as fixed; add further
      	test coverage for casts of string literals.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      2ac7b19f
    • Qing Zhao's avatar
      middle-end: updating the reg use in exit block for -fzero-call-used-regs [PR100775] · b32305b4
      Qing Zhao authored
      In the pass_zero_call_used_regs, when updating dataflow info after adding
      the register zeroing sequence in the epilogue of the function, we should
      call "df_update_exit_block_uses" to update the register use information in
      the exit block to include all the registers that have been zeroed.
      
      2022-02-10  Qing Zhao  <qing.zhao@oracle.com>
      
      gcc/ChangeLog:
      
      	PR middle-end/100775
      	* function.cc (gen_call_used_regs_seq): Call
      	df_update_exit_block_uses when updating df.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/100775
      	* gcc.target/arm/pr100775.c: New test.
      b32305b4
Loading