diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2022-11-04 11:13:55 +0100 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2022-11-04 11:13:55 +0100 |
commit | ac4836203ad97b642b88defdc2f986a3c356201b (patch) | |
tree | 79c49c91b7edfd400abb36891f67826478d2f1f4 /gcc | |
parent | f8a1c619be162d4446048f3d5678002859b561c7 (diff) | |
parent | 14a92220a2f061328aae32ee6b5cdc7f62375902 (diff) | |
download | gcc-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/ChangeLog | 33 | ||||
-rw-r--r-- | gcc/DATESTAMP | 2 | ||||
-rw-r--r-- | gcc/c/ChangeLog | 19 | ||||
-rw-r--r-- | gcc/c/c-typeck.cc | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 3 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 19 | ||||
-rw-r--r-- | gcc/cp/constexpr.cc | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 48 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr107358.c | 30 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/constexpr-105774.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.target/i386/pr107404.C | 53 | ||||
-rw-r--r-- | gcc/tree-cfg.cc | 2 |
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; } |