Commit Graph

213655 Commits

Author SHA1 Message Date
Richard Biener
09a514fbb6 tree-optimization/116674 - vectorizable_simd_clone_call and re-analysis
When SLP analysis scraps an instance because it fails to analyze we
can end up calling vectorizable_* in analysis mode on a node that
was analyzed during the analysis of that instance again.
vectorizable_simd_clone_call wasn't expecting that and instead
guarded analysis/transform code on populated data structures.
The following changes it so it survives re-analysis.

	PR tree-optimization/116674
	* tree-vect-stmts.cc (vectorizable_simd_clone_call): Support
	re-analysis.

	* g++.dg/vect/pr116674.cc: New testcase.
2024-09-11 14:56:10 +02:00
Alex Coplan
3fd07d4f04 libstdc++: Restore unrolling in std::find using pragma [PR116140]
Together with the preparatory compiler patches, this patch restores
unrolling in std::__find_if, but this time relying on the compiler to do
it by using:

  #pragma GCC unroll 4

which should restore the majority of the regression relative to the
hand-unrolled version while still being vectorizable with WIP alignment
peeling enhancements.

On Neoverse V1 with LTO, this reduces the regression in xalancbmk (from
SPEC CPU 2017) from 5.8% to 1.7% (restoring ~71% of the lost
performance).

libstdc++-v3/ChangeLog:

	PR libstdc++/116140
	* include/bits/stl_algobase.h (std::__find_if): Add #pragma to
	request GCC to unroll the loop.
2024-09-11 11:50:48 +01:00
Alex Coplan
9759f6299d lto: Stream has_unroll flag during LTO [PR116140]
When #pragma GCC unroll is processed in
tree-cfg.cc:replace_loop_annotate_in_block, we set both the loop->unroll
field (which is currently streamed out and back in during LTO) but also
the cfun->has_unroll flag.

cfun->has_unroll, however, is not currently streamed during LTO.  This
patch fixes that.

Prior to this patch, loops marked with #pragma GCC unroll that would be
unrolled by RTL loop2_unroll in a non-LTO compilation didn't get
unrolled under LTO.

gcc/ChangeLog:

	PR libstdc++/116140
	* lto-streamer-in.cc (input_struct_function_base): Stream in
	fn->has_unroll.
	* lto-streamer-out.cc (output_struct_function_base): Stream out
	fn->has_unroll.

gcc/testsuite/ChangeLog:

	PR libstdc++/116140
	* g++.dg/ext/pragma-unroll-lambda-lto.C: New test.
2024-09-11 11:50:48 +01:00
Alex Coplan
31ff173c70 testsuite: Ensure ltrans dump files get cleaned up properly [PR116140]
I noticed while working on a test that uses LTO and requests a dump
file, that we are failing to cleanup ltrans dump files in the testsuite.

E.g. the test I was working on compiles with -flto
-fdump-rtl-loop2_unroll, and we end up with the following file:

./gcc/testsuite/g++/pr116140.ltrans0.ltrans.287r.loop2_unroll

being left behind by the testsuite.  This is problematic not just from a
"missing cleanup" POV, but also because it can cause the test to pass
spuriously when the test is re-run wtih an unpatched compiler (without
the bug fix).  In the broken case, loop2_unroll isn't run at all, so we
end up scanning the old dumpfile (from the previous test run) and making
the dumpfile scan pass.

Running with `-v -v` in RUNTESTFLAGS we can see the following cleanup
attempt is made:

