aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2022-11-04 11:13:55 +0100
committerTobias Burnus <tobias@codesourcery.com>2022-11-04 11:13:55 +0100
commitac4836203ad97b642b88defdc2f986a3c356201b (patch)
tree79c49c91b7edfd400abb36891f67826478d2f1f4 /gcc
parentf8a1c619be162d4446048f3d5678002859b561c7 (diff)
parent14a92220a2f061328aae32ee6b5cdc7f62375902 (diff)
downloadgcc-ac4836203ad97b642b88defdc2f986a3c356201b.zip
gcc-ac4836203ad97b642b88defdc2f986a3c356201b.tar.gz
gcc-ac4836203ad97b642b88defdc2f986a3c356201b.tar.bz2
Merge branch 'releases/gcc-12' into devel/omp/gcc-12
Merge up to r12-8891-g14a92220a2f061328aae32ee6b5cdc7f62375902 (4th Nov 2022) Note: This includes in principle some OpenMP/libgomp commits, but those have been cherry picked already.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog33
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/c/ChangeLog19
-rw-r--r--gcc/c/c-typeck.cc4
-rw-r--r--gcc/config/i386/i386.md3
-rw-r--r--gcc/cp/ChangeLog19
-rw-r--r--gcc/cp/constexpr.cc12
-rw-r--r--gcc/testsuite/ChangeLog48
-rw-r--r--gcc/testsuite/c-c++-common/pr107358.c30
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-105774.C15
-rw-r--r--gcc/testsuite/g++.target/i386/pr107404.C53
-rw-r--r--gcc/tree-cfg.cc2
12 files changed, 235 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32c8d0a..197fa08 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,36 @@
+2022-11-03 Uros Bizjak <ubizjak@gmail.com>
+
+ Backported from master:
+ 2022-11-03 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/107404
+ * config/i386/i386.md (eliminate reg-reg move by inverting the
+ condition of a cmove #2 peephole2): Check if eliminated move
+ initialized a register, used in the moved instruction.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-10-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/107121
+ * tree-cfg.cc (verify_gimple_call): Fix a typo in diagnostics,
+ DEFFERED_INIT -> DEFERRED_INIT.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-09-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/107001
+ * omp-low.cc (lower_omp_taskgroup): Don't add GOMP_RETURN statement
+ at the end.
+ * omp-expand.cc (build_omp_regions_1): Clarify GF_OMP_TARGET_KIND_DATA
+ is not stand-alone directive. For GIMPLE_OMP_TASKGROUP, also don't
+ update parent.
+ (omp_make_gimple_edges) <case GIMPLE_OMP_TASKGROUP>: Reset
+ cur_region back after new_omp_region.
+
2022-10-28 Julian Brown <julian@codesourcery.com>
Backported from master:
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index a8fe89b..c96f224 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20221102
+20221104
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 0254f4e..9ca66f0 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,22 @@
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-10-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/107358
+ * c-typeck.cc (build_binary_op): Pass operands before excess precision
+ promotions to scalar_to_vector call.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-09-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/106981
+ * c-typeck.cc (c_tree_equal): Only strip NON_LVALUE_EXPRs at the
+ start. For CONSTANT_CLASS_P or CASE_CONVERT: return false if t1 and
+ t2 have different types.
+
2022-09-19 Marek Polacek <polacek@redhat.com>
Backported from master:
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 87bc97f..9dadbc1 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -11918,8 +11918,8 @@ build_binary_op (location_t location, enum tree_code code,
if ((gnu_vector_type_p (type0) && code1 != VECTOR_TYPE)
|| (gnu_vector_type_p (type1) && code0 != VECTOR_TYPE))
{
- enum stv_conv convert_flag = scalar_to_vector (location, code, op0, op1,
- true);
+ enum stv_conv convert_flag = scalar_to_vector (location, code, orig_op0,
+ orig_op1, true);
switch (convert_flag)
{
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 1c4781d..624d85c 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -20745,7 +20745,8 @@
&& REGNO (operands[2]) != REGNO (operands[1])
&& peep2_reg_dead_p (2, operands[1])
&& peep2_reg_dead_p (4, operands[2])
- && !reg_overlap_mentioned_p (operands[0], operands[3])"
+ && !reg_overlap_mentioned_p (operands[0], operands[3])
+ && !reg_mentioned_p (operands[2], operands[6])"
[(parallel [(set (match_dup 7) (match_dup 8))
(set (match_dup 1) (match_dup 9))])
(set (match_dup 0) (match_dup 3))
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9dc4d05..4b4e6d5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,22 @@
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-10-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/105774
+ * constexpr.cc (cxx_eval_increment_expression): For signed types
+ that promote to int, evaluate PLUS_EXPR or MINUS_EXPR in int type.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-09-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/106829
+ * semantics.cc (finish_omp_target_clauses): If current_function_decl
+ isn't a nonstatic member function, don't set data.current_object to
+ non-NULL.
+
2022-10-13 Marek Polacek <polacek@redhat.com>
Backported from master:
diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index 28f8785..3566f6e 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -6040,6 +6040,18 @@ cxx_eval_increment_expression (const constexpr_ctx *ctx, tree t,
offset = fold_build1 (NEGATE_EXPR, TREE_TYPE (offset), offset);
mod = fold_build2 (POINTER_PLUS_EXPR, type, val, offset);
}
+ else if (c_promoting_integer_type_p (type)
+ && !TYPE_UNSIGNED (type)
+ && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
+ {
+ offset = fold_convert (integer_type_node, offset);
+ mod = fold_convert (integer_type_node, val);
+ tree t = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, integer_type_node,
+ mod, offset);
+ mod = fold_convert (type, t);
+ if (TREE_OVERFLOW_P (mod) && !TREE_OVERFLOW_P (t))
+ TREE_OVERFLOW (mod) = false;
+ }
else
mod = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, type, val, offset);
if (!ptr)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 600ec62..674b98d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,51 @@
+2022-11-03 Uros Bizjak <ubizjak@gmail.com>
+
+ Backported from master:
+ 2022-11-03 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/107404
+ * g++.target/i386/pr107404.C: New test.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-10-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/107358
+ * c-c++-common/pr107358.c: New test.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-10-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/105774
+ * g++.dg/cpp1y/constexpr-105774.C: New test.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-09-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/107001
+ * c-c++-common/gomp/pr107001.c: New test.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-09-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/106981
+ * c-c++-common/gomp/pr106981.c: New test.
+
+2022-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from master:
+ 2022-09-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/106829
+ * g++.dg/gomp/pr106829.C: New test.
+
2022-10-29 José Rui Faustino de Sousa <jrfsousa@gmail.com>
Backported from master:
diff --git a/gcc/testsuite/c-c++-common/pr107358.c b/gcc/testsuite/c-c++-common/pr107358.c
new file mode 100644
index 0000000..d976da7
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr107358.c
@@ -0,0 +1,30 @@
+/* PR c++/107358 */
+/* { dg-do compile { target c } } */
+/* { dg-options "-O2 -fexcess-precision=standard" } */
+
+typedef float __attribute__((vector_size (4 * sizeof (float)))) A;
+typedef double __attribute__((vector_size (2 * sizeof (double)))) B;
+
+void
+foo (A *x)
+{
+ *x = *x - 124.225514990f;
+}
+
+void
+bar (A *x, float y)
+{
+ *x = *x - y;
+}
+
+void
+baz (B *x)
+{
+ *x = *x + 124.225514990f;
+}
+
+void
+qux (B *x, double y)
+{
+ *x = *x + y;
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-105774.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-105774.C
new file mode 100644
index 0000000..8ca6fce
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-105774.C
@@ -0,0 +1,15 @@
+// PR c++/105774
+// { dg-do compile { target c++14 } }
+
+constexpr signed char
+foo ()
+{
+#if __SCHAR_MAX__ < __INT_MAX__
+ signed char x = __SCHAR_MAX__;
+#else
+ signed char x = 0;
+#endif
+ return ++x;
+}
+
+constexpr auto a = foo ();
diff --git a/gcc/testsuite/g++.target/i386/pr107404.C b/gcc/testsuite/g++.target/i386/pr107404.C
new file mode 100644
index 0000000..e47d0fd
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr107404.C
@@ -0,0 +1,53 @@
+// PR target/107404
+// { dg-do run }
+// { dg-options "-O3" }
+
+unsigned long long a;
+void b(unsigned long long *f, int p2) { *f ^= p2; }
+long c;
+char e, i;
+short g, m;
+long long ab[1][25][21][22];
+unsigned long long aa[1][21][22];
+unsigned long long ae[1][25][21][21];
+long long ac[129360];
+char ad[25][1][21];
+char ah[1][25][1][21];
+short af[100];
+long max(long f, unsigned long p2) { return f < p2 ? p2 : f; }
+const int &max2(const int &f, const int &p2) { return f < p2 ? p2 : f; }
+void foo(unsigned f, unsigned p2, char l, char p4, long long n[][25][21][22],
+ unsigned long long p6[][21][22], unsigned long long u[][25][21][21]) {
+ long an;
+ for (int j = 0; j < 4; j = p2)
+ for (short k = 0; k < 7; k += 2)
+ for (short o = 0; o < (short)p2 + 21742; o = l) {
+ for (signed char p = 2; p < 9; p += p4)
+ if (p6[j][o][p])
+ for (long q(3); 4 ? n[0][k][o][0] : 0;
+ q += p6[0][o][0] ? p6[j][0][p] : 0)
+ ac[j + q] = 5066799590;
+ for (long r(p4 - 16); r < 21; r += 4) {
+ ad[k][o][r] = max(u[j][k][o][r], f + u[j][k][o][r]);
+ long d = u[j][k][o][r];
+ an = d < p2 ? p2 : d;
+ e = ah[j][k][o][r] = an;
+ af[o * r] = i;
+ }
+ for (short s(c); s < (short)p2; s = 2)
+ for (short am(m); am; am = max2(3, p2))
+ for (long y = 0; y; y = 3)
+ for (short t(0); t < max2(g, 0);)
+ ;
+ }
+}
+int main() {
+ foo(7, 1558227751, 104, 16, ab, aa, ae);
+ for (unsigned long v = 0; v < 5; ++v)
+ for (unsigned long w = 0; w < 1; ++w)
+ for (unsigned long x = 0; x < 21; ++x)
+ b(&a, ad[v][w][x]);
+
+ if (a)
+ __builtin_abort();
+}
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index 344d671..ce17a48 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -3487,7 +3487,7 @@ verify_gimple_call (gcall *stmt)
if (is_constant_size_arg0 && is_constant_size_lhs)
if (maybe_ne (size_from_arg0, size_from_lhs))
{
- error ("%<DEFFERED_INIT%> calls should have same "
+ error ("%<DEFERRED_INIT%> calls should have same "
"constant size for the first argument and LHS");
return true;
}