aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-10-13 15:54:17 +0200
committerMartin Liska <mliska@suse.cz>2022-10-13 15:54:17 +0200
commitbd21c04269deded2c7476ceca1100a26f28ea526 (patch)
tree197bf75eedac69362078a4ccc0afe5615c45c327 /gcc/testsuite
parentd9e7934d25da4a78ffef1f738206aa1d897911df (diff)
parent786e4c024f941671a233f5779d73a5d22f4e9588 (diff)
downloadgcc-bd21c04269deded2c7476ceca1100a26f28ea526.zip
gcc-bd21c04269deded2c7476ceca1100a26f28ea526.tar.gz
gcc-bd21c04269deded2c7476ceca1100a26f28ea526.tar.bz2
Merge branch 'master' into devel/sphinx
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog182
-rw-r--r--gcc/testsuite/c-c++-common/pointer-to-fn1.c18
-rw-r--r--gcc/testsuite/g++.dg/abi/lambda-ctx1-17.C10
-rw-r--r--gcc/testsuite/g++.dg/abi/lambda-ctx1-18.C11
-rw-r--r--gcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C9
-rw-r--r--gcc/testsuite/g++.dg/abi/lambda-ctx1.h20
-rw-r--r--gcc/testsuite/g++.dg/abi/lambda-vis.C8
-rw-r--r--gcc/testsuite/g++.dg/abi/macro0.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/Wredundant-move10.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/Wredundant-move7.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/move-return2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/move-return4.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/move-return5.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/ref-qual20.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/consteval-defarg3.C23
-rw-r--r--gcc/testsuite/g++.dg/modules/pr99377-2_a.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/pr99377-2_b.C8
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-8_a.H9
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-8_b.C8
-rw-r--r--gcc/testsuite/gcc.dg/autopar/pr107153.c2
-rw-r--r--gcc/testsuite/gcc.dg/c2x-float-10.c6
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr60014-1.c9
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr60014-1.h5
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr60014-2.c5
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr60014-2.h5
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr60014-3.c16
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr60014-3.h2
-rw-r--r--gcc/testsuite/gcc.dg/pr104464.c2
-rwxr-xr-xgcc/testsuite/gcc.dg/pr54346.c13
-rw-r--r--gcc/testsuite/gcc.dg/signbit-2.c5
-rw-r--r--gcc/testsuite/gcc.dg/signbit-5.c1
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr107195-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr107195-2.c16
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c17
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp-float-signbit-3.c15
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-68.c5
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-3.c5
-rw-r--r--gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr107212-1.c27
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr107212-2.c23
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr107229-1.c16
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr107229-2.c18
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr107229-3.c19
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr33953.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr65947-12.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr65947-13.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr80631-2.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-reduc-4.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c40
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c43
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c44
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c45
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c42
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c42
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c39
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c42
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c43
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c42
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c42
-rw-r--r--gcc/testsuite/gcc.target/arc/enter-dw2-1.c28
-rw-r--r--gcc/testsuite/gcc.target/arc/tmac-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr107093.c38
-rw-r--r--gcc/testsuite/gcc.target/i386/pr107185.c8
-rw-r--r--gcc/testsuite/gcc.target/pru/ashiftdi-1.c53
-rw-r--r--gcc/testsuite/gcc.target/pru/lshiftrtdi-1.c53
-rw-r--r--gcc/testsuite/gcc.target/pru/pr106562-1.c9
-rw-r--r--gcc/testsuite/gcc.target/pru/pr106562-2.c9
-rw-r--r--gcc/testsuite/gcc.target/pru/pr106562-3.c9
-rw-r--r--gcc/testsuite/gcc.target/pru/pr106562-4.c159
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pragma-3.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/riscv_vector.h11
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/user-1.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/user-4.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vread_csr.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vwrite_csr.c2
-rw-r--r--gcc/testsuite/gfortran.dg/pr107000.f9050
-rw-r--r--gcc/testsuite/gfortran.dg/pr107215.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/pr107217.f9018
-rw-r--r--gcc/testsuite/lib/target-supports.exp3
87 files changed, 1532 insertions, 42 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index af8fc3f..737ee21 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,185 @@
+2022-10-12 Lewis Hyatt <lhyatt@gmail.com>
+
+ PR preprocessor/60014
+ PR preprocessor/60723
+ * gcc.dg/cpp/pr60014-1.c: New test.
+ * gcc.dg/cpp/pr60014-1.h: New test.
+ * gcc.dg/cpp/pr60014-2.c: New test.
+ * gcc.dg/cpp/pr60014-2.h: New test.
+ * gcc.dg/cpp/pr60014-3.c: New test.
+ * gcc.dg/cpp/pr60014-3.h: New test.
+
+2022-10-12 Marek Polacek <polacek@redhat.com>
+
+ * g++.dg/cpp0x/Wredundant-move10.C: Adjust dg-warning.
+ * g++.dg/cpp0x/Wredundant-move7.C: Likewise.
+ * g++.dg/cpp0x/move-return2.C: Remove dg-error.
+ * g++.dg/cpp0x/move-return4.C: Likewise.
+ * g++.dg/cpp0x/ref-qual20.C: Adjust expected return value.
+ * g++.dg/cpp0x/move-return5.C: New test.
+
+2022-10-12 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/107217
+ * gfortran.dg/pr107217.f90: New test.
+
+2022-10-12 Jason Merrill <jason@redhat.com>
+
+ DR 2631
+ * g++.dg/cpp2a/consteval-defarg3.C: New test.
+
+2022-10-11 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/107215
+ * gfortran.dg/pr107215.f90: New test.
+
+2022-10-11 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/100134
+ * g++.dg/modules/tpl-friend-8_a.H: New test.
+ * g++.dg/modules/tpl-friend-8_b.C: New test.
+
+2022-10-11 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/99377
+ * g++.dg/modules/pr99377-2_a.C: New test.
+ * g++.dg/modules/pr99377-2_b.C: New test.
+
+2022-10-11 Aldy Hernandez <aldyh@redhat.com>
+
+ * gcc.dg/tree-ssa/vrp-float-abs-1.c: New test.
+
+2022-10-11 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/107212
+ * gcc.dg/vect/pr107212-1.c: New testcase.
+ * gcc.dg/vect/pr107212-2.c: Likewise.
+
+2022-10-11 Andrew Stubbs <ams@codesourcery.com>
+
+ * gcc.dg/pr104464.c: Xfail on amdgcn.
+ * gcc.dg/signbit-2.c: Likewise.
+ * gcc.dg/signbit-5.c: Likewise.
+ * gcc.dg/vect/bb-slp-68.c: Likewise.
+ * gcc.dg/vect/bb-slp-cond-1.c: Change expectations on amdgcn.
+ * gcc.dg/vect/bb-slp-subgroups-3.c: Likewise.
+ * gcc.dg/vect/no-vfa-vect-depend-2.c: Change expectations for multiple
+ vector sizes.
+ * gcc.dg/vect/pr33953.c: Likewise.
+ * gcc.dg/vect/pr65947-12.c: Likewise.
+ * gcc.dg/vect/pr65947-13.c: Likewise.
+ * gcc.dg/vect/pr80631-2.c: Likewise.
+ * gcc.dg/vect/slp-reduc-4.c: Likewise.
+ * gcc.dg/vect/trapv-vect-reduc-4.c: Likewise.
+ * lib/target-supports.exp (available_vector_sizes): Add more sizes
+ for amdgcn.
+
+2022-10-11 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ * gcc.dg/vect/vect-bitfield-read-1.c: New test.
+ * gcc.dg/vect/vect-bitfield-read-2.c: New test.
+ * gcc.dg/vect/vect-bitfield-read-3.c: New test.
+ * gcc.dg/vect/vect-bitfield-read-4.c: New test.
+ * gcc.dg/vect/vect-bitfield-read-5.c: New test.
+ * gcc.dg/vect/vect-bitfield-read-6.c: New test.
+ * gcc.dg/vect/vect-bitfield-write-1.c: New test.
+ * gcc.dg/vect/vect-bitfield-write-2.c: New test.
+ * gcc.dg/vect/vect-bitfield-write-3.c: New test.
+ * gcc.dg/vect/vect-bitfield-write-4.c: New test.
+ * gcc.dg/vect/vect-bitfield-write-5.c: New test.
+
+2022-10-11 liuhongt <hongtao.liu@intel.com>
+
+ * gcc.target/i386/pr107093.c: New test.
+
+2022-10-11 Aldy Hernandez <aldyh@redhat.com>
+
+ PR tree-optimization/107195
+ * gcc.dg/tree-ssa/pr107195-1.c: New test.
+ * gcc.dg/tree-ssa/pr107195-2.c: New test.
+
+2022-10-11 Liwei Xu <liwei.xu@intel.com>
+ liuhongt <hongtao.liu@intel.com>
+
+ * gcc.dg/pr54346.c: New test.
+
+2022-10-10 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/abi/lambda-ctx1-17.C: New.
+ * g++.dg/abi/lambda-ctx1-18.C: New.
+ * g++.dg/abi/lambda-ctx1-18vs17.C: New.
+ * g++.dg/abi/lambda-ctx1.h: New.
+ * g++.dg/abi/lambda-vis.C: Adjust expected mangles.
+ * g++.dg/abi/macro0.C: Adjust.
+
+2022-10-10 Marek Polacek <polacek@redhat.com>
+
+ PR c++/106937
+ * c-c++-common/pointer-to-fn1.c: New test.
+
+2022-10-10 Kito Cheng <kito.cheng@sifive.com>
+
+ * gcc.target/riscv/rvv/base/riscv_vector.h: New.
+
+2022-10-10 Kito Cheng <kito.cheng@sifive.com>
+
+ * gcc.target/riscv/rvv/base/user-1.c: Add dg-options and drop
+ dg-skip-if.
+
+2022-10-10 Kito Cheng <kito.cheng@sifive.com>
+
+ * gcc.target/riscv/rvv/base/pragma-1.c: Add newline to the end of file.
+ * gcc.target/riscv/rvv/base/pragma-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/pragma-3.c: Ditto.
+ * gcc.target/riscv/rvv/base/user-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/user-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/user-3.c: Ditto.
+ * gcc.target/riscv/rvv/base/user-4.c: Ditto.
+ * gcc.target/riscv/rvv/base/user-5.c: Ditto.
+ * gcc.target/riscv/rvv/base/user-6.c: Ditto.
+ * gcc.target/riscv/rvv/base/vread_csr.c: Ditto.
+ * gcc.target/riscv/rvv/base/vwrite_csr.c: Ditto.
+
+2022-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/107153
+ * gcc.dg/autopar/pr107153.c: Require fgraphite effective target.
+
+2022-10-10 Aldy Hernandez <aldyh@redhat.com>
+
+ * gcc.dg/tree-ssa/vrp-float-signbit-3.c: New test.
+
+2022-10-10 liuhongt <hongtao.liu@intel.com>
+
+ * gcc.target/i386/pr107185.c: New test.
+
+2022-10-10 Claudiu Zissulescu <claziss@gmail.com>
+
+ * gcc.target/arc/tmac-2.c: Update test.
+
+2022-10-10 Claudiu Zissulescu <claziss@gmail.com>
+
+ * gcc.target/arc/enter-dw2-1.c: New file.
+
+2022-10-09 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ PR target/106562
+ * gcc.target/pru/pr106562-1.c: New test.
+ * gcc.target/pru/pr106562-2.c: New test.
+ * gcc.target/pru/pr106562-3.c: New test.
+ * gcc.target/pru/pr106562-4.c: New test.
+
+2022-10-09 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.target/pru/ashiftdi-1.c: New test.
+ * gcc.target/pru/lshiftrtdi-1.c: New test.
+
+2022-10-08 Harald Anlauf <anlauf@gmx.de>
+ Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/107000
+ * gfortran.dg/pr107000.f90: New test.
+
2022-10-07 Marek Polacek <polacek@redhat.com>
PR c++/107085
diff --git a/gcc/testsuite/c-c++-common/pointer-to-fn1.c b/gcc/testsuite/c-c++-common/pointer-to-fn1.c
new file mode 100644
index 0000000..9758854
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pointer-to-fn1.c
@@ -0,0 +1,18 @@
+/* PR c++/106937 */
+/* { dg-options "-fcf-protection" } */
+/* { dg-additional-options "-std=c++11 -fpermissive" { target c++ } } */
+/* Test printing a pointer to function with attribute. */
+
+__attribute__((nocf_check)) typedef void (*FPA1)();
+[[gnu::nocf_check]] typedef void (*FPA2)(int);
+typedef void (*FP1)();
+typedef void (*FP2)(int);
+
+void
+g (FP1 f1, FP2 f2)
+{
+ FPA1 p1 = f1; // { dg-warning {aka 'void \(__attribute__\(\(nocf_check\)\) \*\)\(\)'} }
+ FPA2 p2 = f2; // { dg-warning {aka 'void \(\*\)\(int\) \[\[gnu::nocf_check\]\]'} }
+ FP1 p3 = p1; // { dg-warning {aka 'void \(__attribute__\(\(nocf_check\)\) \*\)\(\)'} }
+ FP2 p4 = p2; // { dg-warning {aka 'void \(\*\)\(int\) \[\[gnu::nocf_check\]\]'} }
+}
diff --git a/gcc/testsuite/g++.dg/abi/lambda-ctx1-17.C b/gcc/testsuite/g++.dg/abi/lambda-ctx1-17.C
new file mode 100644
index 0000000..42f277a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/lambda-ctx1-17.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++20 } }
+// { dg-options -fabi-version=17 }
+
+#include "lambda-ctx1.h"
+
+// These demangle incorrectly, due to a missed substitution candidate
+// { dg-final { scan-assembler {_ZNK1C1fMUlT_E_clIMS_iEEDaS0_:} } }
+// { dg-final { scan-assembler {_ZNK2L2MUlT_T0_E_clIifEEvS_S0_:} } }
+// { dg-final { scan-assembler {_ZNK1B2L3MUlT_T0_E_clIjdEEvS0_S1_:} } }
+// { dg-final { scan-assembler {_Z3fooIN1qMUlvE_EN1qMUlvE0_EEiOT_OT0_:} } }
diff --git a/gcc/testsuite/g++.dg/abi/lambda-ctx1-18.C b/gcc/testsuite/g++.dg/abi/lambda-ctx1-18.C
new file mode 100644
index 0000000..c1c9e27
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/lambda-ctx1-18.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++20 } }
+// { dg-options -fabi-version=18 }
+
+#include "lambda-ctx1.h"
+
+// These correctly include the lambda's extra context as a
+// substitution candidate, and thus demangle as expected
+// { dg-final { scan-assembler {_ZNK1C1fMUlT_E_clIMS_iEEDaS1_:} } }
+// { dg-final { scan-assembler {_ZNK2L2MUlT_T0_E_clIifEEvS0_S1_:} } }
+// { dg-final { scan-assembler {_ZNK1B2L3MUlT_T0_E_clIjdEEvS1_S2_:} } }
+// { dg-final { scan-assembler {_Z3fooIN1qMUlvE_ENS0_UlvE0_EEiOT_OT0_:} } }
diff --git a/gcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C b/gcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C
new file mode 100644
index 0000000..f5ec905
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++20 } }
+// { dg-options {-fabi-version=18 -Wabi=17} }
+
+#include "lambda-ctx1.h"
+
+// { dg-regexp {[^\n]*lambda-ctx1.h:[:0-9]* warning: the mangled name [^\n]* \('_ZNK1B2L3MUlT_T0_E_clIjdEEvS0_S1_'\) and '-fabi-version=18' \('_ZNK1B2L3MUlT_T0_E_clIjdEEvS1_S2_'\) [^\n]*\n} }
+// { dg-regexp {[^\n]*lambda-ctx1.h:[:0-9]* warning: the mangled name [^\n]* \('_ZNK2L2MUlT_T0_E_clIifEEvS_S0_'\) and '-fabi-version=18' \('_ZNK2L2MUlT_T0_E_clIifEEvS0_S1_'\) [^\n]*\n} }
+// { dg-regexp {[^\n]*lambda-ctx1.h:[:0-9]* warning: the mangled name [^\n]* \('_ZNK1C1fMUlT_E_clIMS_iEEDaS0_'\) and '-fabi-version=18' \('_ZNK1C1fMUlT_E_clIMS_iEEDaS1_'\) [^\n]*\n} }
+// { dg-regexp {[^\n]*lambda-ctx1.h:[:0-9]* warning: the mangled name [^\n]* \('_Z3fooIN1qMUlvE_EN1qMUlvE0_EEiOT_OT0_'\) and '-fabi-version=18' \('_Z3fooIN1qMUlvE_ENS0_UlvE0_EEiOT_OT0_'\) [^\n]*\n} }
diff --git a/gcc/testsuite/g++.dg/abi/lambda-ctx1.h b/gcc/testsuite/g++.dg/abi/lambda-ctx1.h
new file mode 100644
index 0000000..9afb66a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/lambda-ctx1.h
@@ -0,0 +1,20 @@
+inline auto L2 = [] <typename T, typename U> (T, U) -> void {};
+namespace B
+{
+ inline auto L3 = [] <typename T, typename U> (T, U) -> void {};
+}
+
+struct C
+{
+ int f = [] (auto){ return 1;}(&C::f);
+ C ();
+};
+
+C::C ()
+{
+ L2 (1, 1.2f);
+ B::L3 (1u, 1.2);
+}
+
+template <typename A, typename B> int foo (A&&, B&&) {return 0;}
+inline int q = foo ([](){}, [](){});
diff --git a/gcc/testsuite/g++.dg/abi/lambda-vis.C b/gcc/testsuite/g++.dg/abi/lambda-vis.C
index c1033f5..81cffcb 100644
--- a/gcc/testsuite/g++.dg/abi/lambda-vis.C
+++ b/gcc/testsuite/g++.dg/abi/lambda-vis.C
@@ -13,9 +13,11 @@ int gvar = gfoo (capture ([]{}));
inline int ivar = ifoo (capture ([]{}));
-// { dg-final { scan-assembler {_?_Z7captureINL4svarMUlvE_EE7WrapperIT_EOS2_:} } }
-// { dg-final { scan-assembler {_?_Z7captureIN4gvarMUlvE_EE7WrapperIT_EOS2_:} } }
-// { dg-final { scan-assembler {_?_Z7captureIN4ivarMUlvE_EE7WrapperIT_EOS2_:} } }
+// These manglings change between ABIs 17 and 18 (the final
+// substitution number).
+// { dg-final { scan-assembler {_?_Z7captureINL4svarMUlvE_EE7WrapperIT_EOS3_:} } }
+// { dg-final { scan-assembler {_?_Z7captureIN4gvarMUlvE_EE7WrapperIT_EOS3_:} } }
+// { dg-final { scan-assembler {_?_Z7captureIN4ivarMUlvE_EE7WrapperIT_EOS3_:} } }
// Calls to the foos are emitted.
// { dg-final { scan-assembler {call[ \t]*_?_Z4sfooI7WrapperINL4svarMUlvE_EEEiT_} { target { i?86-*-* x86_64-*-* } } } }
diff --git a/gcc/testsuite/g++.dg/abi/macro0.C b/gcc/testsuite/g++.dg/abi/macro0.C
index 2d07fcd..4a0e9d0 100644
--- a/gcc/testsuite/g++.dg/abi/macro0.C
+++ b/gcc/testsuite/g++.dg/abi/macro0.C
@@ -1,6 +1,6 @@
// This testcase will need to be kept in sync with c_common_post_options.
// { dg-options "-fabi-version=0" }
-#if __GXX_ABI_VERSION != 1017
+#if __GXX_ABI_VERSION != 1018
#error "Incorrect value of __GXX_ABI_VERSION"
#endif
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wredundant-move10.C b/gcc/testsuite/g++.dg/cpp0x/Wredundant-move10.C
index a215a47..17dd807 100644
--- a/gcc/testsuite/g++.dg/cpp0x/Wredundant-move10.C
+++ b/gcc/testsuite/g++.dg/cpp0x/Wredundant-move10.C
@@ -57,5 +57,5 @@ struct S2: S1 {};
S1 f3(const S2 s)
{
- return std::move(s); // { dg-warning "redundant move" "" { target c++20 } }
+ return std::move(s); // { dg-warning "redundant move" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wredundant-move7.C b/gcc/testsuite/g++.dg/cpp0x/Wredundant-move7.C
index 3fec525..6547777 100644
--- a/gcc/testsuite/g++.dg/cpp0x/Wredundant-move7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/Wredundant-move7.C
@@ -28,7 +28,7 @@ struct S2 : S1 {};
S1
f (S2 s)
{
- return std::move(s); // { dg-warning "redundant move in return statement" "" { target c++20 } }
+ return std::move(s); // { dg-warning "redundant move in return statement" }
}
struct R1 {
@@ -40,7 +40,7 @@ struct R2 : R1 {};
R1
f2 (const R2 s)
{
- return std::move(s); // { dg-warning "redundant move in return statement" "" { target c++20 } }
+ return std::move(s); // { dg-warning "redundant move in return statement" }
}
struct T1 {
@@ -55,5 +55,5 @@ f3 (const T2 s)
{
// Without std::move: const T1 &
// With std::move: const T1 &&
- return std::move(s); // { dg-warning "redundant move in return statement" "" { target c++20 } }
+ return std::move(s); // { dg-warning "redundant move in return statement" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/move-return2.C b/gcc/testsuite/g++.dg/cpp0x/move-return2.C
index 999f2c95..8e750ef 100644
--- a/gcc/testsuite/g++.dg/cpp0x/move-return2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/move-return2.C
@@ -7,5 +7,5 @@ struct S2 : S1 {};
S1
f (S2 s)
{
- return s; // { dg-error "use of deleted function" "" { target c++17_down } }
+ return s;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/move-return4.C b/gcc/testsuite/g++.dg/cpp0x/move-return4.C
index 3fc5808..0f0ca1f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/move-return4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/move-return4.C
@@ -13,5 +13,5 @@ struct A : Base
A<int> foo()
{
A<double> v;
- return v; // { dg-error "cannot bind rvalue reference" "" { target c++17_down } }
+ return v;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/move-return5.C b/gcc/testsuite/g++.dg/cpp0x/move-return5.C
new file mode 100644
index 0000000..695000b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/move-return5.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+// This used to compile in C++11...17 because we performed two
+// separate overload resolutions: one treating the operand as
+// an rvalue, and then (if that resolution fails) another one
+// treating the operand as an lvalue.
+
+struct W {
+ W();
+};
+
+struct F {
+ F(W&);
+ F(W&&) = delete;
+};
+
+F fn ()
+{
+ W w;
+ return w; // { dg-error "use of deleted function" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/ref-qual20.C b/gcc/testsuite/g++.dg/cpp0x/ref-qual20.C
index cfbef30..314f19b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/ref-qual20.C
+++ b/gcc/testsuite/g++.dg/cpp0x/ref-qual20.C
@@ -52,7 +52,7 @@ f5 ()
int
main ()
{
- int return_lval = __cplusplus > 201703L ? -1 : 2;
+ int return_lval = -1;
Y y1 = f (A());
if (y1.y != return_lval)
__builtin_abort ();
diff --git a/gcc/testsuite/g++.dg/cpp2a/consteval-defarg3.C b/gcc/testsuite/g++.dg/cpp2a/consteval-defarg3.C
new file mode 100644
index 0000000..316219c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/consteval-defarg3.C
@@ -0,0 +1,23 @@
+// DR 2631: default args and DMI aren't immediately evaluated
+// { dg-do compile { target c++20 } }
+// { dg-final { scan-assembler-not "foober" } }
+
+consteval int foober();
+
+int g(int = foober());
+struct A { int i = foober(); };
+template <int i = foober()> struct B { };
+struct C
+{
+ consteval C(int = foober()) { }
+};
+int h(C = C());
+
+consteval int foober() { return 42; }
+
+int main() {
+ A a;
+ B<> b;
+ g();
+ h();
+}
diff --git a/gcc/testsuite/g++.dg/modules/pr99377-2_a.C b/gcc/testsuite/g++.dg/modules/pr99377-2_a.C
new file mode 100644
index 0000000..98d1854
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr99377-2_a.C
@@ -0,0 +1,6 @@
+// PR c++/99377
+// { dg-additional-options -fmodules-ts }
+// { dg-module-cmi pr99377_2 }
+export module pr99377_2;
+
+export inline void f() { }
diff --git a/gcc/testsuite/g++.dg/modules/pr99377-2_b.C b/gcc/testsuite/g++.dg/modules/pr99377-2_b.C
new file mode 100644
index 0000000..1d5d79c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr99377-2_b.C
@@ -0,0 +1,8 @@
+// PR c++/99377
+// { dg-additional-options -fmodules-ts }
+// { dg-do link }
+import pr99377_2;
+
+template<class> void g() { f(); }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-8_a.H b/gcc/testsuite/g++.dg/modules/tpl-friend-8_a.H
new file mode 100644
index 0000000..bd22904
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/tpl-friend-8_a.H
@@ -0,0 +1,9 @@
+// PR c++/100134
+// { dg-additional-options -fmodule-header }
+// { dg-module-cmi {} }
+
+namespace std {
+ template<class T> struct A {
+ friend void f(A) { }
+ };
+}
diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-8_b.C b/gcc/testsuite/g++.dg/modules/tpl-friend-8_b.C
new file mode 100644
index 0000000..76d7447
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/tpl-friend-8_b.C
@@ -0,0 +1,8 @@
+// PR c++/100134
+// { dg-additional-options -fmodules-ts }
+// { dg-module-cmi pr100134 }
+export module pr100134;
+
+import "tpl-friend-8_a.H";
+
+export std::A<int> a;
diff --git a/gcc/testsuite/gcc.dg/autopar/pr107153.c b/gcc/testsuite/gcc.dg/autopar/pr107153.c
index 2391a67..dbdc1c1 100644
--- a/gcc/testsuite/gcc.dg/autopar/pr107153.c
+++ b/gcc/testsuite/gcc.dg/autopar/pr107153.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target fgraphite } } */
/* { dg-options "-O1 -floop-parallelize-all -ftree-parallelize-loops=2 -fno-tree-dominator-opts" } */
void
diff --git a/gcc/testsuite/gcc.dg/c2x-float-10.c b/gcc/testsuite/gcc.dg/c2x-float-10.c
index 7b53a6a..7206921 100644
--- a/gcc/testsuite/gcc.dg/c2x-float-10.c
+++ b/gcc/testsuite/gcc.dg/c2x-float-10.c
@@ -21,13 +21,13 @@ _Static_assert (FLT_IS_IEC_60559 == 0);
_Static_assert (DBL_IS_IEC_60559 == 0);
_Static_assert (LDBL_IS_IEC_60559 == 0);
#else
-_Static_assert (FLT_IS_IEC_60559 == 2);
-_Static_assert (DBL_IS_IEC_60559 == 2);
+_Static_assert (FLT_IS_IEC_60559 == 1);
+_Static_assert (DBL_IS_IEC_60559 == 1);
#if LDBL_MANT_DIG == 106 || LDBL_MIN_EXP == -16382
/* IBM long double and m68k extended format do not meet the definition
of an IEC 60559 interchange or extended format. */
_Static_assert (LDBL_IS_IEC_60559 == 0);
#else
-_Static_assert (LDBL_IS_IEC_60559 == 2);
+_Static_assert (LDBL_IS_IEC_60559 == 1);
#endif
#endif
diff --git a/gcc/testsuite/gcc.dg/cpp/pr60014-1.c b/gcc/testsuite/gcc.dg/cpp/pr60014-1.c
new file mode 100644
index 0000000..de52b30
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr60014-1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -Wint-conversion" } */
+#include "pr60014-1.h"
+int main ()
+{
+ X(a,
+ b);
+ char *should_warn = 1; /* { dg-warning {-Wint-conversion} } */
+}
diff --git a/gcc/testsuite/gcc.dg/cpp/pr60014-1.h b/gcc/testsuite/gcc.dg/cpp/pr60014-1.h
new file mode 100644
index 0000000..50c159c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr60014-1.h
@@ -0,0 +1,5 @@
+#pragma GCC system_header
+
+/* N.B. the semicolon in the macro definition is important, since it produces a
+ second token from this system header on the same line as the __LINE__ token. */
+#define X(a, b) __LINE__;
diff --git a/gcc/testsuite/gcc.dg/cpp/pr60014-2.c b/gcc/testsuite/gcc.dg/cpp/pr60014-2.c
new file mode 100644
index 0000000..115c985
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr60014-2.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -Wint-conversion" } */
+#include "pr60014-2.h"
+X
+char *should_warn = 1; /* { dg-warning {-Wint-conversion} } */
diff --git a/gcc/testsuite/gcc.dg/cpp/pr60014-2.h b/gcc/testsuite/gcc.dg/cpp/pr60014-2.h
new file mode 100644
index 0000000..455f1ed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr60014-2.h
@@ -0,0 +1,5 @@
+#pragma GCC system_header
+
+/* N.B. the semicolon in the macro definition is important, since it produces a
+ second token from this system header on the same line as the _Pragma. */
+#define X _Pragma("GCC diagnostic push");
diff --git a/gcc/testsuite/gcc.dg/cpp/pr60014-3.c b/gcc/testsuite/gcc.dg/cpp/pr60014-3.c
new file mode 100644
index 0000000..c430603
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr60014-3.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -Wint-conversion" } */
+#include "pr60014-3.h"
+
+/* The line continuation on the next line is what triggers the problem here,
+ because it synchronizes the output line between the input source and the
+ preprocessed output (whereas without the line continuation, the
+ preprocessed output would be off by one line from having output a #pragma
+ on a line by itself). Therefore, the token streamer doesn't have a reason
+ to generate a line marker purely based on the line number. That gives it
+ the chance to consider whether instead it needs to generate a line marker
+ based on a change of the "in-system-header" state, allowing us to test that
+ it comes to the right conclusion, which it did not, prior to this commit to
+ resolve PR60014. */
+P(GCC diagnostic) \
+const char *should_warn = 1; /* { dg-warning {-Wint-conversion} } */
diff --git a/gcc/testsuite/gcc.dg/cpp/pr60014-3.h b/gcc/testsuite/gcc.dg/cpp/pr60014-3.h
new file mode 100644
index 0000000..aedf038
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr60014-3.h
@@ -0,0 +1,2 @@
+#pragma GCC system_header
+#define P(x) _Pragma(#x)
diff --git a/gcc/testsuite/gcc.dg/pr104464.c b/gcc/testsuite/gcc.dg/pr104464.c
index ed6a22c..d36a286 100644
--- a/gcc/testsuite/gcc.dg/pr104464.c
+++ b/gcc/testsuite/gcc.dg/pr104464.c
@@ -9,3 +9,5 @@ foo(void)
{
f += (F)(f != (F){}[0]);
}
+
+/* { dg-xfail-if "-fnon-call-exceptions unsupported" { amdgcn-*-* } } */
diff --git a/gcc/testsuite/gcc.dg/pr54346.c b/gcc/testsuite/gcc.dg/pr54346.c
new file mode 100755
index 0000000..63611ab
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr54346.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-dse1" } */
+
+typedef int veci __attribute__ ((vector_size (4 * sizeof (int))));
+
+void fun (veci a, veci b, veci *i)
+{
+ veci c = __builtin_shuffle (a, b, __extension__ (veci) {1, 4, 2, 7});
+ *i = __builtin_shuffle (c, __extension__ (veci) { 7, 2, 1, 5 });
+}
+
+/* { dg-final { scan-tree-dump "VEC_PERM_EXPR.*{ 3, 6, 0, 0 }" "dse1" } } */
+/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 1 "dse1" } } */
diff --git a/gcc/testsuite/gcc.dg/signbit-2.c b/gcc/testsuite/gcc.dg/signbit-2.c
index 2f2dc44..99a455b 100644
--- a/gcc/testsuite/gcc.dg/signbit-2.c
+++ b/gcc/testsuite/gcc.dg/signbit-2.c
@@ -20,6 +20,7 @@ void fun2(int32_t *x, int n)
x[i] = (-x[i]) >> 30;
}
-/* { dg-final { scan-tree-dump {\s+>\s+\{ 0(, 0)+ \}} optimized { target vect_int } } } */
+/* Xfail amdgcn where vector truth type is not integer type. */
+/* { dg-final { scan-tree-dump {\s+>\s+\{ 0(, 0)+ \}} optimized { target vect_int xfail amdgcn-*-* } } } */
/* { dg-final { scan-tree-dump {\s+>\s+0} optimized { target { ! vect_int } } } } */
-/* { dg-final { scan-tree-dump-not {\s+>>\s+31} optimized } } */
+/* { dg-final { scan-tree-dump-not {\s+>>\s+31} optimized { xfail amdgcn-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/signbit-5.c b/gcc/testsuite/gcc.dg/signbit-5.c
index 2b119cd..0fad56c 100644
--- a/gcc/testsuite/gcc.dg/signbit-5.c
+++ b/gcc/testsuite/gcc.dg/signbit-5.c
@@ -4,6 +4,7 @@
/* This test does not work when the truth type does not match vector type. */
/* { dg-additional-options "-mno-avx512f" { target { i?86-*-* x86_64-*-* } } } */
/* { dg-additional-options "-march=armv8-a" { target aarch64_sve } } */
+/* { dg-xfail-run-if "truth type does not match vector type" { amdgcn-*-* } } */
#include <stdint.h>
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr107195-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr107195-1.c
new file mode 100644
index 0000000..a0c20db
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr107195-1.c
@@ -0,0 +1,15 @@
+// { dg-do run }
+// { dg-options "-O1 -fno-tree-ccp" }
+
+int a, b;
+int main() {
+ int c = 0;
+ if (a)
+ c = 1;
+ c = 1 & (a && c) && b;
+ if (a) {
+ b = c;
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr107195-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr107195-2.c
new file mode 100644
index 0000000..d447c78
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr107195-2.c
@@ -0,0 +1,16 @@
+// { dg-do run }
+// { dg-options "-O1" }
+
+int a, b;
+int main() {
+ int c = 0;
+ long d;
+ for (; b < 1; b++) {
+ (c && d) & 3 || a;
+ d = c;
+ c = -1;
+ if (d)
+ __builtin_abort();
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c
new file mode 100644
index 0000000..4b7b758
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c
@@ -0,0 +1,17 @@
+// { dg-do compile }
+// { dg-options "-O2 -fno-thread-jumps -fdump-tree-evrp" }
+
+void link_error ();
+
+void
+foo (double x, double y)
+{
+ if (x > y && __builtin_signbit (y) == 0)
+ {
+ // y == +INF is impossible.
+ if (__builtin_isinf (y))
+ link_error ();
+ }
+}
+
+// { dg-final { scan-tree-dump-not "link_error" "evrp" } }
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-signbit-3.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-signbit-3.c
new file mode 100644
index 0000000..182a33f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-signbit-3.c
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// { dg-options "-O2 -ffinite-math-only -fdump-tree-evrp" }
+
+void link_error();
+
+void foo(float x)
+{
+ if (__builtin_signbit (x))
+ {
+ if (x > 0.0)
+ link_error();
+ }
+}
+
+// { dg-final { scan-tree-dump-not "link_error" "evrp" } }
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-68.c b/gcc/testsuite/gcc.dg/vect/bb-slp-68.c
index 8718031..e7573a1 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-68.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-68.c
@@ -18,5 +18,6 @@ void foo ()
x[9] = z[3] + 1.;
}
-/* We want to have the store group split into 4, 2, 4 when using 32byte vectors. */
-/* { dg-final { scan-tree-dump-not "from scalars" "slp2" } } */
+/* We want to have the store group split into 4, 2, 4 when using 32byte vectors.
+ Unfortunately it does not work when 64-byte vectors are available. */
+/* { dg-final { scan-tree-dump-not "from scalars" "slp2" { xfail amdgcn-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c b/gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
index 4bd286b..1f5c621 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
@@ -46,5 +46,6 @@ int main ()
}
/* { dg-final { scan-tree-dump {(no need for alias check [^\n]* when VF is 1|no alias between [^\n]* when [^\n]* is outside \(-16, 16\))} "vect" { target vect_element_align } } } */
-/* { dg-final { scan-tree-dump-times "loop vectorized" 1 "vect" { target vect_element_align } } } */
+/* { dg-final { scan-tree-dump-times "loop vectorized" 1 "vect" { target { vect_element_align && !amdgcn-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "loop vectorized" 2 "vect" { target amdgcn-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-3.c b/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-3.c
index 03c062a..fb71991 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-3.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-3.c
@@ -42,4 +42,7 @@ main (int argc, char **argv)
/* Because we disable the cost model, targets with variable-length
vectors can end up vectorizing the store to a[0..7] on its own.
With the cost model we do something sensible. */
-/* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" { xfail vect_variable_length } } } */
+/* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" { target { ! amdgcn-*-* } xfail vect_variable_length } } } */
+
+/* amdgcn can do this in one vector. */
+/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" { target amdgcn-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c b/gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c
index 1880d1e..8995837 100644
--- a/gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c
+++ b/gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c
@@ -51,4 +51,5 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
-/* { dg-final { scan-tree-dump-times "dependence distance negative" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "dependence distance negative" 1 "vect" { target { ! vect_multiple_sizes } } } } */
+/* { dg-final { scan-tree-dump "dependence distance negative" "vect" { target vect_multiple_sizes } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr107212-1.c b/gcc/testsuite/gcc.dg/vect/pr107212-1.c
new file mode 100644
index 0000000..5343f9b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr107212-1.c
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+int main()
+{
+ check_vect ();
+
+ unsigned int tab[6][2] = { {69, 73}, {36, 40}, {24, 16},
+ {16, 11}, {4, 5}, {3, 1} };
+
+ int sum_0 = 0;
+ int sum_1 = 0;
+
+ for(int t=0; t<6; t++) {
+ sum_0 += tab[t][0];
+ sum_1 += tab[t][1];
+ }
+
+ int x1 = (sum_0 < 100);
+ int x2 = (sum_0 > 200);
+
+ if (x1 || x2 || sum_1 != 146)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr107212-2.c b/gcc/testsuite/gcc.dg/vect/pr107212-2.c
new file mode 100644
index 0000000..109c2b9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr107212-2.c
@@ -0,0 +1,23 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+int sum_1 = 0;
+
+int main()
+{
+ check_vect ();
+
+ unsigned int tab[6][2] = {{150, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};
+
+ int sum_0 = 0;
+
+ for (int t = 0; t < 6; t++) {
+ sum_0 += tab[t][0];
+ sum_1 += tab[t][0];
+ }
+
+ if (sum_0 < 100 || sum_0 > 200)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr107229-1.c b/gcc/testsuite/gcc.dg/vect/pr107229-1.c
new file mode 100644
index 0000000..67b4323
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr107229-1.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* PR tree-optimization/107229. */
+
+int a, c;
+struct {
+ long d;
+ int : 8;
+ int : 27;
+ int e : 21;
+} f;
+void g(int b) { a = a & 1; }
+int main() {
+ while (c)
+ g(f.e);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr107229-2.c b/gcc/testsuite/gcc.dg/vect/pr107229-2.c
new file mode 100644
index 0000000..88bffb6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr107229-2.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* PR tree-optimization/107229. */
+
+int a, c;
+struct {
+ long f;
+ long g;
+ long d;
+ int : 8;
+ int : 27;
+ int e : 21;
+} f;
+void g(int b) { a = a & 1; }
+int main() {
+ while (c)
+ g(f.e);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr107229-3.c b/gcc/testsuite/gcc.dg/vect/pr107229-3.c
new file mode 100644
index 0000000..4abd8c1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr107229-3.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* PR tree-optimization/107229. */
+
+int a, c;
+struct {
+ long f;
+ long g;
+ long d;
+ int : 8;
+ int : 32;
+ int : 2;
+ int e : 21;
+} f;
+void g(int b) { a = a & 1; }
+int main() {
+ while (c)
+ g(f.e);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr33953.c b/gcc/testsuite/gcc.dg/vect/pr33953.c
index 4dd54cd..d376cf9 100644
--- a/gcc/testsuite/gcc.dg/vect/pr33953.c
+++ b/gcc/testsuite/gcc.dg/vect/pr33953.c
@@ -29,6 +29,7 @@ void blockmove_NtoN_blend_noremap32 (const UINT32 *srcdata, int srcwidth,
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! vect_multiple_sizes } xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" { target vect_multiple_sizes xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr65947-12.c b/gcc/testsuite/gcc.dg/vect/pr65947-12.c
index a47f414..9788eea 100644
--- a/gcc/testsuite/gcc.dg/vect/pr65947-12.c
+++ b/gcc/testsuite/gcc.dg/vect/pr65947-12.c
@@ -42,5 +42,6 @@ main (void)
}
/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" } } */
-/* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target vect_fold_extract_last } } } */
+/* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target { vect_fold_extract_last && { ! vect_multiple_sizes } } } } } */
+/* { dg-final { scan-tree-dump "optimizing condition reduction with FOLD_EXTRACT_LAST" "vect" { target { vect_fold_extract_last && vect_multiple_sizes } } } } */
/* { dg-final { scan-tree-dump-not "condition expression based on integer induction." "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr65947-13.c b/gcc/testsuite/gcc.dg/vect/pr65947-13.c
index a703923..079b5f9 100644
--- a/gcc/testsuite/gcc.dg/vect/pr65947-13.c
+++ b/gcc/testsuite/gcc.dg/vect/pr65947-13.c
@@ -44,4 +44,5 @@ main (void)
/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" } } */
/* { dg-final { scan-tree-dump-times "condition expression based on integer induction." 2 "vect" { xfail vect_fold_extract_last } } } */
-/* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target vect_fold_extract_last } } } */
+/* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target { vect_fold_extract_last && { ! vect_multiple_sizes } } } } } */
+/* { dg-final { scan-tree-dump "optimizing condition reduction with FOLD_EXTRACT_LAST" "vect" { target { vect_fold_extract_last && vect_multiple_sizes } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr80631-2.c b/gcc/testsuite/gcc.dg/vect/pr80631-2.c
index 61e1131..4e58627 100644
--- a/gcc/testsuite/gcc.dg/vect/pr80631-2.c
+++ b/gcc/testsuite/gcc.dg/vect/pr80631-2.c
@@ -75,4 +75,5 @@ main ()
/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 5 "vect" { target vect_condition } } } */
/* { dg-final { scan-tree-dump-times "condition expression based on integer induction." 5 "vect" { target vect_condition xfail vect_fold_extract_last } } } */
-/* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 5 "vect" { target vect_fold_extract_last } } } */
+/* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 5 "vect" { target { { ! vect_multiple_sizes } && vect_fold_extract_last } } } } */
+/* { dg-final { scan-tree-dump "optimizing condition reduction with FOLD_EXTRACT_LAST" "vect" { target { vect_multiple_sizes && vect_fold_extract_last } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
index cffb011..15f5c25 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
@@ -59,6 +59,7 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
/* For variable-length SVE, the number of scalar statements in the
reduction exceeds the number of elements in a 128-bit granule. */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_int_min_max || { aarch64_sve && vect_variable_length } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! vect_multiple_sizes } xfail { vect_no_int_min_max || { aarch64_sve && vect_variable_length } } } } } */
+/* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" { target { vect_multiple_sizes } } } } */
/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 0 "vect" { xfail { aarch64_sve && vect_variable_length } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c b/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
index f09c964..24cf1f7 100644
--- a/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
+++ b/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
@@ -50,6 +50,7 @@ int main (void)
/* We can't handle the first loop with variable-length vectors and so
fall back to the fixed-length mininum instead. */
-/* { dg-final { scan-tree-dump-times "Detected reduction\\." 3 "vect" { xfail vect_variable_length } } } */
+/* { dg-final { scan-tree-dump-times "Detected reduction\\." 3 "vect" { target { ! vect_multiple_sizes } xfail vect_variable_length } } } */
+/* { dg-final { scan-tree-dump "Detected reduction\\." "vect" { target vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target { ! vect_no_int_min_max } } } } */
/* { dg-final { scan-tree-dump-times {using an in-order \(fold-left\) reduction} 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c
new file mode 100644
index 0000000..01cf34f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c
@@ -0,0 +1,40 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s { int i : 31; };
+
+#define ELT0 {0}
+#define ELT1 {1}
+#define ELT2 {2}
+#define ELT3 {3}
+#define N 32
+#define RES 48
+struct s A[N]
+ = { ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3};
+
+int __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ int res = 0;
+ for (int i = 0; i < n; ++i)
+ res += ptr[i].i;
+ return res;
+}
+
+int main (void)
+{
+ check_vect ();
+
+ if (f(&A[0], N) != RES)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c
new file mode 100644
index 0000000..1a4a157
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c
@@ -0,0 +1,43 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned i : 31;
+ char a : 4;
+};
+
+#define N 32
+#define ELT0 {0x7FFFFFFFUL, 0}
+#define ELT1 {0x7FFFFFFFUL, 1}
+#define ELT2 {0x7FFFFFFFUL, 2}
+#define ELT3 {0x7FFFFFFFUL, 3}
+#define RES 48
+struct s A[N]
+ = { ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3};
+
+int __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ int res = 0;
+ for (int i = 0; i < n; ++i)
+ res += ptr[i].a;
+ return res;
+}
+
+int main (void)
+{
+ check_vect ();
+
+ if (f(&A[0], N) != RES)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c
new file mode 100644
index 0000000..849f4a0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c
@@ -0,0 +1,44 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+#include <stdbool.h>
+
+extern void abort(void);
+
+typedef struct {
+ int c;
+ int b;
+ bool a : 1;
+ int d : 31;
+} struct_t;
+
+#define N 16
+#define ELT_F { 0xFFFFFFFF, 0xFFFFFFFF, 0, 0x7FFFFFFF }
+#define ELT_T { 0xFFFFFFFF, 0xFFFFFFFF, 1, 0x7FFFFFFF }
+
+struct_t vect_false[N] = { ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F,
+ ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F };
+struct_t vect_true[N] = { ELT_F, ELT_F, ELT_T, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F,
+ ELT_F, ELT_F, ELT_T, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F };
+int main (void)
+{
+ unsigned ret = 0;
+ for (unsigned i = 0; i < N; i++)
+ {
+ ret |= vect_false[i].a;
+ }
+ if (ret)
+ abort ();
+
+ for (unsigned i = 0; i < N; i++)
+ {
+ ret |= vect_true[i].a;
+ }
+ if (!ret)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c
new file mode 100644
index 0000000..5bc9c41
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c
@@ -0,0 +1,45 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned i : 31;
+ char x : 2;
+ char a : 4;
+};
+
+#define N 32
+#define ELT0 {0x7FFFFFFFUL, 3, 0}
+#define ELT1 {0x7FFFFFFFUL, 3, 1}
+#define ELT2 {0x7FFFFFFFUL, 3, 2}
+#define ELT3 {0x7FFFFFFFUL, 3, 3}
+#define RES 48
+struct s A[N]
+ = { ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3};
+
+int __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ int res = 0;
+ for (int i = 0; i < n; ++i)
+ res += ptr[i].a;
+ return res;
+}
+
+int main (void)
+{
+ check_vect ();
+
+ if (f(&A[0], N) != RES)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c
new file mode 100644
index 0000000..1dc24d3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c
@@ -0,0 +1,42 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned a : 23; unsigned b : 9;
+};
+
+#define N 32
+#define ELT0 {0x7FFFFFUL, 0}
+#define ELT1 {0x7FFFFFUL, 1}
+#define ELT2 {0x7FFFFFUL, 2}
+#define ELT3 {0x7FFFFFUL, 3}
+#define RES 48
+struct s A[N]
+ = { ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3};
+
+int __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ int res = 0;
+ for (int i = 0; i < n; ++i)
+ res += ptr[i].b;
+ return res;
+}
+
+int main (void)
+{
+ check_vect ();
+
+ if (f(&A[0], N) != RES)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c
new file mode 100644
index 0000000..7d24c29
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c
@@ -0,0 +1,42 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned a : 23; unsigned b : 8;
+};
+
+#define N 32
+#define ELT0 {0x7FFFFFUL, 0}
+#define ELT1 {0x7FFFFFUL, 1}
+#define ELT2 {0x7FFFFFUL, 2}
+#define ELT3 {0x7FFFFFUL, 3}
+#define RES 48
+struct s A[N]
+ = { ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
+ ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3};
+
+int __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ int res = 0;
+ for (int i = 0; i < n; ++i)
+ res += ptr[i].b;
+ return res;
+}
+
+int main (void)
+{
+ check_vect ();
+
+ if (f(&A[0], N) != RES)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c
new file mode 100644
index 0000000..19683d2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c
@@ -0,0 +1,39 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s { int i : 31; };
+
+#define N 32
+#define V 5
+struct s A[N];
+
+void __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ for (int i = 0; i < n; ++i)
+ ptr[i].i = V;
+}
+
+void __attribute__ ((noipa))
+check_f(struct s *ptr) {
+ for (unsigned i = 0; i < N; ++i)
+ if (ptr[i].i != V)
+ abort ();
+}
+
+int main (void)
+{
+ check_vect ();
+ __builtin_memset (&A[0], 0, sizeof(struct s) * N);
+
+ f(&A[0], N);
+ check_f (&A[0]);
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c
new file mode 100644
index 0000000..d550dd3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c
@@ -0,0 +1,42 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned i : 31;
+ char a : 4;
+};
+
+#define N 32
+#define V 5
+struct s A[N];
+
+void __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ for (int i = 0; i < n; ++i)
+ ptr[i].a = V;
+}
+
+void __attribute__ ((noipa))
+check_f(struct s *ptr) {
+ for (unsigned i = 0; i < N; ++i)
+ if (ptr[i].a != V)
+ abort ();
+}
+
+int main (void)
+{
+ check_vect ();
+ __builtin_memset (&A[0], 0, sizeof(struct s) * N);
+
+ f(&A[0], N);
+ check_f (&A[0]);
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c
new file mode 100644
index 0000000..3303d26
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c
@@ -0,0 +1,43 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned i : 31;
+ char x : 2;
+ char a : 4;
+};
+
+#define N 32
+#define V 5
+struct s A[N];
+
+void __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ for (int i = 0; i < n; ++i)
+ ptr[i].a = V;
+}
+
+void __attribute__ ((noipa))
+check_f(struct s *ptr) {
+ for (unsigned i = 0; i < N; ++i)
+ if (ptr[i].a != V)
+ abort ();
+}
+
+int main (void)
+{
+ check_vect ();
+ __builtin_memset (&A[0], 0, sizeof(struct s) * N);
+
+ f(&A[0], N);
+ check_f (&A[0]);
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c
new file mode 100644
index 0000000..fae6ea3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c
@@ -0,0 +1,42 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned b : 23;
+ unsigned a : 9;
+};
+
+#define N 32
+#define V 5
+struct s A[N];
+
+void __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ for (int i = 0; i < n; ++i)
+ ptr[i].a = V;
+}
+
+void __attribute__ ((noipa))
+check_f(struct s *ptr) {
+ for (unsigned i = 0; i < N; ++i)
+ if (ptr[i].a != V)
+ abort ();
+}
+
+int main (void)
+{
+ check_vect ();
+ __builtin_memset (&A[0], 0, sizeof(struct s) * N);
+
+ f(&A[0], N);
+ check_f (&A[0]);
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c
new file mode 100644
index 0000000..99360c2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c
@@ -0,0 +1,42 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+extern void abort(void);
+
+struct s {
+ unsigned b : 23;
+ unsigned a : 8;
+};
+
+#define N 32
+#define V 5
+struct s A[N];
+
+void __attribute__ ((noipa))
+f(struct s *ptr, unsigned n) {
+ for (int i = 0; i < n; ++i)
+ ptr[i].a = V;
+}
+
+void __attribute__ ((noipa))
+check_f(struct s *ptr) {
+ for (unsigned i = 0; i < N; ++i)
+ if (ptr[i].a != V)
+ abort ();
+}
+
+int main (void)
+{
+ check_vect ();
+ __builtin_memset (&A[0], 0, sizeof(struct s) * N);
+
+ f(&A[0], N);
+ check_f (&A[0]);
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+
diff --git a/gcc/testsuite/gcc.target/arc/enter-dw2-1.c b/gcc/testsuite/gcc.target/arc/enter-dw2-1.c
new file mode 100644
index 0000000..25d0356
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arc/enter-dw2-1.c
@@ -0,0 +1,28 @@
+/* Verify that we generate appropriate CFI offsets in the case of enter
+ instruction. */
+/* { dg-skip-if "Not having enter_s insn." { arc700 || arc6xx } } */
+/* { dg-do compile } */
+/* { dg-options "-g -Os" } */
+
+extern void bar (void);
+
+void foo (void)
+{
+ asm volatile (";my clobber list"
+ : : : "r13", "r14", "r15", "r16", "r17", "r18", "r19");
+ bar ();
+ asm volatile (";my clobber list"
+ : : : "r13", "r14", "r15", "r16", "r17", "r18", "r19");
+}
+
+
+/* { dg-final { scan-assembler-times "enter_s" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_def_cfa_offset 32" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 31, -32" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 13, -28" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 14, -24" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 15, -20" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 16, -16" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 17, -12" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 18, -8" 1 } } */
+/* { dg-final { scan-assembler-times "\.cfi_offset 19, -4" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arc/tmac-2.c b/gcc/testsuite/gcc.target/arc/tmac-2.c
index ee1339a..2bd051b 100644
--- a/gcc/testsuite/gcc.target/arc/tmac-2.c
+++ b/gcc/testsuite/gcc.target/arc/tmac-2.c
@@ -7,5 +7,5 @@
/* { dg-final { scan-assembler "mac " } } */
/* { dg-final { scan-assembler "macu" } } */
-/* { dg-final { scan-assembler "mpym " } } */
+/* { dg-final { scan-assembler "mpym\\t" } } */
/* { dg-final { scan-assembler "mpymu" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr107093.c b/gcc/testsuite/gcc.target/i386/pr107093.c
new file mode 100644
index 0000000..23e30cb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr107093.c
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-options "-mavx512bw -O2 -mavx512vl" } */
+/* { dg-final { scan-assembler-times {(?n)kxnor[bwqd]} 4 { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-times {(?n)kxnor[bwdq]} 3 { target ia32 } } } */
+
+#include<immintrin.h>
+
+__m512i
+foo (__m512i a, __m512i b, __m512i c, __m512i d)
+{
+ __mmask32 k1 = _mm512_cmp_epi16_mask (a, b, 1);
+ __mmask32 k2 = _mm512_cmp_epi16_mask (c, d, 2);
+ return _mm512_mask_mov_epi16 (a, ~(k1 ^ k2), c);
+}
+
+__m512i
+foo1 (__m512i a, __m512i b, __m512i c, __m512i d)
+{
+ __mmask16 k1 = _mm512_cmp_epi32_mask (a, b, 1);
+ __mmask16 k2 = _mm512_cmp_epi32_mask (c, d, 2);
+ return _mm512_mask_mov_epi32 (a, ~(k1 ^ k2), c);
+}
+
+__m512i
+foo2 (__m512i a, __m512i b, __m512i c, __m512i d)
+{
+ __mmask64 k1 = _mm512_cmp_epi8_mask (a, b, 1);
+ __mmask64 k2 = _mm512_cmp_epi8_mask (c, d, 2);
+ return _mm512_mask_mov_epi8 (a, ~(k1 ^ k2), c);
+}
+
+__m512i
+foo3 (__m512i a, __m512i b, __m512i c, __m512i d)
+{
+ __mmask8 k1 = _mm512_cmp_epi64_mask (a, b, 1);
+ __mmask8 k2 = _mm512_cmp_epi64_mask (c, d, 2);
+ return _mm512_mask_mov_epi64 (a, ~(k1 ^ k2), c);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr107185.c b/gcc/testsuite/gcc.target/i386/pr107185.c
new file mode 100644
index 0000000..333191a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr107185.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-ffast-math" } */
+
+void
+foo (float f)
+{
+ long p = __builtin_lrintf (f);
+}
diff --git a/gcc/testsuite/gcc.target/pru/ashiftdi-1.c b/gcc/testsuite/gcc.target/pru/ashiftdi-1.c
new file mode 100644
index 0000000..516e5a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/pru/ashiftdi-1.c
@@ -0,0 +1,53 @@
+/* Functional test for DI left shift. */
+
+/* { dg-do run } */
+/* { dg-options "-pedantic-errors" } */
+
+#include <stddef.h>
+#include <stdint.h>
+
+extern void abort (void);
+
+uint64_t __attribute__((noinline)) ashift_1 (uint64_t a)
+{
+ return a << 1;
+}
+
+uint64_t __attribute__((noinline)) ashift_10 (uint64_t a)
+{
+ return a << 10;
+}
+
+uint64_t __attribute__((noinline)) ashift_32 (uint64_t a)
+{
+ return a << 32;
+}
+
+uint64_t __attribute__((noinline)) ashift_36 (uint64_t a)
+{
+ return a << 36;
+}
+
+int
+main (int argc, char** argv)
+{
+ if (ashift_1 (0xaaaa5555aaaa5555ull) != 0x5554aaab5554aaaaull)
+ abort();
+ if (ashift_10 (0xaaaa5555aaaa5555ull) != 0xa95556aaa9555400ull)
+ abort();
+ if (ashift_32 (0xaaaa5555aaaa5555ull) != 0xaaaa555500000000ull)
+ abort();
+ if (ashift_36 (0xaaaa5555aaaa5555ull) != 0xaaa5555000000000ull)
+ abort();
+
+ if (ashift_1 (0x1234567822334455ull) != 0x2468acf0446688aaull)
+ abort();
+ if (ashift_10 (0x1234567822334455ull) != 0xd159e088cd115400ull)
+ abort();
+ if (ashift_32 (0x1234567822334455ull) != 0x2233445500000000ull)
+ abort();
+ if (ashift_36 (0x1234567822334455ull) != 0x2334455000000000ull)
+ abort();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/pru/lshiftrtdi-1.c b/gcc/testsuite/gcc.target/pru/lshiftrtdi-1.c
new file mode 100644
index 0000000..7adae6c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/pru/lshiftrtdi-1.c
@@ -0,0 +1,53 @@
+/* Functional test for DI right shift. */
+
+/* { dg-do run } */
+/* { dg-options "-pedantic-errors" } */
+
+#include <stddef.h>
+#include <stdint.h>
+
+extern void abort (void);
+
+uint64_t __attribute__((noinline)) lshift_1 (uint64_t a)
+{
+ return a >> 1;
+}
+
+uint64_t __attribute__((noinline)) lshift_10 (uint64_t a)
+{
+ return a >> 10;
+}
+
+uint64_t __attribute__((noinline)) lshift_32 (uint64_t a)
+{
+ return a >> 32;
+}
+
+uint64_t __attribute__((noinline)) lshift_36 (uint64_t a)
+{
+ return a >> 36;
+}
+
+int
+main (int argc, char** argv)
+{
+ if (lshift_1 (0xaaaa5555aaaa5555ull) != 0x55552aaad5552aaaull)
+ abort();
+ if (lshift_10 (0xaaaa5555aaaa5555ull) != 0x002aaa95556aaa95ull)
+ abort();
+ if (lshift_32 (0xaaaa5555aaaa5555ull) != 0x00000000aaaa5555ull)
+ abort();
+ if (lshift_36 (0xaaaa5555aaaa5555ull) != 0x000000000aaaa555ull)
+ abort();
+
+ if (lshift_1 (0x1234567822334455ull) != 0x091a2b3c1119a22aull)
+ abort();
+ if (lshift_10 (0x1234567822334455ull) != 0x00048d159e088cd1ull)
+ abort();
+ if (lshift_32 (0x1234567822334455ull) != 0x0000000012345678ull)
+ abort();
+ if (lshift_36 (0x1234567822334455ull) != 0x0000000001234567ull)
+ abort();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/pru/pr106562-1.c b/gcc/testsuite/gcc.target/pru/pr106562-1.c
new file mode 100644
index 0000000..5bfbe52
--- /dev/null
+++ b/gcc/testsuite/gcc.target/pru/pr106562-1.c
@@ -0,0 +1,9 @@
+/* { dg-do assemble } */
+/* { dg-options "-Os" } */
+/* { dg-final { object-size text <= 40 } } */
+
+
+char test(unsigned long long a, unsigned long long b)
+{
+ return a && b;
+}
diff --git a/gcc/testsuite/gcc.target/pru/pr106562-2.c b/gcc/testsuite/gcc.target/pru/pr106562-2.c
new file mode 100644
index 0000000..ec5f82a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/pru/pr106562-2.c
@@ -0,0 +1,9 @@
+/* { dg-do assemble } */
+/* { dg-options "-Os" } */
+/* { dg-final { object-size text <= 32 } } */
+
+
+char test(long long a)
+{
+ return a > 10;
+}
diff --git a/gcc/testsuite/gcc.target/pru/pr106562-3.c b/gcc/testsuite/gcc.target/pru/pr106562-3.c
new file mode 100644
index 0000000..d098058
--- /dev/null
+++ b/gcc/testsuite/gcc.target/pru/pr106562-3.c
@@ -0,0 +1,9 @@
+/* { dg-do assemble } */
+/* { dg-options "-Os" } */
+/* { dg-final { object-size text <= 32 } } */
+
+
+char test(long long a)
+{
+ return a < 10;
+}
diff --git a/gcc/testsuite/gcc.target/pru/pr106562-4.c b/gcc/testsuite/gcc.target/pru/pr106562-4.c
new file mode 100644
index 0000000..b29e426
--- /dev/null
+++ b/gcc/testsuite/gcc.target/pru/pr106562-4.c
@@ -0,0 +1,159 @@
+/* Functional test for DI comparisons. */
+
+/* { dg-do run } */
+/* { dg-options "-pedantic-errors" } */
+
+/* The default test suite options use "-ansi", which
+ generates spurious errors by enabling "-Wlong-long".
+ Thus override the options and drop "-ansi", in order
+ to freely use 64-bit (long long) types for PRU. */
+
+#include <stddef.h>
+#include <stdint.h>
+
+extern void abort (void);
+
+char __attribute__((noinline)) test_lt (int64_t a, int64_t b)
+{
+ return a < b;
+}
+
+char __attribute__((noinline)) test_ltu (uint64_t a, uint64_t b)
+{
+ return a < b;
+}
+
+char __attribute__((noinline)) test_le (int64_t a, int64_t b)
+{
+ return a <= b;
+}
+
+char __attribute__((noinline)) test_leu (uint64_t a, uint64_t b)
+{
+ return a <= b;
+}
+
+char __attribute__((noinline)) test_gt (int64_t a, int64_t b)
+{
+ return a > b;
+}
+
+char __attribute__((noinline)) test_gtu (uint64_t a, uint64_t b)
+{
+ return a > b;
+}
+
+char __attribute__((noinline)) test_ge (int64_t a, int64_t b)
+{
+ return a >= b;
+}
+
+char __attribute__((noinline)) test_geu (uint64_t a, uint64_t b)
+{
+ return a >= b;
+}
+
+char __attribute__((noinline)) test_eq (uint64_t a, uint64_t b)
+{
+ return a == b;
+}
+
+char __attribute__((noinline)) test_ne (uint64_t a, uint64_t b)
+{
+ return a != b;
+}
+
+struct test_case {
+ uint64_t a;
+ uint64_t b;
+ char lt;
+ char ltu;
+ char le;
+ char leu;
+ char gt;
+ char gtu;
+ char ge;
+ char geu;
+ char eq;
+ char ne;
+};
+
+const struct test_case cases[] = {
+ /* LT,LTU,LE,LEU,GT,GTU,GE,GEU,EQ,NE */
+ { 0x1234567800112233ULL,
+ 0x1234567800112233ULL, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0 },
+ { 0x0000000000000000ULL,
+ 0x0000000000000000ULL, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0 },
+ { 0xffffffffffffffffULL,
+ 0xffffffffffffffffULL, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0 },
+
+ { 0xffffffffffffffefULL,
+ 0xffffffffffffffffULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
+ { 0x8000000000000000ULL,
+ 0xffffffffffffffffULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
+ { 0x80000000ffffffffULL,
+ 0xffffffffffffffffULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
+ { 0x80000000ffffffffULL,
+ 0xffffffff00000000ULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
+ { 0xffefffffffffffffULL,
+ 0xffffffffffffffffULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
+
+ { 0x0000000000000000ULL,
+ 0xffffffffffffffffULL, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 },
+ { 0x0000000000000001ULL,
+ 0xffffffffffffffffULL, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 },
+ { 0x0000000000000001ULL,
+ 0x8000000000000000ULL, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 },
+ { 0x7fffffffffffffffULL,
+ 0x8000000000000000ULL, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 },
+
+ /* Ensure lo uses unsigned comparison if hi parts are same. */
+ { 0x12345678ffffffffULL,
+ 0x1234567800000001ULL, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
+ { 0xf23456780fffffffULL,
+ 0xf234567800000001ULL, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
+ { 0xf2345678ffffffffULL,
+ 0xf234567800000001ULL, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
+ { 0x1234567800000002ULL,
+ 0x1234567800000001ULL, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
+ { 0x1234567800000002ULL,
+ 0x1234567800000003ULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
+};
+
+int
+main (void)
+{
+ size_t i;
+
+ for (i = 0; i < (sizeof (cases)/sizeof (cases[0])); i++)
+ {
+ const int64_t sa = (int64_t)cases[i].a;
+ const int64_t sb = (int64_t)cases[i].b;
+ const uint64_t ua = cases[i].a;
+ const uint64_t ub = cases[i].b;
+
+ if (cases[i].lt != test_lt (sa, sb))
+ abort ();
+ if (cases[i].ltu != test_ltu (ua, ub))
+ abort ();
+ if (cases[i].le != test_le (sa, sb))
+ abort ();
+ if (cases[i].leu != test_leu (ua, ub))
+ abort ();
+ if (cases[i].gt != test_gt (sa, sb))
+ abort ();
+ if (cases[i].gtu != test_gtu (ua, ub))
+ abort ();
+ if (cases[i].ge != test_ge (sa, sb))
+ abort ();
+ if (cases[i].geu != test_geu (ua, ub))
+ abort ();
+ if (cases[i].eq != test_eq (ua, ub))
+ abort ();
+ if (cases[i].ne != test_ne (ua, ub))
+ abort ();
+ }
+
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c
index 79b1159..3d81b17 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c
@@ -1,4 +1,4 @@
/* { dg-do compile } */
/* { dg-options "-O3 -march=rv32gc -mabi=ilp32d" } */
-#pragma riscv intrinsic "vector" /* { dg-error {#pragma riscv intrinsic' option 'vector' needs 'V' extension enabled} } */ \ No newline at end of file
+#pragma riscv intrinsic "vector" /* { dg-error {#pragma riscv intrinsic' option 'vector' needs 'V' extension enabled} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c
index fa790b1..fd2aa30 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c
@@ -1,4 +1,4 @@
/* { dg-do compile } */
/* { dg-skip-if "test rvv intrinsic" { *-*-* } { "*" } { "-march=rv*v*" } } */
-#pragma riscv intrinsic "vector" \ No newline at end of file
+#pragma riscv intrinsic "vector"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-3.c
index 86da678..96a0e05 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-3.c
@@ -1,4 +1,4 @@
/* { dg-do compile } */
/* { dg-skip-if "test rvv intrinsic" { *-*-* } { "*" } { "-march=rv*v*" } } */
-#pragma riscv intrinsic "report-error" /* { dg-error {unknown '#pragma riscv intrinsic' option 'report-error'} } */ \ No newline at end of file
+#pragma riscv intrinsic "report-error" /* { dg-error {unknown '#pragma riscv intrinsic' option 'report-error'} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_vector.h
new file mode 100644
index 0000000..fbb4858f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_vector.h
@@ -0,0 +1,11 @@
+/* Wrapper of riscv_vector.h, prevent riscv_vector.h including stdint.h from
+ C library, that might cause problem on testing RV32 related testcase when
+ we disable multilib. */
+#ifndef _RISCV_VECTOR_WRAP_H
+
+#define _GCC_WRAP_STDINT_H
+#include "stdint-gcc.h"
+#include_next <riscv_vector.h>
+#define _RISCV_VECTOR_WRAP_H
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-1.c
index 299e393..00fb73f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-skip-if "test rvv intrinsic" { *-*-* } { "*" } { "-march=rv*v*" } } */
+/* { dg-options "-O3 -march=rv32gcv -mabi=ilp32d" } */
#include "riscv_vector.h"
@@ -62,4 +62,4 @@ void foo61 () {vfloat32m8_t t;}
void foo62 () {vfloat64m1_t t;}
void foo63 () {vfloat64m2_t t;}
void foo64 () {vfloat64m4_t t;}
-void foo65 () {vfloat64m8_t t;} \ No newline at end of file
+void foo65 () {vfloat64m8_t t;}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
index 2a88467..92f4ee0 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
@@ -62,4 +62,4 @@ void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'}
void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ \ No newline at end of file
+void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
index 85a6d04..3a42572 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
@@ -62,4 +62,4 @@ void foo61 () {vfloat32m8_t t;}
void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ \ No newline at end of file
+void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-4.c
index c51c03e..76c5e60 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-4.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-4.c
@@ -62,4 +62,4 @@ void foo61 () {vfloat32m8_t t;}
void foo62 () {vfloat64m1_t t;}
void foo63 () {vfloat64m2_t t;}
void foo64 () {vfloat64m4_t t;}
-void foo65 () {vfloat64m8_t t;} \ No newline at end of file
+void foo65 () {vfloat64m8_t t;}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
index fb1c684..de850e5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
@@ -62,4 +62,4 @@ void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'}
void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ \ No newline at end of file
+void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
index 5361fbd..1d79b6b 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
@@ -62,4 +62,4 @@ void foo61 () {vfloat32m8_t t;}
void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ \ No newline at end of file
+void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vread_csr.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vread_csr.c
index 9151349f..fa643c5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vread_csr.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vread_csr.c
@@ -23,4 +23,4 @@ unsigned long vread_csr_vcsr(void) {
/* { dg-final { scan-assembler-times {csrr\s+(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7]),\s*vstart} 1 } } */
/* { dg-final { scan-assembler-times {csrr\s+(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7]),\s*vxsat} 1 } } */
/* { dg-final { scan-assembler-times {csrr\s+(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7]),\s*vxrm} 1 } } */
-/* { dg-final { scan-assembler-times {csrr\s+(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7]),\s*vcsr} 1 } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-times {csrr\s+(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7]),\s*vcsr} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vwrite_csr.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vwrite_csr.c
index a50eba7..e23da4b 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vwrite_csr.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vwrite_csr.c
@@ -23,4 +23,4 @@ void vwrite_csr_vcsr(unsigned long value) {
/* { dg-final { scan-assembler-times {csrw\s+vstart,\s*(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7])} 1 } } */
/* { dg-final { scan-assembler-times {csrw\s+vxsat,\s*(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7])} 1 } } */
/* { dg-final { scan-assembler-times {csrw\s+vxrm,\s*(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7])} 1 } } */
-/* { dg-final { scan-assembler-times {csrw\s+vcsr,\s*(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7])} 1 } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-times {csrw\s+vcsr,\s*(?:ra|[sgtf]p|t[0-6]|s[0-9]|s10|s11|a[0-7])} 1 } } */
diff --git a/gcc/testsuite/gfortran.dg/pr107000.f90 b/gcc/testsuite/gfortran.dg/pr107000.f90
new file mode 100644
index 0000000..3028907
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr107000.f90
@@ -0,0 +1,50 @@
+! { dg-do compile }
+! PR fortran/107000 - ICE in gfc_real2complex, reduce_unary, reduce_binary_*
+! Contributed by G.Steinmetz
+
+program p
+ real :: y(1)
+ complex :: x(1)
+ x = (1.0, 2.0) * [real :: -'1'] ! { dg-error "Operand of unary numeric operator" }
+ x = (1.0, 2.0) * [complex :: +'1'] ! { dg-error "Operand of unary numeric operator" }
+ x = [complex :: -'1'] * (1.0, 2.0) ! { dg-error "Operand of unary numeric operator" }
+ y = [complex :: -'1'] * 2 ! { dg-error "Operand of unary numeric operator" }
+ y = 2 * [complex :: -'1'] ! { dg-error "Operand of unary numeric operator" }
+ y = 2 * [complex :: -(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ y = [complex :: -(.true.)] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, - [real :: -'1' ] ! { dg-error "Operand of unary numeric operator" }
+ print *, - [real :: [-'1']] ! { dg-error "Operand of unary numeric operator" }
+ print *, - [real :: +(.true.) ] ! { dg-error "Operand of unary numeric operator" }
+ print *, - [real :: [+(.true.)]] ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [real :: -'1' ] ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [real :: (-'1')] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: -'1' ] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: (-'1')] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [integer :: -('1')] ! { dg-error "Operand of unary numeric operator" }
+ print *, [integer :: -('1')] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [real :: 0, (-'1')] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 0, (-'1')] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [real :: 0, -'1'] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 0, -'1'] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [real :: 0, 1+'1'] ! { dg-error "Operands of binary numeric operator" }
+ print *, [real :: 0, 1+'1'] * 2 ! { dg-error "Operands of binary numeric operator" }
+ print *, [real :: 1, +(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 1, -(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ print *, 2 * [real :: 1, +(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 1, +(.true.)] * 2 ! { dg-error "Operand of unary numeric operator" }
+ print *, [1, 2] * [real :: 1, +(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 1, +(.true.)] * [1, 2] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 1, 2] * [real :: 1, +(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 1, +(.true.)] * [real :: 1, 2] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 0, -'1'] * [real :: 1, +(+(.true.))] ! { dg-error "Operand of unary numeric operator" }
+ print *, [real :: 1, [(+(.true.))]] * [real :: 0, [(-'1')]] ! { dg-error "Operand of unary numeric operator" }
+
+ ! Legal:
+ print *, 2 * [real :: 1, [2], 3]
+ print *, [real :: 1, [2], 3] * 2
+ print *, [real :: 1, [2], 3] * [real :: 1, [2], 3]
+ print *, [real :: 1, [2], 3] * [integer :: 1, [2], 3]
+ print *, [real :: 1, [2], 3] * [1, [2], 3]
+ print *, [real :: 1, huge(2.0)] * [real :: 1, real(1.0)]
+ print *, [real :: 1, -(huge(2.0))] * [real :: 1, +(real(1))]
+end
diff --git a/gcc/testsuite/gfortran.dg/pr107215.f90 b/gcc/testsuite/gfortran.dg/pr107215.f90
new file mode 100644
index 0000000..2c2a0ca
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr107215.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! PR fortran/107215 - ICE in gfc_real2real and gfc_complex2complex
+! Contributed by G.Steinmetz
+
+program p
+ double precision, parameter :: z = 1.0d0
+ complex :: x(1)
+ real :: y(1)
+ x = [real :: -'1'] * z ! { dg-error "Operand of unary numeric operator" }
+ y = z * [real :: -'1'] ! { dg-error "Operand of unary numeric operator" }
+ x = [real :: -(.true.)] * z ! { dg-error "Operand of unary numeric operator" }
+ y = z * [real :: -(.true.)] ! { dg-error "Operand of unary numeric operator" }
+ x = [complex :: -'1'] * z ! { dg-error "Operand of unary numeric operator" }
+ y = z * [complex :: -'1'] ! { dg-error "Operand of unary numeric operator" }
+ x = [complex :: -(.true.)] * z ! { dg-error "Operand of unary numeric operator" }
+ y = z * [complex :: -(.true.)] ! { dg-error "Operand of unary numeric operator" }
+end
diff --git a/gcc/testsuite/gfortran.dg/pr107217.f90 b/gcc/testsuite/gfortran.dg/pr107217.f90
new file mode 100644
index 0000000..9c8492e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr107217.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! PR fortran/107217 - ICE in gfc_arith_times
+! Contributed by G.Steinmetz
+
+program p
+ print *, [real :: (['1'])] * 2 ! { dg-error "Cannot convert" }
+ print *, 2 * [real :: (['1'])] ! { dg-error "Cannot convert" }
+ print *, [real :: (['1'])] + 2 ! { dg-error "Cannot convert" }
+ print *, [real :: (['1'])] - 2 ! { dg-error "Cannot convert" }
+ print *, [real :: (['1'])] / 2 ! { dg-error "Cannot convert" }
+ print *, 1 / [real :: (['1'])] ! { dg-error "Cannot convert" }
+ print *, [real :: (['1'])] ** 2 ! { dg-error "Cannot convert" }
+ print *, 2 ** [real :: (['1'])] ! { dg-error "Cannot convert" }
+ print *, 2.0 ** [real :: (.true.)] ! { dg-error "Cannot convert" }
+ print *, [real :: (.true.)] ** 2.0 ! { dg-error "Cannot convert" }
+ print *, [complex :: (['1'])] ** (1.0,2.0) ! { dg-error "Cannot convert" }
+ print *, (1.0,2.0) ** [complex :: (['1'])] ! { dg-error "Cannot convert" }
+end
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 7c9dd45..fdd88e6 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -8400,7 +8400,8 @@ proc available_vector_sizes { } {
} elseif { [istarget sparc*-*-*] } {
lappend result 64
} elseif { [istarget amdgcn*-*-*] } {
- lappend result 4096
+ # 6 different lane counts, and 4 element sizes
+ lappend result 4096 2048 1024 512 256 128 64 32 16 8 4 2
} else {
# The traditional default asumption.
lappend result 128