remove-build-file `pr116140.{C,exe}.{ltrans[0-9]*.,}[0-9][0-9][0-9]{l,i,r,t}.*'

looking again at the ltrans dump file above we can see this will fail for two
reasons:

 - The actual dump file has no {C,exe} extension between the basename and
   ltrans0.
 - The actual dump file has an additional `.ltrans` component after `.ltrans0`.

This patch therefore relaxes the pattern constructed for cleaning up such
dumpfiles to also match dumpfiles with the above form.

Running the testsuite before/after this patch shows the number of files in
gcc/testsuite (in the build dir) with "ltrans" in the name goes from 1416 to 62
on aarch64.

gcc/testsuite/ChangeLog:

	PR libstdc++/116140
	* lib/gcc-dg.exp (schedule-cleanups): Relax ltrans dumpfile
	cleanup pattern to handle missing cases.
2024-09-11 11:50:48 +01:00
Alex Coplan
f97d86242b c++: Ensure ANNOTATE_EXPRs remain outermost expressions in conditions [PR116140]
For the testcase added with this patch, we would end up losing the:

  #pragma GCC unroll 4

and emitting "warning: ignoring loop annotation".  That warning comes
from tree-cfg.cc:replace_loop_annotate, and means that we failed to
process the ANNOTATE_EXPR in tree-cfg.cc:replace_loop_annotate_in_block.
That function walks backwards over the GIMPLE in an exiting BB for a
loop, skipping over the final gcond, and looks for any ANNOTATE_EXPRS
immediately preceding the gcond.

The function documents the following pre-condition:

   /* [...] We assume that the annotations come immediately before the
      condition in BB, if any.  */

now looking at the exiting BB of the loop, we have:

  <bb 8> :
  D.4524 = .ANNOTATE (iftmp.1, 1, 4);
  retval.0 = D.4524;
  if (retval.0 != 0)
    goto <bb 3>; [INV]
  else
    goto <bb 9>; [INV]

and crucially there is an intervening assignment between the gcond and
the preceding .ANNOTATE ifn call.  To see where this comes from, we can
look to the IR given by -fdump-tree-original:

  if (<<cleanup_point ANNOTATE_EXPR <first != last && !use_find(short
    int*)::<lambda(short int)>::operator() (&pred, *first), unroll 4>>>)
    goto <D.4518>;
  else
    goto <D.4516>;

here the problem is that we've wrapped a CLEANUP_POINT_EXPR around the
ANNOTATE_EXPR, meaning the ANNOTATE_EXPR is no longer the outermost
expression in the condition.

The CLEANUP_POINT_EXPR gets added by the following call chain:

finish_while_stmt_cond
 -> maybe_convert_cond
 -> condition_conversion
 -> fold_build_cleanup_point_expr

this patch chooses to fix the issue by first introducing a new helper
class (annotate_saver) to save and restore outer chains of
ANNOTATE_EXPRs and then using it in maybe_convert_cond.

With this patch, we don't get any such warning and the loop gets unrolled as
expected at -O2.

gcc/cp/ChangeLog:

	PR libstdc++/116140
	* semantics.cc (anotate_saver): New. Use it ...
	(maybe_convert_cond): ... here, to ensure any ANNOTATE_EXPRs
	remain the outermost expression(s) of the condition.

gcc/testsuite/ChangeLog:

	PR libstdc++/116140
	* g++.dg/ext/pragma-unroll-lambda.C: New test.
2024-09-11 11:50:48 +01:00
Tobias Burnus
6291f25631 OpenMP: Add interop routines to omp_runtime_api_procname
gcc/
	* omp-general.cc (omp_runtime_api_procname): Add
	omp_get_interop_{int,name,ptr,rc_desc,str,type_desc}
	and omp_get_num_interop_properties.
2024-09-11 12:02:24 +02:00
Tobias Burnus
4e9265a474 fortran/openmp.cc: Fix var init and locus use to avoid uninit values [PR fortran/116661]
gcc/fortran/ChangeLog:

	PR fortran/116661
	* openmp.cc (gfc_match_omp_prefer_type): NULL init a gfc_expr
	variable and use right locus in gfc_error.
2024-09-11 09:25:47 +02:00
Pan Li
9b14a5823b Vect: Support form 1 of vector signed integer .SAT_ADD
This patch would like to support the vector signed ssadd pattern
for the RISC-V backend.  Aka

Form 1:
  #define DEF_VEC_SAT_S_ADD_FMT_1(T, UT, MIN, MAX)           \
  void __attribute__((noinline))                             \
  vec_sat_s_add_##T##_fmt_1 (T *out, T *x, T *y, unsigned n) \
  {                                                          \
    for (unsigned i = 0; i < n; i++)                         \
      {                                                      \
        T sum = (UT)x[i] + (UT)y[i];                         \
        out[i] = (x[i] ^ y[i]) < 0                           \
          ? sum                                              \
          : (sum ^ x[i]) >= 0                                \
            ? sum                                            \
            : x[i] < 0 ? MIN : MAX;                          \
      }                                                      \
  }

DEF_VEC_SAT_S_ADD_FMT_1(int64_t, uint64_t, INT64_MIN, INT64_MAX)

If the backend implemented the vector mode of ssadd, we will see IR diff
similar as below:

Before this patch:
 108   │   _114 = .SELECT_VL (ivtmp_112, POLY_INT_CST [2, 2]);
 109   │   ivtmp_77 = _114 * 8;
 110   │   vect__4.9_80 = .MASK_LEN_LOAD (vectp_x.7_78, 64B, { -1, ...  }, _114, 0);
 111   │   vect__5.10_81 = VIEW_CONVERT_EXPR<vector([2,2]) long unsigned int>(vect__4.9_80);
 112   │   vect__7.13_85 = .MASK_LEN_LOAD (vectp_y.11_83, 64B, { -1, ...  }, _114, 0);
 113   │   vect__8.14_86 = VIEW_CONVERT_EXPR<vector([2,2]) long unsigned int>(vect__7.13_85);
 114   │   vect__9.15_87 = vect__5.10_81 + vect__8.14_86;
 115   │   vect_sum_20.16_88 = VIEW_CONVERT_EXPR<vector([2,2]) long int>(vect__9.15_87);
 116   │   vect__10.17_89 = vect__4.9_80 ^ vect__7.13_85;
 117   │   vect__11.18_90 = vect__4.9_80 ^ vect_sum_20.16_88;
 118   │   mask__46.19_92 = vect__10.17_89 >= { 0, ... };
 119   │   _36 = vect__4.9_80 >> 63;
 120   │   mask__44.26_104 = vect__11.18_90 < { 0, ... };
 121   │   mask__43.27_105 = mask__46.19_92 & mask__44.26_104;
 122   │   _115 = .COND_XOR (mask__43.27_105, _36, { 9223372036854775807, ... }, vect_sum_20.16_88);
 123   │   .MASK_LEN_STORE (vectp_out.29_108, 64B, { -1, ... }, _114, 0, _115);
 124   │   vectp_x.7_79 = vectp_x.7_78 + ivtmp_77;
 125   │   vectp_y.11_84 = vectp_y.11_83 + ivtmp_77;
 126   │   vectp_out.29_109 = vectp_out.29_108 + ivtmp_77;
 127   │   ivtmp_113 = ivtmp_112 - _114;

After this patch:
  94   │   # vectp_x.7_82 = PHI <vectp_x.7_83(6), x_18(D)(5)>
  95   │   # vectp_y.10_86 = PHI <vectp_y.10_87(6), y_19(D)(5)>
  96   │   # vectp_out.14_91 = PHI <vectp_out.14_92(6), out_21(D)(5)>
  97   │   # ivtmp_95 = PHI <ivtmp_96(6), _94(5)>
  98   │   _97 = .SELECT_VL (ivtmp_95, POLY_INT_CST [2, 2]);
  99   │   ivtmp_81 = _97 * 8;
 100   │   vect__4.9_84 = .MASK_LEN_LOAD (vectp_x.7_82, 64B, { -1, ...  }, _97, 0);
 101   │   vect__7.12_88 = .MASK_LEN_LOAD (vectp_y.10_86, 64B, { -1, ...  }, _97, 0);
 102   │   vect_patt_40.13_89 = .SAT_ADD (vect__4.9_84, vect__7.12_88);
 103   │   .MASK_LEN_STORE (vectp_out.14_91, 64B, { -1, ... }, _97, 0, vect_patt_40.13_89);
 104   │   vectp_x.7_83 = vectp_x.7_82 + ivtmp_81;
 105   │   vectp_y.10_87 = vectp_y.10_86 + ivtmp_81;
 106   │   vectp_out.14_92 = vectp_out.14_91 + ivtmp_81;
 107   │   ivtmp_96 = ivtmp_95 - _97;

The below test suites are passed for this patch:
1. The rv64gcv fully regression tests.
2. The x86 bootstrap tests.
3. The x86 fully regression tests.

gcc/ChangeLog:

	* match.pd: Add case 2 for the signed .SAT_ADD consumed by
	vect pattern.
	* tree-vect-patterns.cc (gimple_signed_integer_sat_add): Add new
	matching func decl for signed .SAT_ADD.
	(vect_recog_sat_add_pattern): Add signed .SAT_ADD pattern match.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-09-11 10:00:25 +08:00
liuhongt
f80e4ba94e Enable tune fuse_move_and_alu for GNR.
According to Intel Software Optimization Manual[1], the Redwood cove
microarchitecture supports LD+OP and MOV+OP macro fusions.

The patch enables MOV+OP tune for GNR.

[1] https://www.intel.com/content/www/us/en/content-details/814198/intel-64-and-ia-32-architectures-optimization-reference-manual-volume-1.html

gcc/ChangeLog:

	* config/i386/x86-tune.def (X86_TUNE_FUSE_MOV_AND_ALU): Enable
	for GNR and GNR-D.
2024-09-11 09:17:06 +08:00
Pan Li
6bd3ee7f2f RISC-V: Fix asm check for Vector SAT_* due to middle-end change
The middle-end change makes the effect on the layout of the assembly
for vector SAT_*.  This patch would like to fix it and make it robust.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-1.c: Adjust
	asm check and make it robust.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-10.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-11.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-12.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-13.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-14.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-15.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-16.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-17.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-18.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-19.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-2.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-20.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-21.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-22.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-23.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-24.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-25.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-26.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-27.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-28.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-29.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-3.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-30.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-31.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-32.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-4.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-5.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-6.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-7.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-8.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-9.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-1.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-10.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-11.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-12.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-13.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-14.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-15.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-16.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-17.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-18.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-19.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-2.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-20.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-21.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-22.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-23.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-24.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-25.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-26.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-27.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-28.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-29.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-3.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-30.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-31.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-32.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-33.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-34.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-35.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-36.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-37.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-38.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-39.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-4.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-40.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-5.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-6.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-7.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-8.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-9.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-1.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-2.c: Ditto.
	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-3.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-1.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-10.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-11.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-12.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-13.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-14.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-15.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-16.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-17.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-18.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-19.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-2.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-20.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-21.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-22.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-23.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-24.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-3.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-4.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-5.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-6.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-7.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-8.c: Ditto.
	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-9.c: Ditto.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-09-11 09:11:07 +08:00
GCC Administrator
79546845a1 Daily bump. 2024-09-11 00:17:46 +00:00
Jonathan Wakely
fc7a1fb023
libstdc++: Only use std::ios_base_library_init() for ELF [PR116159]
The undefined std::ios_base_library_init() symbol that is referenced by
<iostream> is only supposed to be used for targets where symbol
versioning is supported.

The mingw-w64 target defaults to --enable-symvers=gnu due to using GNU
ld but doesn't actually support symbol versioning. This means it tries
to emit references to the std::ios_base_library_init() symbol, which
isn't really defined in the library. This causes problems when using lld
to link user binaries.

Disable the undefined symbol reference for non-ELF targets.

libstdc++-v3/ChangeLog:

	PR libstdc++/116159
	* include/std/iostream (ios_base_library_init): Only define for
	ELF targets.
	* src/c++98/ios_init.cc (ios_base_library_init): Likewise.
2024-09-10 18:23:30 +01:00
Jonathan Wakely
c07cf418fd
libstdc++: std::string move assignment should not use POCCA trait [PR116641]
The changes to implement LWG 2579 (r10-327-gdb33efde17932f) made
std::string::assign use the propagate_on_container_copy_assignment
(POCCA) trait, for consistency with operator=(const basic_string&).
However, this also unintentionally affected operator=(basic_string&&)
which calls assign(str) to make a deep copy when performing a move is
not possible. The fix is for the move assignment operator to call
_M_assign(str) instead of assign(str), as this just does the deep copy
and doesn't check the POCCA trait first.

The bug only affects the unlikely/useless combination of POCCA==true and
POCMA==false, but we should fix it for correctness anyway. it should
also make move assignment slightly cheaper to compile and execute,
because we skip the extra code in assign(const basic_string&).

libstdc++-v3/ChangeLog:

	PR libstdc++/116641
	* include/bits/basic_string.h (operator=(basic_string&&)): Call
	_M_assign instead of assign.
	* testsuite/21_strings/basic_string/allocator/116641.cc: New
	test.
2024-09-10 18:22:32 +01:00
Jakub Jelinek
0008050b9d c++: Fix get_member_function_from_ptrfunc with -fsanitize=bounds [PR116449]
The following testcase is miscompiled, because
get_member_function_from_ptrfunc
emits something like
(((FUNCTION.__pfn & 1) != 0)
 ? ptr + FUNCTION.__delta + FUNCTION.__pfn - 1
 : FUNCTION.__pfn) (ptr + FUNCTION.__delta, ...)
or so, so FUNCTION tree is used there 5 times.  There is
if (TREE_SIDE_EFFECTS (function)) function = save_expr (function);
but in this case function doesn't have side-effects, just nested ARRAY_REFs.
Now, if all the FUNCTION trees would be shared, it would work fine,
FUNCTION is evaluated in the first operand of COND_EXPR; but unfortunately
that isn't the case, both the BIT_AND_EXPR shortening and conversion to
bool done for build_conditional_expr actually unshare_expr that first
expression, but none of the other 4 are unshared.  With -fsanitize=bounds,
.UBSAN_BOUNDS calls are added to the ARRAY_REFs and use save_expr to avoid
evaluating the argument multiple times, but because that FUNCTION tree is
first used in the second argument of COND_EXPR (i.e. conditionally), the
SAVE_EXPR initialization is done just there and then the third argument
of COND_EXPR just uses the uninitialized temporary and so does the first
argument computation as well.

The following patch fixes that by doing save_expr even if !TREE_SIDE_EFFECTS,
but to avoid doing that too often only if !nonvirtual and if the expression
isn't a simple decl.

2024-09-10  Jakub Jelinek  <jakub@redhat.com>

	PR c++/116449
	* typeck.cc (get_member_function_from_ptrfunc): Use save_expr
	on instance_ptr and function even if it doesn't have side-effects,
	as long as it isn't a decl.

	* g++.dg/ubsan/pr116449.C: New test.
2024-09-10 18:42:32 +02:00
Jonathan Wakely
4e1e50458b
libstdc++: Add missing exception specifications in tests
Since r15-3532-g7cebc6384a0ad6 18_support/new_nothrow.cc fails in C++98 mode because G++
diagnoses missing exception specifications for the user-defined
(de)allocation functions. Add throw(std::bad_alloc) and throw() for
C++98 mode.

Similarly, 26_numerics/headers/numeric/synopsis.cc fails in C++20 mode
because the declarations of gcd and lcm are not noexcept.

libstdc++-v3/ChangeLog:

	* testsuite/18_support/new_nothrow.cc (THROW_BAD_ALLOC): Define
	macro to add exception specifications for C++98 mode.
	(NOEXCEPT): Expand to throw() for C++98 mode.
	* testsuite/26_numerics/headers/numeric/synopsis.cc (gcd, lcm):
	Add noexcept.
2024-09-10 17:33:32 +01:00
Marek Polacek
2801a49d11 c++: mutable temps in rodata [PR116369]
Here we wrongly mark the reference temporary for g TREE_READONLY,
so it's put in .rodata and so we can't modify its subobject even
when the subobject is marked mutable.  This is so since r9-869.
r14-1785 fixed a similar problem, but not in set_up_extended_ref_temp.

	PR c++/116369

gcc/cp/ChangeLog:

	* call.cc (set_up_extended_ref_temp): Don't mark a temporary
	TREE_READONLY if its type is TYPE_HAS_MUTABLE_P.

gcc/testsuite/ChangeLog:

	* g++.dg/tree-ssa/initlist-opt7.C: New test.
2024-09-10 11:48:15 -04:00
Prathamesh Kulkarni
e783a4a683 Pass host specific ABI opts from mkoffload.
The patch adds an option -foffload-abi-host-opts, which
is set by host in TARGET_OFFLOAD_OPTIONS, and mkoffload then passes its value
to host_compiler.

gcc/ChangeLog:
	PR target/96265
	* common.opt (foffload-abi-host-opts): New option.
	* config/aarch64/aarch64.cc (aarch64_offload_options): Pass
	-foffload-abi-host-opts.
	* config/i386/i386-options.cc (ix86_offload_options): Likewise.
	* config/rs6000/rs6000.cc (rs6000_offload_options): Likewise.
	* config/nvptx/mkoffload.cc (offload_abi_host_opts): Define.
	(compile_native): Append offload_abi_host_opts to argv_obstack.
	(main): Handle option -foffload-abi-host-opts.
	* config/gcn/mkoffload.cc (offload_abi_host_opts): Define.
	(compile_native): Append offload_abi_host_opts to argv_obstack.
	(main): Handle option -foffload-abi-host-opts.
	* lto-wrapper.cc (merge_and_complain): Handle
	-foffload-abi-host-opts.
	(append_compiler_options): Likewise.
	* opts.cc (common_handle_option): Likewise.

Signed-off-by: Prathamesh Kulkarni <prathameshk@nvidia.com>
2024-09-10 21:13:33 +05:30
Richard Biener
747700cdb5 tree-optimization/116658 - latent issue in vect_is_slp_load_node
Permute nodes do not have a representative so we have to guard
vect_is_slp_load_node against those.

	PR tree-optimization/116658
	* tree-vect-slp.cc (vect_is_slp_load_node): Make sure
	node isn't a permute.

	* g++.dg/vect/pr116658.cc: New testcase.
2024-09-10 11:47:30 +02:00
Pan Li
a7eaf7d5ed Match: Support form 2 for scalar signed integer .SAT_ADD
This patch would like to support the form 2 of the scalar signed
integer .SAT_ADD.  Aka below example:

Form 2:
  #define DEF_SAT_S_ADD_FMT_2(T, UT, MIN, MAX) \
  T __attribute__((noinline))              \
  sat_s_add_##T##_fmt_2 (T x, T y)         \
  {                                        \
    T sum = (UT)x + (UT)y;                 \
                                           \
    if ((x ^ y) < 0 || (sum ^ x) >= 0)     \
      return sum;                          \
                                           \
    return x < 0 ? MIN : MAX;              \
  }

DEF_SAT_S_ADD_FMT_2(int8_t, uint8_t, INT8_MIN, INT8_MAX)

We can tell the difference before and after this patch if backend
implemented the ssadd<m>3 pattern similar as below.

Before this patch:
   4   │ __attribute__((noinline))
   5   │ int8_t sat_s_add_int8_t_fmt_2 (int8_t x, int8_t y)
   6   │ {
   7   │   int8_t sum;
   8   │   unsigned char x.0_1;
   9   │   unsigned char y.1_2;
  10   │   unsigned char _3;
  11   │   signed char _4;
  12   │   signed char _5;
  13   │   int8_t _6;
  14   │   _Bool _11;
  15   │   signed char _12;
  16   │   signed char _13;
  17   │   signed char _14;
  18   │   signed char _22;
  19   │   signed char _23;
  20   │
  21   │ ;;   basic block 2, loop depth 0
  22   │ ;;    pred:       ENTRY
  23   │   x.0_1 = (unsigned char) x_7(D);
  24   │   y.1_2 = (unsigned char) y_8(D);
  25   │   _3 = x.0_1 + y.1_2;
  26   │   sum_9 = (int8_t) _3;
  27   │   _4 = x_7(D) ^ y_8(D);
  28   │   _5 = x_7(D) ^ sum_9;
  29   │   _23 = ~_4;
  30   │   _22 = _5 & _23;
  31   │   if (_22 >= 0)
  32   │     goto <bb 4>; [42.57%]
  33   │   else
  34   │     goto <bb 3>; [57.43%]
  35   │ ;;    succ:       4
  36   │ ;;                3
  37   │
  38   │ ;;   basic block 3, loop depth 0
  39   │ ;;    pred:       2
  40   │   _11 = x_7(D) < 0;
  41   │   _12 = (signed char) _11;
  42   │   _13 = -_12;
  43   │   _14 = _13 ^ 127;
  44   │ ;;    succ:       4
  45   │
  46   │ ;;   basic block 4, loop depth 0
  47   │ ;;    pred:       2
  48   │ ;;                3
  49   │   # _6 = PHI <sum_9(2), _14(3)>
  50   │   return _6;
  51   │ ;;    succ:       EXIT
  52   │
  53   │ }

After this patch:
   4   │ __attribute__((noinline))
   5   │ int8_t sat_s_add_int8_t_fmt_2 (int8_t x, int8_t y)
   6   │ {
   7   │   int8_t _6;
   8   │
   9   │ ;;   basic block 2, loop depth 0
  10   │ ;;    pred:       ENTRY
  11   │   _6 = .SAT_ADD (x_7(D), y_8(D)); [tail call]
  12   │   return _6;
  13   │ ;;    succ:       EXIT
  14   │
  15   │ }

The below test suites are passed for this patch.
* The rv64gcv fully regression test.
* The x86 bootstrap test.
* The x86 fully regression test.

gcc/ChangeLog:

	* match.pd: Add the form 2 of signed .SAT_ADD matching.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-09-10 15:44:36 +08:00
Eric Botcazou
73dc46f47b ada: Include missing associated header file
memmodel.h must be included alongside tm_p.h for the sake of the SPARC port.

gcc/ada/

	* gcc-interface/misc.cc: Include memmodel.h before tm_p.h.
2024-09-10 09:44:11 +02:00
Viljar Indus
4930e82f63 ada: Use the same warning character in continuations
gcc/ada/

	* gcc-interface/decl.cc: Use same warning characters in
	continuation messages.
	* gcc-interface/trans.cc: Likewise.
2024-09-10 09:44:10 +02:00
Javier Miranda
356536a4e6 ada: First controlling parameter: report error without Extensions allowed
Enable reporting an error when this new aspect/pragma is set to
True, and the sources are compiled without language extensions
allowed.

gcc/ada/

	* sem_ch13.adb (Analyze_One_Aspect): Call
	Error_Msg_GNAT_Extension() to report an error when the aspect
	First_Controlling_Parameter is set to True and the sources are
	compiled without Core_Extensions_ Allowed.
	* sem_prag.adb (Pragma_First_Controlling_Parameter): Call
	subprogram Error_Msg_GNAT_Extension() to report an error when the
	aspect First_Controlling_Parameter is set to True and the sources
	are compiled without Core_Extensions_Allowed. Report an error when
	the aspect pragma does not confirm an inherited True value.
2024-09-10 09:44:10 +02:00
Viljar Indus
5b701ee737 ada: Normalize span generation on different platforms
The total number of characters on a source code line
is different on Windows and Linux based systems
(CRLF vs LF endings). Use the last non line change
character to adjust printing the spans that go over
the end of line.

gcc/ada/

	* diagnostics-pretty_emitter.adb (Get_Last_Line_Char): New. Get
	the last non line change character. Write_Span_Labels use the
	adjusted line end pointer to calculate the length of the span.
2024-09-10 09:44:10 +02:00
Piotr Trojanek
ac957a621c ada: Evaluate calls to GNAT.Source_Info routines in semantic checking
When semantic checking mode is active, i.e. when switch -gnatc is
present or when the frontend is operating in the GNATprove mode,
we now rewrite calls to GNAT.Source_Info routines in evaluation
and not expansion (which is disabled in these modes).

This is needed to recognize constants initialized with calls to
GNAT.Source_Info as static constants, regardless of expansion being
enabled.

gcc/ada/

	* exp_intr.ads, exp_intr.adb (Expand_Source_Info): Move
	declaration to package spec.
	* sem_eval.adb (Eval_Intrinsic_Call): Evaluate calls to
	GNAT.Source_Info where possible.
2024-09-10 09:44:10 +02:00
Piotr Trojanek
7b77938c1b ada: Simplify code for inserting checks into expressions
Code cleanup; semantics is unaffected.

gcc/ada/

	* checks.adb (Remove_Checks): Combine CASE alternatives.
2024-09-10 09:44:10 +02:00
Piotr Trojanek
c8352514cd ada: Whitespace cleanup in declaration of calendar-related routines
Code cleanup.

gcc/ada/

	* libgnat/s-os_lib.ads: Remove extra whitespace.
2024-09-10 09:44:10 +02:00
Levy Hsu
3d031cc446 x86: Refine V4BF/V2BF FMA Testcase
gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx10_2-partial-bf-vector-fma-1.c: Separated 32-bit scan
	and removed register checks in spill situations.
2024-09-10 07:42:43 +00:00
Andrew Pinski
b081e6c860 phiopt: Move the common code between pass_phiopt and pass_cselim into a seperate function
When r14-303-gb9fedabe381cce was done, it was missed that some of the common parts could
be done in a template and a lambda could be used. This patch implements that. This new
function can be used later on to implement a simple ifcvt pass.

gcc/ChangeLog:

	* tree-ssa-phiopt.cc (execute_over_cond_phis): New template function,
	moved the common parts from pass_phiopt::execute/pass_cselim::execute.
	(pass_phiopt::execute): Move the functon specific parts of the loop
	into an lamdba.
	(pass_cselim::execute): Likewise.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-09-09 23:43:25 -07:00
Andrew Pinski
1b4497d61d phiopt: Use gimple_phi_result rather than PHI_RESULT [PR116643]
This converts the uses of PHI_RESULT in phiopt to be gimple_phi_result
instead. Since there was already a mismatch of uses here, it
would be good to use prefered one (gimple_phi_result) instead.

Bootstrapped and tested on x86_64-linux-gnu.

	PR tree-optimization/116643
gcc/ChangeLog:

	* tree-ssa-phiopt.cc (replace_phi_edge_with_variable): s/PHI_RESULT/gimple_phi_result/.
	(factor_out_conditional_operation): Likewise.
	(minmax_replacement): Likewise.
	(spaceship_replacement): Likewise.
	(cond_store_replacement): Likewise.
	(cond_if_else_store_replacement_1): Likewise.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-09-09 23:43:24 -07:00
liuhongt
c726a66431 Don't force_reg operands[3] when it's not const0_rtx.
It fix the regression by

a51f2fc0d8 is the first bad commit
commit a51f2fc0d8
Author: liuhongt <hongtao.liu@intel.com>
Date:   Wed Sep 4 15:39:17 2024 +0800

    Handle const0_operand for *avx2_pcmp<mode>3_1.

caused

FAIL: gcc.target/i386/pr59539-1.c scan-assembler-times vmovdqu|vmovups 1

To reproduce:

$ cd {build_dir}/gcc && make check RUNTESTFLAGS="i386.exp=gcc.target/i386/pr59539-1.c --target_board='unix{-m32\ -march=cascadelake}'"
$ cd {build_dir}/gcc && make check RUNTESTFLAGS="i386.exp=gcc.target/i386/pr59539-1.c --target_board='unix{-m64\ -march=cascadelake}'"

gcc/ChangeLog:

	* config/i386/sse.md (*avx2_pcmp<mode>3_1): Don't force_reg
	operands[3] when it's not const0_rtx.
2024-09-10 12:50:13 +08:00
GCC Administrator
852cff8268 Daily bump. 2024-09-10 00:22:41 +00:00
David Malcolm
89991f31c5 diagnostics: introduce struct diagnostic_option_id
Use a new struct diagnostic_option_id rather than just "int" when
referring to command-line options controlling warnings in the
diagnostic subsystem.

No functional change intended, but better documents the meaning of
the code.

gcc/c-family/ChangeLog:
	* c-common.cc (c_option_controlling_cpp_diagnostic): Return
	diagnostic_option_id rather than int.
	(c_cpp_diagnostic): Update for renaming of
	diagnostic_override_option_index to diagnostic_set_option_id.

gcc/c/ChangeLog:
	* c-errors.cc (pedwarn_c23): Use "diagnostic_option_id option_id"
	rather than "int opt".  Update for renaming of diagnostic_info
	field.
	(pedwarn_c11): Likewise.
	(pedwarn_c99): Likewise.
	(pedwarn_c90): Likewise.
	* c-tree.h (pedwarn_c90): Likewise for decl.
	(pedwarn_c99): Likewise.
	(pedwarn_c11): Likewise.
	(pedwarn_c23): Likewise.

gcc/cp/ChangeLog:
	* constexpr.cc (constexpr_error): Update for renaming of
	diagnostic_info field.
	* cp-tree.h (pedwarn_cxx98): Use "diagnostic_option_id" rather
	than "int".
	* error.cc (cp_adjust_diagnostic_info): Update for renaming of
	diagnostic_info field.
	(pedwarn_cxx98): Use "diagnostic_option_id option_id" rather than
	"int opt".  Update for renaming of diagnostic_info field.
	(diagnostic_set_info): Likewise.

gcc/d/ChangeLog:
	* d-diagnostic.cc (d_diagnostic_report_diagnostic): Update for
	renaming of diagnostic_info field.

gcc/ChangeLog:
	* diagnostic-core.h (struct diagnostic_option_id): New.
	(warning): Use it rather than "int" for param.
	(warning_n): Likewise.
	(warning_at): Likewise.
	(warning_meta): Likewise.
	(pedwarn): Likewise.
	(permerror_opt): Likewise.
	(emit_diagnostic): Likewise.
	(emit_diagnostic_valist): Likewise.
	(emit_diagnostic_valist_meta): Likewise.
	* diagnostic-format-json.cc
	(json_output_format::on_report_diagnostic): Update for renaming of
	diagnostic_info field.
	* diagnostic-format-sarif.cc (sarif_builder::make_result_object):
	Likewise.
	(make_reporting_descriptor_object_for_warning): Likewise.
	* diagnostic-format-text.cc (print_option_information): Likewise.
	* diagnostic-global-context.cc (emit_diagnostic): Use
	"diagnostic_option_id option_id" rather than "int opt".
	(emit_diagnostic_valist): Likewise.
	(emit_diagnostic_valist_meta): Likewise.
	(warning): Likewise.
	(warning_at): Likewise.
	(warning_meta): Likewise.
	(warning_n): Likewise.
	(pedwarn): Likewise.
	(permerror_opt): Likewise.
	* diagnostic.cc (diagnostic_set_info_translated): Update for
	renaming of diagnostic_info field.
	(diagnostic_option_classifier::classify_diagnostic): Use
	"diagnostic_option_id option_id" rather than "int opt".
	(update_effective_level_from_pragmas): Update for renaming of
	diagnostic_info field.
	(diagnostic_context::diagnostic_enabled): Likewise.
	(diagnostic_context::warning_enabled_at): Use
	"diagnostic_option_id option_id" rather than "int opt".
	(diagnostic_context::diagnostic_impl): Likewise.
	(diagnostic_context::diagnostic_n_impl): Likewise.
	* diagnostic.h (diagnostic_info::diagnostic_info): Update for...
	(diagnostic_info::option_index): Rename...
	(diagnostic_info::option_id): ...to this.
	(class diagnostic_option_manager): Use
	"diagnostic_option_id option_id" rather than "int opt" for vfuncs.
	(diagnostic_option_classifier): Likewise for member funcs.
	(diagnostic_classification_change_t::option): Add comment.
	(diagnostic_context::warning_enabled_at): Use
	"diagnostic_option_id option_id" rather than "int option_index".
	(diagnostic_context::option_unspecified_p): Likewise.
	(diagnostic_context::classify_diagnostic): Likewise.
	(diagnostic_context::option_enabled_p): Likewise.
	(diagnostic_context::make_option_name): Likewise.
	(diagnostic_context::make_option_url): Likewise.
	(diagnostic_context::diagnostic_impl): Likewise.
	(diagnostic_context::diagnostic_n_impl): Likewise.
	(diagnostic_override_option_index): Rename...
	(diagnostic_set_option_id): ...to this, and update for
	diagnostic_info field renaming.
	(diagnostic_classify_diagnostic): Use "diagnostic_option_id"
	rather than "int".
	(warning_enabled_at): Likewise.
	(option_unspecified_p): Likewise.

gcc/fortran/ChangeLog:
	* cpp.cc (cb_cpp_diagnostic_cpp_option): Convert return type from
	"int" to "diagnostic_option_id".
	(cb_cpp_diagnostic): Update for renaming of
	diagnostic_override_option_index to diagnostic_set_option_id.
	* error.cc (gfc_warning): Update for renaming of diagnostic_info
	field.
	(gfc_warning_now_at): Likewise.
	(gfc_warning_now): Likewise.
	(gfc_warning_internal): Likewise.

gcc/ChangeLog:
	* ipa-pure-const.cc: Replace include of "opts.h" with
	"opts-diagnostic.h".
	(suggest_attribute): Convert param from int to
	diagnostic_option_id.
	* lto-wrapper.cc (class lto_diagnostic_option_manager): Use
	diagnostic_option_id rather than "int".
	* opts-common.cc
	(compiler_diagnostic_option_manager::option_enabled_p): Likewise.
	* opts-diagnostic.h (class gcc_diagnostic_option_manager):
	Likewise.
	(class compiler_diagnostic_option_manager): Likewise.
	* opts.cc (compiler_diagnostic_option_manager::make_option_name):
	Likewise.
	(gcc_diagnostic_option_manager::make_option_url): Likewise.
	* substring-locations.cc
	(format_string_diagnostic_t::emit_warning_n_va): Likewise.
	(format_string_diagnostic_t::emit_warning_va): Likewise.
	(format_string_diagnostic_t::emit_warning): Likewise.
	(format_string_diagnostic_t::emit_warning_n): Likewise.
	* substring-locations.h
	(format_string_diagnostic_t::emit_warning_va): Likewise.
	(format_string_diagnostic_t::emit_warning_n_va): Likewise.
	(format_string_diagnostic_t::emit_warning): Likewise.
	(format_string_diagnostic_t::emit_warning_n): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-09-09 19:38:13 -04:00
David Malcolm
a97448e92e diagnostics: replace option_hooks with a diagnostic_option_manager class
Introduce a diagnostic_option_manager class to help isolate the
diagnostics subsystem from GCC's option handling.

No functional change intended.

gcc/ChangeLog:
	* diagnostic.cc (diagnostic_context::initialize): Replace
	m_options_callbacks with m_option_mgr.
	(diagnostic_context::set_option_hooks): Replace with...
	(diagnostic_context::set_option_manager): ...this.
	* diagnostic.h (diagnostic_option_enabled_cb): Delete.
	(diagnostic_make_option_name_cb): Delete.
	(diagnostic_make_option_url_cb): Delete.
	(class diagnostic_option_manager): New.
	(diagnostic_manager::option_enabled_p): Convert from using
	m_option_callbacks to m_option_mgr.
	(diagnostic_manager::make_option_name): Likewise.
	(diagnostic_manager::make_option_url): Likewise.
	(diagnostic_manager::set_option_hooks): Replace with...
	(diagnostic_manager::set_option_manager): ...this.
	(diagnostic_manager::get_lang_mask): Update for field changes.
	(diagnostic_manager::m_option_callbacks): Replace with...
	(diagnostic_manager::m_option_mgr): ...this and...
	(diagnostic_manager::m_lang_mask): ...this.
	* lto-wrapper.cc (class lto_diagnostic_option_manager): New.
	(main): Port from option hooks to diagnostic_option_manager.
	* opts-common.cc: Include "opts-diagnostic.h".
	(compiler_diagnostic_option_manager::option_enabled_p): New.
	* opts-diagnostic.h (option_name): Drop decl.
	(get_option_url): Drop decl.
	(class gcc_diagnostic_option_manager): New.
	(class compiler_diagnostic_option_manager): New.
	* opts.cc (option_name): Convert to...
	(compiler_diagnostic_option_manager::make_option_name): ...this.
	(get_option_url): Convert to...
	(gcc_diagnostic_option_manager::make_option_url): ...this.
	* toplev.cc (general_init): Port from option hooks to
	diagnostic_option_manager.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-09-09 19:38:12 -04:00
David Malcolm
19363bf556 diagnostics: rename dc.printer to m_printer [PR116613]
Rename diagnostic_context's "printer" field to "m_printer",
for consistency with other fields, and to highlight places
where we currently use this, to help assess feasibility
of supporting multiple output sinks (PR other/116613).

No functional change intended.

gcc/ChangeLog:
	PR other/116613
	* attribs.cc (decls_mismatched_attributes): Rename
	diagnostic_context's "printer" field to "m_printer".
	(attr_access::array_as_string): Likewise.
	* diagnostic-format-json.cc
	(json_output_format::on_report_diagnostic): Likewise.
	(diagnostic_output_format_init_json): Likewise.
	* diagnostic-format-sarif.cc
	(sarif_result::on_nested_diagnostic): Likewise.
	(sarif_ice_notification): Likewise.
	(sarif_builder::on_report_diagnostic): Likewise.
	(sarif_builder::make_result_object): Likewise.
	(sarif_builder::make_location_object): Likewise.
	(sarif_builder::make_message_object_for_diagram): Likewise.
	(diagnostic_output_format_init_sarif): Likewise.
	* diagnostic-format-text.cc
	(diagnostic_text_output_format::~diagnostic_text_output_format):
	Likewise.
	(diagnostic_text_output_format::on_report_diagnostic): Likewise.
	(diagnostic_text_output_format::on_diagram): Likewise.
	(diagnostic_text_output_format::print_any_cwe): Likewise.
	(diagnostic_text_output_format::print_any_rules): Likewise.
	(diagnostic_text_output_format::print_option_information):
	Likewise.
	* diagnostic-format.h (diagnostic_output_format::get_printer):
	New.
	* diagnostic-global-context.cc (verbatim): Rename
	diagnostic_context's "printer" field to "m_printer".
	* diagnostic-path.cc (path_label::get_text): Likewise.
	(print_path_summary_as_text): Likewise.
	(diagnostic_context::print_path): Likewise.
	(selftest::test_empty_path): Likewise.
	(selftest::test_intraprocedural_path): Likewise.
	(selftest::test_interprocedural_path_1): Likewise.
	(selftest::test_interprocedural_path_2): Likewise.
	(selftest::test_recursion): Likewise.
	(selftest::test_control_flow_1): Likewise.
	(selftest::test_control_flow_2): Likewise.
	(selftest::test_control_flow_3): Likewise.
	(assert_cfg_edge_path_streq): Likewise.
	(selftest::test_control_flow_5): Likewise.
	(selftest::test_control_flow_6): Likewise.
	* diagnostic-show-locus.cc (layout::layout): Likewise.
	(selftest::test_layout_x_offset_display_utf8): Likewise.
	(selftest::test_layout_x_offset_display_tab): Likewise.
	(selftest::test_diagnostic_show_locus_unknown_location): Likewise.
	(selftest::test_one_liner_simple_caret): Likewise.
	(selftest::test_one_liner_no_column): Likewise.
	(selftest::test_one_liner_caret_and_range): Likewise.
	(selftest::test_one_liner_multiple_carets_and_ranges): Likewise.
	(selftest::test_one_liner_fixit_insert_before): Likewise.
	(selftest::test_one_liner_fixit_insert_after): Likewise.
	(selftest::test_one_liner_fixit_remove): Likewise.
	(selftest::test_one_liner_fixit_replace): Likewise.
	(selftest::test_one_liner_fixit_replace_non_equal_range):
	Likewise.
	(selftest::test_one_liner_fixit_replace_equal_secondary_range):
	Likewise.
	(selftest::test_one_liner_fixit_validation_adhoc_locations):
	Likewise.
	(selftest::test_one_liner_many_fixits_1): Likewise.
	(selftest::test_one_liner_many_fixits_2): Likewise.
	(selftest::test_one_liner_labels): Likewise.
	(selftest::test_one_liner_simple_caret_utf8): Likewise.
	(selftest::test_one_liner_caret_and_range_utf8): Likewise.
	(selftest::test_one_liner_multiple_carets_and_ranges_utf8):
	Likewise.
	(selftest::test_one_liner_fixit_insert_before_utf8): Likewise.
	(selftest::test_one_liner_fixit_insert_after_utf8): Likewise.
	(selftest::test_one_liner_fixit_remove_utf8): Likewise.
	(selftest::test_one_liner_fixit_replace_utf8): Likewise.
	(selftest::test_one_liner_fixit_replace_non_equal_range_utf8):
	Likewise.
	(selftest::test_one_liner_fixit_replace_equal_secondary_range_utf8):
	Likewise.
	(selftest::test_one_liner_fixit_validation_adhoc_locations_utf8):
	Likewise.
	(selftest::test_one_liner_many_fixits_1_utf8): Likewise.
	(selftest::test_one_liner_many_fixits_2_utf8): Likewise.
	(selftest::test_one_liner_labels_utf8): Likewise.
	(selftest::test_one_liner_colorized_utf8): Likewise.
	(selftest::test_add_location_if_nearby): Likewise.
	(selftest::test_diagnostic_show_locus_fixit_lines): Likewise.
	(selftest::test_overlapped_fixit_printing): Likewise.
	(selftest::test_overlapped_fixit_printing_utf8): Likewise.
	(selftest::test_overlapped_fixit_printing_2): Likewise.
	(selftest::test_fixit_insert_containing_newline): Likewise.
	(selftest::test_fixit_insert_containing_newline_2): Likewise.
	(selftest::test_fixit_replace_containing_newline): Likewise.
	(selftest::test_fixit_deletion_affecting_newline): Likewise.
	(selftest::test_tab_expansion): Likewise.
	(selftest::test_escaping_bytes_1): Likewise.
	(selftest::test_escaping_bytes_2): Likewise.
	(selftest::test_line_numbers_multiline_range): Likewise.
	* diagnostic.cc (file_name_as_prefix): Likewise.
	(diagnostic_set_caret_max_width): Likewise.
	(diagnostic_context::initialize): Likewise.
	(diagnostic_context::color_init): Likewise.
	(diagnostic_context::urls_init): Likewise.
	(diagnostic_context::finish): Likewise.
	(diagnostic_context::get_location_text): Likewise.
	(diagnostic_build_prefix): Likewise.
	(diagnostic_context::report_current_module): Likewise.
	(default_diagnostic_starter): Likewise.
	(default_diagnostic_start_span_fn): Likewise.
	(default_diagnostic_finalizer): Likewise.
	(diagnostic_context::report_diagnostic): Likewise.
	(diagnostic_append_note): Likewise.
	(diagnostic_context::error_recursion): Likewise.
	(fancy_abort): Likewise.
	* diagnostic.h (diagnostic_context::set_show_highlight_colors):
	Likewise.
	(diagnostic_context::printer): Rename to...
	(diagnostic_context::m_printer): ...this.
	(diagnostic_format_decoder): Rename diagnostic_context's "printer"
	field to "m_printer".
	(diagnostic_prefixing_rule): Likewise.
	(diagnostic_ready_p): Likewise.
	* gimple-ssa-warn-access.cc (pass_waccess::maybe_warn_memmodel):
	Likewise.
	* langhooks.cc (lhd_print_error_function): Likewise.
	* lto-wrapper.cc (print_lto_docs_link): Likewise.
	* opts-global.cc (init_options_once): Likewise.
	* opts.cc (common_handle_option): Likewise.
	* simple-diagnostic-path.cc (simple_diagnostic_path_cc_tests):
	Likewise.
	* text-art/dump.h (dump_to_file<T>): Likewise.
	* toplev.cc (announce_function): Likewise.
	(toplev::main): Likewise.
	* tree-diagnostic.cc (default_tree_diagnostic_starter): Likewise.
	* tree.cc (escaped_string::escape): Likewise.
	(selftest::test_escaped_strings): Likewise.

gcc/ada/ChangeLog:
	PR other/116613
	* gcc-interface/misc.cc (internal_error_function): Rename
	diagnostic_context's "printer" field to "m_printer".

gcc/analyzer/ChangeLog:
	PR other/116613
	* access-diagram.cc (access_range::dump): Rename
	diagnostic_context's "printer" field to "m_printer".
	* analyzer-language.cc (on_finish_translation_unit): Likewise.
	* analyzer.cc (make_label_text): Likewise.
	(make_label_text_n): Likewise.
	* call-details.cc (call_details::dump): Likewise.
	* call-summary.cc (call_summary::dump): Likewise.
	(call_summary_replay::dump): Likewise.
	* checker-event.cc (checker_event::debug): Likewise.
	* constraint-manager.cc (range::dump): Likewise.
	(bounded_range::dump): Likewise.
	(bounded_ranges::dump): Likewise.
	(constraint_manager::dump): Likewise.
	* diagnostic-manager.cc
	(diagnostic_manager::emit_saved_diagnostic): Likewise.
	* engine.cc (exploded_node::dump): Likewise.
	(exploded_path::dump): Likewise.
	(run_checkers): Likewise.
	* kf-analyzer.cc (kf_analyzer_dump_escaped::impl_call_pre):
	Likewise.
	* pending-diagnostic.cc (evdesc::event_desc::formatted_print):
	Likewise.
	* program-point.cc (function_point::print_source_line): Likewise.
	(program_point::dump): Likewise.
	* program-state.cc (extrinsic_state::dump_to_file): Likewise.
	(sm_state_map::dump): Likewise.
	(program_state::dump_to_file): Likewise.
	* ranges.cc (symbolic_byte_offset::dump): Likewise.
	(symbolic_byte_range::dump): Likewise.
	* region-model-reachability.cc (reachable_regions::dump): Likewise.
	* region-model.cc (region_to_value_map::dump): Likewise.
	(region_model::dump): Likewise.
	(model_merger::dump): Likewise.
	* region.cc (region_offset::dump): Likewise.
	(region::dump): Likewise.
	* sm-malloc.cc (deallocator_set::dump): Likewise.
	(sufficiently_similar_p): Likewise.
	* store.cc (uncertainty_t::dump): Likewise.
	(binding_key::dump): Likewise.
	(binding_map::dump): Likewise.
	(binding_cluster::dump): Likewise.
	(store::dump): Likewise.
	* supergraph.cc (supergraph::dump_dot_to_file): Likewise.
	(superedge::dump): Likewise.
	* svalue.cc (svalue::dump): Likewise.

gcc/c-family/ChangeLog:
	PR other/116613
	* c-format.cc (selftest::test_type_mismatch_range_labels): Rename
	diagnostic_context's "printer" field to "m_printer".
	(selftest::test_type_mismatch_range_labels): Likewise.
	* c-opts.cc (c_diagnostic_finalizer): Likewise.

gcc/c/ChangeLog:
	PR other/116613
	* c-objc-common.cc (c_initialize_diagnostics): Rename
	diagnostic_context's "printer" field to "m_printer".

gcc/cp/ChangeLog:
	PR other/116613
	* error.cc (cxx_initialize_diagnostics): Rename
	diagnostic_context's "printer" field to "m_printer".
	(cxx_print_error_function): Likewise.
	(cp_diagnostic_starter): Likewise.
	(cp_print_error_function): Likewise.
	(print_instantiation_full_context): Likewise.
	(print_instantiation_partial_context_line): Likewise.
	(maybe_print_constexpr_context): Likewise.
	(print_location): Likewise.
	(print_constrained_decl_info): Likewise.
	(print_concept_check_info): Likewise.
	(print_constraint_context_head): Likewise.
	(print_requires_expression_info): Likewise.
	* module.cc (noisy_p): Likewise.

gcc/d/ChangeLog:
	PR other/116613
	* d-diagnostic.cc (d_diagnostic_report_diagnostic): Rename
	diagnostic_context's "printer" field to "m_printer".

gcc/fortran/ChangeLog:
	PR other/116613
	* error.cc (gfc_clear_pp_buffer): Rename diagnostic_context's
	"printer" field to "m_printer".
	(gfc_warning): Likewise.
	(gfc_diagnostic_build_kind_prefix): Likewise.
	(gfc_diagnostic_build_locus_prefix): Likewise.
	(gfc_diagnostic_starter): Likewise.
	(gfc_diagnostic_starter): Likewise.
	(gfc_diagnostic_start_span): Likewise.
	(gfc_diagnostic_finalizer): Likewise.
	(gfc_warning_check): Likewise.
	(gfc_error_opt): Likewise.
	(gfc_error_check): Likewise.

gcc/jit/ChangeLog:
	PR other/116613
	* jit-playback.cc (add_diagnostic): Rename diagnostic_context's
	"printer" field to "m_printer".

gcc/testsuite/ChangeLog:
	PR other/116613
	* gcc.dg/plugin/analyzer_cpython_plugin.c (dump_refcnt_info):
	Update for renaming of field "printer" to "m_printer".
	* gcc.dg/plugin/diagnostic_group_plugin.c
	(test_diagnostic_starter): Likewise.
	(test_diagnostic_start_span_fn): Likewise.
	(test_output_format::on_begin_group): Likewise.
	(test_output_format::on_end_group): Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_paths.c: Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
	(custom_diagnostic_finalizer): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-09-09 19:38:12 -04:00
David Malcolm
38dc2c6471 SARIF output: fix schema URL [§3.13.3, PR116603]
We were using
  https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json
as the URL for the SARIF 2.1 schema, but this is now a 404.

Update it to the URL listed in the spec (§3.13.3 "$schema property"),
which is:
  https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json
and update the copy in
  gcc/testsuite/lib/sarif-schema-2.1.0.json
used by the "verify-sarif-file" DejaGnu directive to the version found at
that latter URL; the sha256 sum changes
from: 2b19d2358baef0251d7d24e208d05ffabf1b2a3ab5e1b3a816066fc57fd4a7e8
  to: c3b4bb2d6093897483348925aaa73af03b3e3f4bd4ca38cef26dcb4212a2682e

Doing so added a validation error on
  c-c++-common/diagnostic-format-sarif-file-pr111700.c
for which we emit this textual output:
  this-file-does-not-exist.c: warning: #warning message [-Wcpp]
with no line number, and these invalid SARIF regions within the
physical location of the warning:
  "region": {"startColumn": 2,
             "endColumn": 9},
  "contextRegion": {}

This is due to this directive:
  # 0 "this-file-does-not-exist.c"
with line number 0.

The patch fixes this by not creating regions that have startLine <= 0.

gcc/ChangeLog:
	PR other/116603
	* diagnostic-format-sarif.cc (SARIF_SCHEMA): Update URL.
	(sarif_builder::maybe_make_region_object): Don't create regions
	with startLine <= 0.
	(sarif_builder::maybe_make_region_object_for_context): Likewise.

gcc/testsuite/ChangeLog:
	PR other/116603
	* gcc.dg/plugin/diagnostic-test-metadata-sarif.py (test_basics):
	Update expected schema URL.
	* gcc.dg/plugin/diagnostic-test-paths-multithreaded-sarif.py:
	Likewise.
	* gcc.dg/sarif-output/test-include-chain-1.py: Likewise.
	* gcc.dg/sarif-output/test-include-chain-2.py: Likewise.
	* gcc.dg/sarif-output/test-missing-semicolon.py: Likewise.
	* gcc.dg/sarif-output/test-no-diagnostics.py: Likewise.
	* gcc.dg/sarif-output/test-werror.py: Likewise.
	* lib/sarif-schema-2.1.0.json: Update with copy downloaded from
	https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-09-09 19:38:11 -04:00
Uros Bizjak
1da79de527 i386: Use offsetable address constraint for double-word memory operands
Double-word memory operands are accessed as their high and low part, so the
memory location has to be offsettable.  Use "o" constraint instead of "m"
for double-word memory operands.

gcc/ChangeLog:

	* config/i386/i386.md (*insvdi_lowpart_1): Use "o" constraint
	instead of "m" for double-word mode memory operands.
	(*add<dwi>3_doubleword_zext): Ditto.
	(*addv<dwi>4_doubleword_1): Use "jO" constraint instead of "jM"
	for double-word mode memory operands.
2024-09-09 22:34:29 +02:00
David Malcolm
6e35b0e857 analyzer: fix "unused variable 'summary_cast_reg'" warning
I missed this in r15-1108-g70f26314b62e2d.

gcc/analyzer/ChangeLog:
	* call-summary.cc
	(call_summary_replay::convert_region_from_summary_1): Drop unused
	local "summary_cast_reg"

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-09-09 15:30:42 -04:00
Andrew Pinski
75a4143d69 middle-end: also optimized popcount(a) <= 1 [PR90693]
This expands on optimizing `popcount(a) == 1` to also handle
`popcount(a) <= 1`. `<= 1` can be expanded as `(a & -a) == 0`
like what is done for `== 1` if we know that a was nonzero.
We have to do the optimization in 2 places due to if we have
an optab entry for popcount or not.

Built and tested for aarch64-linux-gnu.

	PR middle-end/90693

gcc/ChangeLog:

	* internal-fn.cc (expand_POPCOUNT): Handle the second argument
	being `-1` for `<= 1`.
	* tree-ssa-math-opts.cc (match_single_bit_test): Handle LE/GT
	cases.
	(math_opts_dom_walker::after_dom_children): Call match_single_bit_test
	for LE_EXPR/GT_EXPR also.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/popcnt-le-1.c: New test.
	* gcc.target/aarch64/popcnt-le-2.c: New test.
	* gcc.target/aarch64/popcnt-le-3.c: New test.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-09-09 07:38:55 -07:00
John David Anglin
8f3b402b6f hppa: Don't canonicalize operand order of scaled index addresses
pa_print_operand handles both operand orders for scaled index
addresses, so it isn't necessary to canonicalize the order of
operands.

2024-09-09  John David Anglin  <danglin@gcc.gnu.org>

gcc/ChangeLog:

	* config/pa/pa.cc (pa_legitimate_address_p): Don't
	canonicalize operand order of scaled index addresses.
2024-09-09 10:23:00 -04:00
Richard Biener
e7d5b9aa02 tree-optimization/116514 - handle pointer difference in bit-CCP
When evaluating the difference of two aligned pointers in CCP we
fail to handle the EXACT_DIV_EXPR by the element size that occurs.
The testcase then also exercises modulo to test alignment but
modulo by a power-of-two isn't handled either.

	PR tree-optimization/116514
	* tree-ssa-ccp.cc (bit_value_binop): Handle EXACT_DIV_EXPR
	like TRUNC_DIV_EXPR.  Handle exact division of a signed value
	by a power-of-two like a shift.  Handle unsigned division by
	a power-of-two like a shift.
	Handle unsigned TRUNC_MOD_EXPR by power-of-two, handle signed
	TRUNC_MOD_EXPR by power-of-two if the result is zero.

	* gcc.dg/tree-ssa/ssa-ccp-44.c: New testcase.
2024-09-09 15:02:26 +02:00
Richard Biener
898e3e95a6 tree-optimization/116647 - wrong classified double reduction
The following avoids classifying a double reduction that's not
actually a reduction in the outer loop (because its value isn't
used outside of the outer loop).  This avoids us ICEing on the
unexpected stmt/SLP node arrangement.

	PR tree-optimization/116647
	* tree-vect-loop.cc (vect_is_simple_reduction): Add missing
	check to double reduction detection.

	* gcc.dg/torture/pr116647.c: New testcase.
	* gcc.dg/vect/no-scevccp-pr86725-2.c: Adjust expected pattern.
	* gcc.dg/vect/no-scevccp-pr86725-4.c: Likewise.
2024-09-09 12:59:38 +02:00
Eric Botcazou
0171793aca Silence warning for 32-bit targets
gcc/testsuite
	PR ada/115250
	* gnat.dg/opt58_pkg.ads: Convert to Unix line ending.
	* gnat.dg/opt58.adb: Likewise and pass -gnatws to the compiler.
2024-09-09 12:32:10 +02:00
Eric Botcazou
4645aa79a6 Remove problematic declaration for 32-bit targets
gcc/testsuite
	PR ada/115246
	* gnat.dg/alignment14.adb (My_Int2): Delete.
	(Arr2): Likewise.
2024-09-09 12:32:10 +02:00
Andrew Pinski
2067df800d gimple-fold: Move optimizing memcpy to memset to fold_stmt from fab
I noticed this folding inside fab could be done else where and could
even improve inlining decisions and a few other things so let's
move it to fold_stmt.
It also fixes PR 116601 because places which call fold_stmt already
have to deal with the stmt becoming a non-throw statement.

For the fix for PR 116601 on the branches should be the original patch
rather than a backport of this one.

Bootstrapped and tested on x86_64-linux-gnu.

	PR tree-optimization/116601

gcc/ChangeLog:

	* gimple-fold.cc (optimize_memcpy_to_memset): Move
	from tree-ssa-ccp.cc and rename. Also return true
	if the optimization happened.
	(gimple_fold_builtin_memory_op): Call
	optimize_memcpy_to_memset.
	(fold_stmt_1): Call optimize_memcpy_to_memset for
	load/store copies.
	* tree-ssa-ccp.cc (optimize_memcpy): Delete.
	(pass_fold_builtins::execute): Remove code that
	calls optimize_memcpy.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr78408-1.c: Adjust dump scan to match where
	the optimization now happens.
	* g++.dg/torture/except-2.C: New test.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-09-09 01:12:52 -07:00
Richard Biener
924855daa2 Amend gcc.dg/vect/fast-math-vect-call-2.c
There was a reported regression on x86-64 with -march=cascadelake
and -m32 where epilogue vectorization causes a different number of
SLPed loops.  Fixed by disabling epilogue vectorization for the
testcase.

	* gcc.dg/vect/fast-math-vect-call-2.c: Disable epilogue
	vectorization.
2024-09-09 09:43:44 +02:00
Jakub Jelinek
765875e2c1 testsuite: Fix up pr116588.c test [PR116588]
The test as committed without the tree-vrp.cc change only FAILs with
FAIL: gcc.dg/pr116588.c scan-tree-dump-not vrp2 "0 != 0"
The DEBUG code in there was just to make it easier to debug, but doesn't
actually fail when the test is miscompiled.
We don't need such debugging code in simple tests like that, but it is
useful if they abort when miscompiled.

With this patch without the tree-vrp.cc change I see
FAIL: gcc.dg/pr116588.c execution test
FAIL: gcc.dg/pr116588.c scan-tree-dump-not vrp2 "0 != 0"
and with it it passes.

2024-09-09  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/116588
	* gcc.dg/pr116588.c: Remove -DDEBUG from dg-options.
	(main): Remove debugging code and simplify.
2024-09-09 09:43:31 +02:00
Thomas Schwinge
00b35424cb Match: Fix ordered and nonequal: Fix 'gcc.dg/opt-ordered-and-nonequal-1.c' re 'LOGICAL_OP_NON_SHORT_CIRCUIT' [PR116635]
Fix up to make 'gcc.dg/opt-ordered-and-nonequal-1.c' of
commit 91421e21e8
"Match: Fix ordered and nonequal" work for default
'LOGICAL_OP_NON_SHORT_CIRCUIT == false' configurations.

	PR testsuite/116635
	gcc/testsuite/
	* gcc.dg/opt-ordered-and-nonequal-1.c: Fix re
	'LOGICAL_OP_NON_SHORT_CIRCUIT'.
2024-09-09 09:28:39 +02:00
Andrew Pinski
d1b3d099dd phiopt: Small refactoring/cleanup of non-ssa name case of factor_out_conditional_operation
This small cleanup removes a redundant check for gimple_assign_cast_p and reformats
based on that. Also changes the if statement that checks if the integral type and the
check to see if the constant fits into the new type such that it returns null
and reformats based on that.

Also moves the check for has_single_use earlier so it is less complex still a cheaper
check than some of the others (like the check on the integer side).

This was noticed when adding a few new things to factor_out_conditional_operation
but those are not ready to submit yet.

Note there are no functional difference with this change.

Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

	* tree-ssa-phiopt.cc (factor_out_conditional_operation): Move the has_single_use
	checks much earlier. Remove redundant check for gimple_assign_cast_p.
	Change around the check if the integral consts fits into the new type.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-09-09 00:21:45 -07:00
Haochen Jiang
91bc2ad28c doc: Enhance Intel CPU documentation
This patch will add those recent aliased CPU names into documentation
for clearness.

gcc/ChangeLog:

	PR target/116617
	* doc/invoke.texi: Add meteorlake, raptorlake and lunarlake.
2024-09-09 14:54:44 +08:00
GCC Administrator
39a01fcf24 Daily bump. 2024-09-09 00:17:47 +00:00