aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog109
-rw-r--r--gcc/testsuite/g++.dg/other/i386-2.C2
-rw-r--r--gcc/testsuite/g++.dg/other/i386-3.C2
-rw-r--r--gcc/testsuite/g++.dg/template/dependent-base6.C4
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/cselim-1.C37
-rw-r--r--gcc/testsuite/gcc.dg/autopar/runtime-auto.c53
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec1.c19
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec2.c21
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipcp-cb1.c25
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc5
-rw-r--r--gcc/testsuite/gcc.dg/pr121468.c30
-rw-r--r--gcc/testsuite/gcc.dg/pr122200.c23
-rw-r--r--gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c32
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c17
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vla-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c29
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c29
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c29
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c29
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c30
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-div.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c32
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr104116.h201
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr120687-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr120687-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr120687-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr121949_1.c45
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr121949_2.c45
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr121949_3.c45
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-pr122301.c16
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-pr122308.c20
-rw-r--r--gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c25
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c16
-rw-r--r--gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c4
-rw-r--r--gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq-check-carry.c48
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_s32.c8
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_u32.c8
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c8
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c8
-rw-r--r--gcc/testsuite/gcc.target/bpf/memset-3.c56
-rw-r--r--gcc/testsuite/gcc.target/bpf/memset-4.c24
-rw-r--r--gcc/testsuite/gcc.target/i386/amx-check.h3
-rw-r--r--gcc/testsuite/gcc.target/i386/amxmovrs-2rpntlvwrs-2.c58
-rw-r--r--gcc/testsuite/gcc.target/i386/amxmovrs-asmatt-1.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-2rpntlvw-2.c54
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-asmatt-1.c39
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-asmintel-1.c35
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-conjtcmmimfp16ps-2.c55
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-conjtfp16-2.c48
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-tcmmimfp16ps-2.c55
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-tcmmrlfp16ps-2.c55
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-tdpbf16ps-2.c53
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-tdpfp16ps-2.c55
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-tmmultf32ps-2.c51
-rw-r--r--gcc/testsuite/gcc.target/i386/amxtranspose-transposed-2.c39
-rw-r--r--gcc/testsuite/gcc.target/i386/funcspec-56.inc2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr122266.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-12.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-13.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-14.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-22.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-23.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-1.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-2.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-3.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-4.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-5.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-6.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-7.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/predef-profiles-8.c11
-rw-r--r--gcc/testsuite/gnat.dg/specs/style1.ads19
-rw-r--r--gcc/testsuite/lib/target-supports.exp11
98 files changed, 1989 insertions, 666 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7b857ec..6964114 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,112 @@
+2025-10-16 David Malcolm <dmalcolm@redhat.com>
+
+ * gcc.dg/plugin/diagnostic_plugin_test_graphs.cc
+ (report_diag_with_graphs): Port from set_attr to set_property.
+
+2025-10-15 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/121468
+ PR tree-optimization/121206
+ PR tree-optimization/122200
+ * gcc.dg/pr121468.c: New.
+ * gcc.dg/pr122200.c: New.
+
+2025-10-15 Richard Earnshaw <rearnsha@arm.com>
+
+ PR target/118460
+ * gcc.target/arm/armv8_2-fp16-move-1.c: Adjust expected output.
+ * gcc.target/arm/armv8_2-fp16-move-2.c: Likewise.
+
+2025-10-15 Andrew Pinski <andrew.pinski@oss.qualcomm.com>
+
+ PR tree-optimization/122037
+ * gcc.dg/tree-ssa/vla-1.c: New test.
+
+2025-10-15 Alice Carlotti <alice.carlotti@arm.com>
+
+ * gcc.target/aarch64/acle/rwsr-armv8p9.c: Fix incorrect encoding.
+
+2025-10-15 Sebastian Pop <spop@nvidia.com>
+
+ * gcc.dg/autopar/runtime-auto.c: New test.
+
+2025-10-15 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/122189
+ * gcc.target/arm/mve/intrinsics/vadcq-check-carry.c: New test.
+ * gcc.target/arm/mve/intrinsics/vadcq_m_s32.c: Adjust instructions
+ order.
+ * gcc.target/arm/mve/intrinsics/vadcq_m_u32.c: Likewise.
+ * gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c: Likewise.
+ * gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c: Likewise.
+
+2025-10-15 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR rtl-optimization/122266
+ * gcc.target/i386/pr122266.c: New test case.
+
+2025-10-14 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/122192
+ * g++.dg/template/dependent-base6.C: Verify mem-initializer-id
+ qualified name lookup is type-only too.
+
+2025-10-14 Tamar Christina <tamar.christina@arm.com>
+
+ PR tree-optimization/121949
+ * gcc.dg/vect/pr121949_1.c: New test.
+ * gcc.dg/vect/pr121949_2.c: New test.
+ * gcc.dg/vect/pr121949_3.c: New test.
+
+2025-10-14 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/vect/pr120687-1.c: Adjust.
+ * gcc.dg/vect/pr120687-2.c: Likewise.
+ * gcc.dg/vect/pr120687-3.c: Likewise.
+
+2025-10-14 Haochen Jiang <haochen.jiang@intel.com>
+
+ * g++.dg/other/i386-2.C: Remove AMX-TRANSPOSE test.
+ * g++.dg/other/i386-3.C: Ditto.
+ * gcc.target/i386/amx-check.h: Ditto.
+ * gcc.target/i386/amxmovrs-asmatt-1.c: Ditto.
+ * gcc.target/i386/amxmovrs-asmintel-1.c: Ditto.
+ * gcc.target/i386/funcspec-56.inc: Ditto.
+ * gcc.target/i386/sse-12.c: Ditto.
+ * gcc.target/i386/sse-13.c: Ditto.
+ * gcc.target/i386/sse-14.c: Ditto.
+ * gcc.target/i386/sse-22.c: Ditto.
+ * gcc.target/i386/sse-23.c: Ditto.
+ * lib/target-supports.exp: Ditto.
+ * gcc.target/i386/amxmovrs-2rpntlvwrs-2.c: Removed.
+ * gcc.target/i386/amxtranspose-2rpntlvw-2.c: Removed.
+ * gcc.target/i386/amxtranspose-asmatt-1.c: Removed.
+ * gcc.target/i386/amxtranspose-asmintel-1.c: Removed.
+ * gcc.target/i386/amxtranspose-conjtcmmimfp16ps-2.c: Removed.
+ * gcc.target/i386/amxtranspose-conjtfp16-2.c: Removed.
+ * gcc.target/i386/amxtranspose-tcmmimfp16ps-2.c: Removed.
+ * gcc.target/i386/amxtranspose-tcmmrlfp16ps-2.c: Removed.
+ * gcc.target/i386/amxtranspose-tdpbf16ps-2.c: Removed.
+ * gcc.target/i386/amxtranspose-tdpfp16ps-2.c: Removed.
+ * gcc.target/i386/amxtranspose-tmmultf32ps-2.c: Removed.
+ * gcc.target/i386/amxtranspose-transposed-2.c: Removed.
+
+2025-10-14 Andrew Pinski <andrew.pinski@oss.qualcomm.com>
+
+ PR tree-optimization/122178
+ * g++.dg/tree-ssa/cselim-1.C: New test.
+
+2025-10-14 Zhongyao Chen <chenzhongyao.hit@gmail.com>
+
+ * gcc.target/riscv/predef-profiles-1.c: New test for __riscv_rvi20u64.
+ * gcc.target/riscv/predef-profiles-2.c: New test for __riscv_rvi20u32.
+ * gcc.target/riscv/predef-profiles-3.c: New test for __riscv_rva20u64.
+ * gcc.target/riscv/predef-profiles-4.c: New test for __riscv_rva22u64.
+ * gcc.target/riscv/predef-profiles-5.c: New test for __riscv_rva23u64.
+ * gcc.target/riscv/predef-profiles-6.c: New test for __riscv_rva23s64.
+ * gcc.target/riscv/predef-profiles-7.c: New test for __riscv_rvb23u64.
+ * gcc.target/riscv/predef-profiles-8.c: New test for __riscv_rvb23s64.
+
2025-10-13 Eric Botcazou <ebotcazou@adacore.com>
* gcc.dg/cpp/cpp.exp: Process .i files.
diff --git a/gcc/testsuite/g++.dg/other/i386-2.C b/gcc/testsuite/g++.dg/other/i386-2.C
index 88252ad..d4c73f5 100644
--- a/gcc/testsuite/g++.dg/other/i386-2.C
+++ b/gcc/testsuite/g++.dg/other/i386-2.C
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-transpose -mamx-fp8 -mmovrs -mamx-movrs" } */
+/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
/* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib } } */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
diff --git a/gcc/testsuite/g++.dg/other/i386-3.C b/gcc/testsuite/g++.dg/other/i386-3.C
index a234e4f..e925607 100644
--- a/gcc/testsuite/g++.dg/other/i386-3.C
+++ b/gcc/testsuite/g++.dg/other/i386-3.C
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-transpose -mamx-fp8 -mmovrs -mamx-movrs" } */
+/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
/* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib } } */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
diff --git a/gcc/testsuite/g++.dg/template/dependent-base6.C b/gcc/testsuite/g++.dg/template/dependent-base6.C
index b4bc5c2..9f2a7a2 100644
--- a/gcc/testsuite/g++.dg/template/dependent-base6.C
+++ b/gcc/testsuite/g++.dg/template/dependent-base6.C
@@ -8,5 +8,7 @@ struct A {
struct S1 : A::B { }; // OK
-template<class T> struct S2 : T::B { }; // OK, used to fail
+template<class T> struct S2 : T::B { // OK, used to fail
+ S2() : T::B() { } // Also OK
+};
template struct S2<A>;
diff --git a/gcc/testsuite/g++.dg/tree-ssa/cselim-1.C b/gcc/testsuite/g++.dg/tree-ssa/cselim-1.C
new file mode 100644
index 0000000..a621945
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/cselim-1.C
@@ -0,0 +1,37 @@
+/* { dg-do compile { target c++11 } } */
+/* { dg-options "-O2 -fdump-tree-phiopt1-details -fdump-tree-optimized" } */
+/* PR tree-optimization/122178 */
+/* cselim/cselim-limited should be able to handle clobbers. */
+
+#include <new>
+
+struct s1
+{
+ bool t;
+};
+
+void f(s1 *a, bool b)
+{
+ if (b)
+ {
+ a = new(a)s1{1};
+ }
+ else
+ {
+ a = new(a)s1{0};
+ }
+}
+
+/*
+ The above should be optimized in phiopt1 to:
+ *a = {CLOBBER(bob)};
+ a->t = b;
+ */
+
+
+/* { dg-final { scan-tree-dump-times "factoring out stores" 1 "phiopt1" } } */
+/* { dg-final { scan-tree-dump-times "factoring out clobber" 1 "phiopt1" } } */
+/* { dg-final { scan-tree-dump-times " converted to straightline code" 1 "phiopt1" } } */
+/* { dg-final { scan-tree-dump-not "if " "phiopt1" } } */
+/* { dg-final { scan-tree-dump-not "if " "optimized" } } */
+
diff --git a/gcc/testsuite/gcc.dg/autopar/runtime-auto.c b/gcc/testsuite/gcc.dg/autopar/runtime-auto.c
new file mode 100644
index 0000000..c1a3131
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/autopar/runtime-auto.c
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-parallelize-loops -fdump-tree-parloops2-details" } */
+
+void abort (void);
+
+#define N 1000
+
+int a[N], b[N], c[N];
+
+void
+test_parallel_loop (void)
+{
+ int i;
+
+ /* This loop should be auto-parallelized when -ftree-parallelize-loops
+ (without =number) is used for runtime thread detection via OMP_NUM_THREADS. */
+ for (i = 0; i < N; i++)
+ a[i] = b[i] + c[i];
+}
+
+int
+main (void)
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i * 2;
+ }
+
+ test_parallel_loop ();
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != b[i] + c[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* Check that the loop is parallelized with runtime thread detection. */
+/* { dg-final { scan-tree-dump "parallelizing" "parloops2" } } */
+
+/* Check that "#pragma omp parallel" is generated. */
+/* { dg-final { scan-tree-dump "pragma omp parallel" "parloops2" } } */
+
+/* Check that instead of generating a num_threads(x) clause, the compiler calls
+ "__builtin_omp_get_num_threads" that will set the number of threads at
+ program execution time. */
+/* { dg-final { scan-tree-dump "__builtin_omp_get_num_threads" "parloops2" } } */
+
diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec1.c b/gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec1.c
new file mode 100644
index 0000000..a85e623
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec1.c
@@ -0,0 +1,19 @@
+/* Test that GOMP_task is special cased when cpyfn is NULL. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -fopenmp -flto -std=gnu99 -fdump-ipa-cp-details" } */
+/* { dg-require-effective-target fopenmp } */
+/* { dg-require-effective-target lto } */
+
+void test(int c) {
+ for (int i = 0; i < c; i++)
+ if (!__builtin_constant_p(c))
+ __builtin_abort();
+}
+int main() {
+#pragma omp task
+ test(7);
+ return 0;
+}
+
+/* { dg-final { scan-wpa-ipa-dump "Creating a specialized node of main._omp_fn" "cp" } } */
diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec2.c b/gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec2.c
new file mode 100644
index 0000000..01d7425
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipcp-cb-spec2.c
@@ -0,0 +1,21 @@
+/* Check that GOMP_task doesn't produce callback edges when cpyfn is not
+ NULL. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -fopenmp -flto -std=gnu99 -fdump-ipa-cp-details" } */
+/* { dg-require-effective-target fopenmp } */
+/* { dg-require-effective-target lto } */
+
+void test(int *a) {
+ for (int i = 0; i < 100; i++) {
+ a[i] = i;
+ }
+}
+int main() {
+ int a[100];
+ __builtin_memset (a, 0, sizeof (a));
+ #pragma omp task
+ test (a);
+}
+
+/* { dg-final { scan-ipa-dump-not "Created callback edge" "cp" } } */
diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-cb1.c b/gcc/testsuite/gcc.dg/ipa/ipcp-cb1.c
new file mode 100644
index 0000000..3418b5d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipcp-cb1.c
@@ -0,0 +1,25 @@
+/* Test that we can propagate constants into outlined OpenMP kernels.
+ This tests the underlying callback attribute and its related edges. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -fopenmp -flto -std=gnu99 -fdump-ipa-cp-details" } */
+/* { dg-require-effective-target fopenmp } */
+/* { dg-require-effective-target lto } */
+
+int a[100];
+void test(int c) {
+#pragma omp parallel for
+ for (int i = 0; i < c; i++) {
+ if (!__builtin_constant_p(c)) {
+ __builtin_abort();
+ }
+ a[i] = i;
+ }
+}
+int main() {
+ test(100);
+ return a[5] - 5;
+}
+
+/* { dg-final { scan-wpa-ipa-dump "Creating a specialized node of test._omp_fn" "cp" } } */
+/* { dg-final { scan-wpa-ipa-dump "Aggregate replacements: 0\\\[0]=100\\(by_ref\\)" "cp" } } */
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc
index 7398a29..8ba576e 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc
@@ -210,9 +210,8 @@ report_diag_with_graphs (location_t loc)
g->set_description (desc);
auto a = std::make_unique<diagnostic_node> (*g, "a");
auto b = std::make_unique<diagnostic_node> (*g, "b");
-#define KEY_PREFIX "/placeholder-prefix/"
- b->set_attr (KEY_PREFIX, "color", "red");
-#undef KEY_PREFIX
+ const json::string_property color ("/placeholder-prefix/color");
+ b->set_property (color, "red");
auto c = std::make_unique<diagnostic_node> (*g, "c");
c->set_label ("I am a node label");
diff --git a/gcc/testsuite/gcc.dg/pr121468.c b/gcc/testsuite/gcc.dg/pr121468.c
new file mode 100644
index 0000000..07df274
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr121468.c
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+int e, f, n;
+static int a () { return e; }
+void b () { while (a()); }
+static int d () { return e; }
+static void g (int h) {
+ if (e)
+ c:
+ if (d())
+ goto i;
+ do {
+ if (f)
+ goto c;
+ goto k;
+ i:
+ h = 2147483647;
+ k:
+ e = 2147483646;
+ e = 6 + e;
+ do {
+ b ();
+ } while (1784828957 / f + e + (808 + h) > 0);
+ } while (1 % h);
+}
+void m () { g (-2); }
+int main () {
+ if (n)
+ g (-1);
+}
diff --git a/gcc/testsuite/gcc.dg/pr122200.c b/gcc/testsuite/gcc.dg/pr122200.c
new file mode 100644
index 0000000..cd770fc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr122200.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-mavx" { target { x86_64-*-* i?86-*-* } } } */
+
+
+int a, b;
+
+void f(float g[][5]) {
+ int c;
+
+ for (c = 0; c != a; c++)
+ g[1][c] = c;
+
+ for (int d; d; d++)
+ for (int e = 1; e != b; e++) {
+ for (c = 0; c != a; c++) {
+ g[0][1] = 1;
+
+ if (g[1][c])
+ g[1][c] = 1;
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c b/gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c
new file mode 100644
index 0000000..ceea95b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c
@@ -0,0 +1,32 @@
+/* { dg-do compile } */
+
+/* PR tree-optimization/122296 */
+
+typedef unsigned type1;
+typedef unsigned __attribute__((vector_size(sizeof(unsigned) ))) type2;
+type1 g(type1 a, type1 b)
+{
+ type1 c = a == b;
+ type1 d = (a|b) == 0;
+ return c & d;
+}
+
+type1 f(type1 a, type1 b)
+{
+ type1 c = a != b;
+ type1 d = (a|b) != 0;
+ return c | d;
+}
+type2 g2(type2 a, type2 b)
+{
+ type2 c = a == b;
+ type2 d = (a|b) == 0;
+ return c & d;
+}
+
+type2 f2(type2 a, type2 b)
+{
+ type2 c = a != b;
+ type2 d = (a|b) != 0;
+ return c | d;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c b/gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c
new file mode 100644
index 0000000..bdcdbcc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-forwprop1 -fdump-tree-optimized" } */
+
+/* PR tree-optimization/122296 */
+
+typedef unsigned type1 __attribute__((vector_size(sizeof(unsigned))));
+
+type1 f(type1 a, type1 b)
+{
+ type1 c = a == b;
+ type1 d = (a|b) != 0;
+ return c | d;
+}
+
+/* { dg-final { scan-tree-dump-not "VEC_COND_EXPR " "optimized" } } */
+/* { dg-final { scan-tree-dump-not "VEC_COND_EXPR " "forwprop1" } } */
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vla-1.c b/gcc/testsuite/gcc.dg/tree-ssa/vla-1.c
new file mode 100644
index 0000000..37b7514
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vla-1.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-tree-cddce1-details" } */
+/* PR tree-optimization/122037 */
+
+void bar1 (char *, int) __attribute__((noreturn));
+void foo1 (int size)
+{
+ char temp[size];
+ temp[size-1] = '\0';
+ bar1 (temp, size);
+}
+
+/* The call to __builtin_stack_save should have been removed. */
+/* { dg-final { scan-tree-dump "Deleting : __builtin_stack_save" "cddce1" } } */
+/* { dg-final { scan-tree-dump-not "__builtin_stack_save " "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c
new file mode 100644
index 0000000..7078776
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c
@@ -0,0 +1,29 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__CEIL_DIV, 2, div)
+
+int main (void)
+{
+ check_vect ();
+ int *a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = cl_div (i - N/2, 2);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c
new file mode 100644
index 0000000..7aa9ae8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN(__CEIL_DIV, 8, div)
+
+int main (void)
+{
+ check_vect ();
+ int *a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = cl_div (i - N/2, 8);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c
new file mode 100644
index 0000000..6f903ff
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN(__CEIL_DIV, 19, div)
+
+int main (void)
+{
+ check_vect ();
+ int *a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = cl_div (i - N/2, 19);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c
new file mode 100644
index 0000000..ee6dfb9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN(__CEIL_MOD, 2, div)
+
+int main (void)
+{
+ check_vect ();
+ int *a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = cl_mod (i - N/2, 2);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c
new file mode 100644
index 0000000..de409ea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN(__CEIL_MOD, 8, div)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *a = (unsigned int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_mod (i - N/2, 8);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c
new file mode 100644
index 0000000..f2ba936
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN(__CEIL_MOD, 19, div)
+
+int main (void)
+{
+ check_vect ();
+ int *a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = cl_mod (i - N/2, 19);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c
new file mode 100644
index 0000000..db1f797
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c
@@ -0,0 +1,29 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__CEIL_DIV, 2u, udiv)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *ua = (unsigned int*)&uarr;
+ init_uarr(ua, N);
+ udiv(ua);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_udiv (0xf0000000 + i, 2);
+ if (expected != ua[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c
new file mode 100644
index 0000000..06b4257
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c
@@ -0,0 +1,29 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__CEIL_DIV, 8u, udiv)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *ua = (unsigned int*)&uarr;
+ init_uarr(ua, N);
+ udiv(ua);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_udiv (0xf0000000 + i, 8);
+ if (expected != ua[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c
new file mode 100644
index 0000000..ef6e856
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c
@@ -0,0 +1,29 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__CEIL_DIV, 19u, udiv)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *ua = (unsigned int*)&uarr;
+ init_uarr(ua, N);
+ udiv(ua);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_udiv (0xf0000000 + i, 19);
+ if (expected != ua[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c
new file mode 100644
index 0000000..2d0a5db
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN_UNSIGNED (__CEIL_MOD, 2u, mod)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_umod (0xf0000000 + i, 2);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c
new file mode 100644
index 0000000..2d0a5db
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN_UNSIGNED (__CEIL_MOD, 2u, mod)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_umod (0xf0000000 + i, 2);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c
new file mode 100644
index 0000000..949a509
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+
+TEST_FN_UNSIGNED (__CEIL_MOD, 19u, mod)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int *a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ unsigned int expected = cl_umod (0xf0000000 + i, 19);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c
new file mode 100644
index 0000000..d93e051
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__FLOOR_DIV, 2, div_2)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ div_2(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = fl_div (i - N/2, 2);
+ if (expected != a[i])
+ abort ();
+ }
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c
new file mode 100644
index 0000000..9e986a7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__FLOOR_DIV, 8, div_2)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ div_2(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = fl_div (i - N/2, 8);
+ if (expected != a[i])
+ abort ();
+ }
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c
new file mode 100644
index 0000000..89dd270
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c
@@ -0,0 +1,30 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__FLOOR_DIV, 19, div_2)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ div_2(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = fl_div (i - N/2, 19);
+ if (expected != a[i])
+ abort ();
+ }
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c
new file mode 100644
index 0000000..0c5c162
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__FLOOR_MOD, 2, mod)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = fl_mod (i - N/2, 2);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c
new file mode 100644
index 0000000..f3de145
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__FLOOR_MOD, 8, mod)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = fl_mod (i - N/2, 8);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c
new file mode 100644
index 0000000..3e6bbe9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__FLOOR_MOD, 19, mod)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = fl_mod (i - N/2, 19);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c
new file mode 100644
index 0000000..c242ccb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__ROUND_DIV, 2, div)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = rd_div (i - N/2, 2);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c
new file mode 100644
index 0000000..365c2c59
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__ROUND_DIV, 8, div)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = rd_div (i - N/2, 8);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-div.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-div.c
new file mode 100644
index 0000000..5c377d1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-div.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__ROUND_DIV, 19, div)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ div(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = rd_div (i - N/2, 19);
+ if (expected != a[i])
+ abort();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c
new file mode 100644
index 0000000..6430b3e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__ROUND_MOD, 2, mod)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = rd_mod (i - N/2, 2);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c
new file mode 100644
index 0000000..46c1789
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__ROUND_MOD, 8, mod)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = rd_mod (i - N/2, 8);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c
new file mode 100644
index 0000000..e7ca44e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN(__ROUND_MOD, 19, mod)
+
+int main (void)
+{
+ check_vect ();
+ int * a = (int*)&arr;
+ init_arr(a, N);
+ mod(a);
+ for (int i=0; i<N; i++)
+ {
+ int expected = rd_mod (i - N/2, 19);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c
new file mode 100644
index 0000000..4d42f4e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__ROUND_DIV, 2u, div)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int * a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ div(a);
+ for (unsigned int i=0; i<N; i++)
+ {
+ unsigned int expected = rd_udiv (0xf0000000 + i, 2);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c
new file mode 100644
index 0000000..137b249
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__ROUND_DIV, 8u, div)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int * a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ div(a);
+ for (unsigned int i=0; i<N; i++)
+ {
+ unsigned int expected = rd_udiv (0xf0000000 + i, 8);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c
new file mode 100644
index 0000000..183a930
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c
@@ -0,0 +1,32 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__ROUND_DIV, 19u, div)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int * a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ div(a);
+ for (unsigned int i=0; i<N; i++)
+ {
+ unsigned int expected = rd_udiv (0xf0000000 + i, 19);
+ if (expected != a[i])
+ abort ();
+
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c
new file mode 100644
index 0000000..f321e0e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__ROUND_MOD, 2u, mod)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int * a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ mod(a);
+ for (unsigned int i=0; i<N; i++)
+ {
+ unsigned int expected = rd_umod (0xf0000000 + i, 2);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c
new file mode 100644
index 0000000..041ecd1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__ROUND_MOD, 8u, mod)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int * a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ mod(a);
+ for (unsigned int i=0; i<N; i++)
+ {
+ unsigned int expected = rd_umod (0xf0000000 + i, 8);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c
new file mode 100644
index 0000000..b5ddad1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c
@@ -0,0 +1,31 @@
+/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */
+/* { dg-require-effective-target vect_int} */
+/* { dg-require-effective-target vect_condition} */
+/* { dg-require-effective-target vect_shift} */
+
+
+
+#include "pr104116.h"
+#include "tree-vect.h"
+
+TEST_FN_UNSIGNED(__ROUND_MOD, 19u, mod)
+
+int main (void)
+{
+ check_vect ();
+ unsigned int * a = (unsigned int*)&uarr;
+ init_uarr(a, N);
+ mod(a);
+ for (unsigned int i=0; i<N; i++)
+ {
+ unsigned int expected = rd_umod (0xf0000000 + i, 19);
+ if (expected != a[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr104116.h b/gcc/testsuite/gcc.dg/vect/pr104116.h
new file mode 100644
index 0000000..6f14e4b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr104116.h
@@ -0,0 +1,201 @@
+#define TEST_FN(OP, CONST, NAME) \
+__attribute__((noinline)) \
+void __GIMPLE (ssa,guessed_local(10737416)) \
+NAME (int * a) \
+{ \
+ int i; \
+ long unsigned int _1; \
+ long unsigned int _2; \
+ int * _3; \
+ int _4; \
+ int _5; \
+ unsigned int _12; \
+ unsigned int _13; \
+ \
+ __BB(2,guessed_local(10737416)): \
+ goto __BB3(precise(134217728)); \
+ \
+ __BB(3,loop_header(1),guessed_local(1063004408)): \
+ i_14 = __PHI (__BB5: i_11, __BB2: 0); \
+ _13 = __PHI (__BB5: _12, __BB2: 1024u); \
+ _1 = (long unsigned int) i_14; \
+ _2 = _1 * 4ul; \
+ _3 = a_9(D) + _2; \
+ _4 = __MEM <int> (_3); \
+ _5 = _4 OP CONST; \
+ __MEM <int> (_3) = _5; \
+ i_11 = i_14 + 1; \
+ _12 = _13 - 1u; \
+ if (_12 != 0u) \
+ goto __BB5(guessed(132861994)); \
+ else \
+ goto __BB4(guessed(1355734)); \
+ \
+ __BB(5,guessed_local(1052266995)): \
+ goto __BB3(precise(134217728)); \
+ \
+ __BB(4,guessed_local(10737416)): \
+ return; \
+ \
+} \
+
+#define TEST_FN_UNSIGNED(OP, CONST, NAME) \
+__attribute__((noinline)) \
+void __GIMPLE (ssa,guessed_local(10737416)) \
+NAME (unsigned int * a) \
+{ \
+ int i; \
+ long unsigned int _1; \
+ long unsigned int _2; \
+ unsigned int * _3; \
+ unsigned int _4; \
+ unsigned int _5; \
+ unsigned int _12; \
+ unsigned int _13; \
+ \
+ __BB(2,guessed_local(10737416)): \
+ goto __BB3(precise(134217728)); \
+ \
+ __BB(3,loop_header(1),guessed_local(1063004408)): \
+ i_14 = __PHI (__BB5: i_11, __BB2: 0); \
+ _13 = __PHI (__BB5: _12, __BB2: 1024u); \
+ _1 = (long unsigned int) i_14; \
+ _2 = _1 * 4ul; \
+ _3 = a_9(D) + _2; \
+ _4 = __MEM <unsigned int> (_3); \
+ _5 = _4 OP CONST; \
+ __MEM <unsigned int> (_3) = _5; \
+ i_11 = i_14 + 1; \
+ _12 = _13 - 1u; \
+ if (_12 != 0u) \
+ goto __BB5(guessed(132861994)); \
+ else \
+ goto __BB4(guessed(1355734)); \
+ \
+ __BB(5,guessed_local(1052266995)): \
+ goto __BB3(precise(134217728)); \
+ \
+ __BB(4,guessed_local(10737416)): \
+ return; \
+} \
+
+
+#define N 1024
+int arr[N];
+__attribute__((optimize("O0")))
+void init_arr (int *a, int n)
+{
+ for (int i=0; i<n; i++)
+ a[i] = i - n/2;
+}
+
+unsigned int uarr[N];
+__attribute__((optimize("O0")))
+void init_uarr (unsigned int *a, int n)
+{
+ for (unsigned int i=0; i<n; i++)
+ a[i] = 0xf0000000 + i;
+}
+
+int cl_div (int x, int y)
+{
+ int r = x % y;
+ int q = x / y;
+ if (r != 0 && (x ^ y) >= 0)
+ q++;
+ return q;
+}
+
+unsigned int cl_udiv (unsigned int x, unsigned int y)
+{
+ unsigned int r = x % y;
+ unsigned int q = x / y;
+ if (r > 0)
+ q++;
+ return q;
+}
+
+int cl_mod (int x, int y)
+{
+ int r = x % y;
+ if (r != 0 && (x ^ y) >= 0)
+ r -= y;
+ return r;
+}
+
+unsigned int cl_umod (unsigned int x, unsigned int y)
+{
+ unsigned int r = x % y;
+ unsigned int q = x / y;
+ if (r > 0)
+ r-=y;
+ return r;
+}
+
+int fl_div (int x, int y)
+{
+ int r = x % y;
+ int q = x / y;
+ if (r != 0 && (x ^ y) < 0)
+ q--;
+ return q;
+}
+
+
+int fl_mod (int x, int y)
+{
+ int r = x % y;
+ if (r != 0 && (x ^ y) < 0)
+ r += y;
+ return r;
+}
+
+int abs(int x)
+{
+ if (x < 0) return -x;
+ return x;
+}
+
+int rd_mod (int x, int y)
+{
+ int r = x % y;
+ if (abs(r) > abs((y-1) >> 1))
+ {
+ if ((x ^ y) < 0)
+ r += y;
+ else
+ r -= y;
+ }
+ return r;
+}
+
+int rd_div (int x, int y)
+{
+ int r = x % y;
+ int q = x / y;
+ if (abs(r) > abs((y-1) >> 1))
+ {
+ if ((x ^ y) < 0)
+ q--;
+ else
+ q++;
+ }
+ return q;
+}
+
+unsigned int rd_umod (unsigned int x, unsigned int y)
+{
+ unsigned int r = x % y;
+ if (r > ((y-1) >> 1))
+ r -= y;
+ return r;
+}
+
+unsigned int rd_udiv (unsigned int x, unsigned int y)
+{
+ unsigned int r = x % y;
+ unsigned int q = x / y;
+ if (r > ((y-1) >> 1))
+ q++;
+ return q;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr120687-1.c b/gcc/testsuite/gcc.dg/vect/pr120687-1.c
index ce9cf63..ac684c0 100644
--- a/gcc/testsuite/gcc.dg/vect/pr120687-1.c
+++ b/gcc/testsuite/gcc.dg/vect/pr120687-1.c
@@ -11,6 +11,6 @@ frd (unsigned *p, unsigned *lastone)
return sum;
}
-/* { dg-final { scan-tree-dump "reduction: detected reduction chain" "vect" } } */
+/* { dg-final { scan-tree-dump "Starting SLP discovery of reduction chain" "vect" } } */
/* { dg-final { scan-tree-dump-not "SLP discovery of reduction chain failed" "vect" } } */
/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr120687-2.c b/gcc/testsuite/gcc.dg/vect/pr120687-2.c
index dfc6dc7..25f0355 100644
--- a/gcc/testsuite/gcc.dg/vect/pr120687-2.c
+++ b/gcc/testsuite/gcc.dg/vect/pr120687-2.c
@@ -12,6 +12,6 @@ frd (float *p, float *lastone)
return sum;
}
-/* { dg-final { scan-tree-dump "reduction: detected reduction chain" "vect" } } */
+/* { dg-final { scan-tree-dump "Starting SLP discovery of reduction chain" "vect" } } */
/* { dg-final { scan-tree-dump-not "SLP discovery of reduction chain failed" "vect" } } */
/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr120687-3.c b/gcc/testsuite/gcc.dg/vect/pr120687-3.c
index f20a66a..31a6c94 100644
--- a/gcc/testsuite/gcc.dg/vect/pr120687-3.c
+++ b/gcc/testsuite/gcc.dg/vect/pr120687-3.c
@@ -11,6 +11,6 @@ frd (float *p, float *lastone)
return sum;
}
-/* { dg-final { scan-tree-dump "reduction: detected reduction chain" "vect" } } */
+/* { dg-final { scan-tree-dump "Starting SLP discovery of reduction chain" "vect" } } */
/* { dg-final { scan-tree-dump-not "SLP discovery of reduction chain failed" "vect" } } */
/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr121949_1.c b/gcc/testsuite/gcc.dg/vect/pr121949_1.c
new file mode 100644
index 0000000..9e8d41e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr121949_1.c
@@ -0,0 +1,45 @@
+#ifndef TYPE
+#define TYPE short
+#define MAX 16
+#define IV_TYPE char
+#endif
+
+#include "tree-vect.h"
+
+__attribute__((noipa))
+void f(TYPE* acc)
+{
+ for (IV_TYPE row = 0; row < MAX; ++row)
+ acc[row] = acc[row] << row;
+}
+
+__attribute__((noipa))
+void g(TYPE* acc)
+{
+#pragma GCC novector
+ for (IV_TYPE row = 0; row < MAX; ++row)
+ acc[row] = acc[row] << row;
+}
+
+int main ()
+{
+
+ check_vect ();
+
+ TYPE acc1[MAX] = {};
+ TYPE acc2[MAX] = {};
+#pragma GCC novector
+ for (int i = 0; i < MAX; i++)
+ acc1[i] = acc2[i] = i;
+
+ f (acc1);
+ f (acc2);
+
+#pragma GCC novector
+ for (int i = 0; i < MAX; i++)
+ if (acc1[i] != acc2[i])
+ __builtin_abort ();
+}
+
+/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target { vect_var_shift && vect_int } } } } */
+/* { dg-final { scan-tree-dump "vect_recog_over_widening_pattern: detected" "vect" { target { vect_var_shift && vect_int } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr121949_2.c b/gcc/testsuite/gcc.dg/vect/pr121949_2.c
new file mode 100644
index 0000000..f448eb6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr121949_2.c
@@ -0,0 +1,45 @@
+#ifndef TYPE
+#define TYPE int
+#define MAX 32
+#define IV_TYPE short
+#endif
+
+#include "tree-vect.h"
+
+__attribute__((noipa))
+void f(TYPE* acc)
+{
+ for (IV_TYPE row = 0; row < MAX; ++row)
+ acc[row] = acc[row] << row;
+}
+
+__attribute__((noipa))
+void g(TYPE* acc)
+{
+#pragma GCC novector
+ for (IV_TYPE row = 0; row < MAX; ++row)
+ acc[row] = acc[row] << row;
+}
+
+int main ()
+{
+
+ check_vect ();
+
+ TYPE acc1[MAX] = {};
+ TYPE acc2[MAX] = {};
+#pragma GCC novector
+ for (int i = 0; i < MAX; i++)
+ acc1[i] = acc2[i] = i;
+
+ f (acc1);
+ f (acc2);
+
+#pragma GCC novector
+ for (int i = 0; i < MAX; i++)
+ if (acc1[i] != acc2[i])
+ __builtin_abort ();
+}
+
+/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target { vect_var_shift && vect_int } } } } */
+/* { dg-final { scan-tree-dump-not "vect_recog_over_widening_pattern: detected" "vect" { target { vect_var_shift && vect_int } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr121949_3.c b/gcc/testsuite/gcc.dg/vect/pr121949_3.c
new file mode 100644
index 0000000..b7e6a3d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr121949_3.c
@@ -0,0 +1,45 @@
+#ifndef TYPE
+#define TYPE long long
+#define MAX 64
+#define IV_TYPE int
+#endif
+
+#include "tree-vect.h"
+
+__attribute__((noipa))
+void f(TYPE* acc)
+{
+ for (IV_TYPE row = 0; row < MAX; ++row)
+ acc[row] = acc[row] << row;
+}
+
+__attribute__((noipa))
+void g(TYPE* acc)
+{
+#pragma GCC novector
+ for (IV_TYPE row = 0; row < MAX; ++row)
+ acc[row] = acc[row] << row;
+}
+
+int main ()
+{
+
+ check_vect ();
+
+ TYPE acc1[MAX] = {};
+ TYPE acc2[MAX] = {};
+#pragma GCC novector
+ for (int i = 0; i < MAX; i++)
+ acc1[i] = acc2[i] = i;
+
+ f (acc1);
+ f (acc2);
+
+#pragma GCC novector
+ for (int i = 0; i < MAX; i++)
+ if (acc1[i] != acc2[i])
+ __builtin_abort ();
+}
+
+/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target { vect_var_shift && vect_int } } } } */
+/* { dg-final { scan-tree-dump "vect_recog_vector_vector_shift_pattern: detected" "vect" { target { vect_var_shift && vect_int } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr122301.c b/gcc/testsuite/gcc.dg/vect/vect-pr122301.c
new file mode 100644
index 0000000..acc7aed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-pr122301.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+int get_prev_frame_segid(unsigned char *p, int n)
+{
+ int tem;
+ unsigned seg_id = 8;
+ for (int x = 0; x < n; x++)
+ {
+ int a = seg_id;
+ tem = a < p[x] ? a : p[x];
+ seg_id = tem;
+ }
+ return tem;
+}
+
+/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" { target { vect_int && { ! vect_no_int_min_max } } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr122308.c b/gcc/testsuite/gcc.dg/vect/vect-pr122308.c
new file mode 100644
index 0000000..58c73ae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-pr122308.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-O3 -fdump-tree-unrolljam-optimized" } */
+
+int a[1024];
+int b[2048];
+int c[2048];
+
+void foo(int n)
+{
+ for (int i = 0; i < n; i++)
+ {
+ int index = c[i];
+
+ for (int j = 0; j < 1024; ++j)
+ a[j] += b[index + j];
+ }
+}
+
+/* { dg-final { scan-tree-dump "optimized: applying unroll and jam" "unrolljam" } } */
+/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" { target vect_int } } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c b/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c
index c49fbb5..1ff51de 100644
--- a/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c
+++ b/gcc/testsuite/gcc.target/aarch64/acle/rwsr-armv8p9.c
@@ -72,7 +72,7 @@ readwrite_armv8p9a_sysregs (long long int a)
a = __arm_rsr64 ("pmicfiltr_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c9_c6_0" } } */
a = __arm_rsr64 ("pmicntr_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c9_c4_0" } } */
a = __arm_rsr64 ("pmicntsvr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s2_0_c14_c12_0" } } */
- a = __arm_rsr64 ("pmsdsfr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_4_c9_c10_4" } } */
+ a = __arm_rsr64 ("pmsdsfr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c10_4" } } */
a = __arm_rsr64 ("pmsscr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c13_3" } } */
a = __arm_rsr64 ("pmuacr_el1"); /* { { dg-final { scan-assembler "mrs\tx0, s3_0_c9_c14_4" } } */
a = __arm_rsr64 ("por_el0"); /* { { dg-final { scan-assembler "mrs\tx0, s3_3_c10_c2_4" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c b/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c
new file mode 100644
index 0000000..a474a20
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { check-function-bodies "**" "" "" } } */
+
+#include <arm_sve.h>
+
+/*
+** foo:
+** ptrue p0\.b, all
+** brkb p0\.b, p0/z, p0\.b
+** ret
+*/
+svbool_t foo () {
+ return svbrkb_b_m (svpfalse (), svptrue_b8 (), svptrue_b8 ());
+}
+
+/*
+** bar:
+** ptrue p0\.b, all
+** brka p0\.b, p0/z, p0\.b
+** ret
+*/
+svbool_t bar () {
+ return svbrka_b_m (svpfalse (), svptrue_b8 (), svptrue_b8 ());
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c b/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c
new file mode 100644
index 0000000..16844ee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv8.2-a+sve2p1" } */
+/* { dg-final { check-function-bodies "**" "" "" } } */
+
+#include <arm_sve.h>
+
+/*
+** f:
+** pfalse p([0-7]+)\.b
+** mov z0\.b, #-1
+** pmov z0\[1\], p\1\.d
+** ret
+*/
+svuint64_t f () {
+ return svpmov_lane_u64_m (svdup_u64 (~0UL), svpfalse (), 1);
+}
diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
index 444c4a3..02d7b51 100644
--- a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
+++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
@@ -134,8 +134,8 @@ test_select_8 (__fp16 a, __fp16 b, __fp16 c)
}
/* { dg-final { scan-assembler-times {vseleq\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 4 } } */
-/* { dg-final { scan-assembler-times {vselgt\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
-/* { dg-final { scan-assembler-times {vselge\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
+/* { dg-final { scan-assembler-times {vselgt\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 2 } } */
+/* { dg-final { scan-assembler-times {vselge\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 2 } } */
/* { dg-final { scan-assembler-not {vmov\.f16} } } */
diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
index dff57ac..a249d71 100644
--- a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
+++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
@@ -8,4 +8,4 @@ test_select (__fp16 a, __fp16 b, __fp16 c)
{
return (a < b) ? b : c;
}
-/* { dg-final { scan-assembler "bx?(mi|pl)" } } */
+/* { dg-final { scan-assembler "vselgt\.f16\t" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq-check-carry.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq-check-carry.c
new file mode 100644
index 0000000..3a9b8de
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq-check-carry.c
@@ -0,0 +1,48 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_v8_1m_mve_ok } */
+/* { dg-require-effective-target arm_mve_hw } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_v8_1m_mve } */
+
+#include "arm_mve.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <inttypes.h>
+#include <stdio.h>
+
+__attribute((noinline)) void print_uint32x4_t(const char *name, uint32x4_t val)
+{
+ printf("%s: %u, %u, %u, %u\n",
+ name,
+ vgetq_lane_u32(val, 0),
+ vgetq_lane_u32(val, 1),
+ vgetq_lane_u32(val, 2),
+ vgetq_lane_u32(val, 3));
+}
+
+void __attribute__ ((noinline)) test_2(void)
+{
+ uint32x4_t v12, v18, v108;
+ unsigned v17 = 0;
+ v12 = vdupq_n_u32(1);
+ v18 = vadcq_u32(v12, v12, &v17);
+ v17 = 1;
+ v108 = vadcq_u32(v12, v12, &v17);
+ print_uint32x4_t("v108", v108);
+}
+
+int main()
+{
+ test_2();
+ return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* { dg-output "v108: 3, 2, 2, 2" } */
+/* { dg-final { scan-assembler-times {\tvmrs\t(?:ip|fp|r[0-9]+), FPSCR_nzcvqc} 3 } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_s32.c
index 0d4cb77..c5a5878 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_s32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_s32.c
@@ -14,12 +14,12 @@ extern "C" {
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vadct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
@@ -41,12 +41,12 @@ foo (int32x4_t inactive, int32x4_t a, int32x4_t b, unsigned *carry, mve_pred16_t
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vadct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_u32.c
index a0ba682..23908a4 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_u32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_u32.c
@@ -14,12 +14,12 @@ extern "C" {
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vadct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
@@ -41,12 +41,12 @@ foo (uint32x4_t inactive, uint32x4_t a, uint32x4_t b, unsigned *carry, mve_pred1
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vadct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c
index 7a33261..940e2ed 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c
@@ -14,12 +14,12 @@ extern "C" {
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vsbct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
@@ -41,12 +41,12 @@ foo (int32x4_t inactive, int32x4_t a, int32x4_t b, unsigned *carry, mve_pred16_t
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vsbct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c
index 6090219..478b938 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c
@@ -14,12 +14,12 @@ extern "C" {
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vsbct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
@@ -41,12 +41,12 @@ foo (uint32x4_t inactive, uint32x4_t a, uint32x4_t b, unsigned *carry, mve_pred1
** ...
** vmrs (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?: @.*|)
** ...
+** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
+** ...
** bfi (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|)
** ...
** vmsr FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?: @.*|)
** ...
-** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|)
-** ...
** vpst(?: @.*|)
** ...
** vsbct.i32 q[0-9]+, q[0-9]+, q[0-9]+(?: @.*|)
diff --git a/gcc/testsuite/gcc.target/bpf/memset-3.c b/gcc/testsuite/gcc.target/bpf/memset-3.c
new file mode 100644
index 0000000..0b044a0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/bpf/memset-3.c
@@ -0,0 +1,56 @@
+/* Test that inline memset expansion properly duplicates the byte value
+ across the bytes to fill. PR target/122139. */
+/* { dg-do compile } */
+/* { dg-options "-O1 -masm=normal" } */
+
+#define SIZE 63
+
+unsigned char cdata[SIZE];
+unsigned short sdata[SIZE / 2 + 1];
+unsigned int idata[SIZE / 4 + 1];
+unsigned long ldata[SIZE / 8 + 1];
+
+void
+a (void)
+{
+ __builtin_memset (cdata, 0x54, SIZE);
+}
+/* 0x54=84 */
+/* { dg-final { scan-assembler-times "\[\t \]stb\[^\r\n\]+,84" 63 } } */
+
+void
+b (void)
+{
+ __builtin_memset (sdata, 0x7a, SIZE);
+}
+
+/* 0x7a=122, 0x7a7a=31354 */
+/* { dg-final { scan-assembler-times "\[\t \]sth\[^\r\n\]+,31354" 31 } } */
+/* { dg-final { scan-assembler-times "\[\t \]stb\[^\r\n\]+,122" 1 } } */
+
+void
+c (void)
+{
+ __builtin_memset (idata, 0x23, SIZE);
+}
+
+/* 0x23=35, 0x2323=8995, 0x23232323=589505315 */
+/* { dg-final { scan-assembler-times "\[\t \]stw\[^\r\n\]+,589505315" 15 } } */
+/* { dg-final { scan-assembler-times "\[\t \]sth\[^\r\n\]+,8995" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]stb\[^\r\n\]+,35" 1 } } */
+
+void
+d (void)
+{
+ __builtin_memset (ldata, 0xcb, SIZE);
+}
+
+/* 0xcbcbcbcb_cbcbcbcb = -3761688987579986997,
+ 0xcbcbcbcb = -875836469
+ 0xcbcb = -13365
+ 0xcb = -53 */
+/* { dg-final { scan-assembler-times "lddw\t%r.,-3761688987579986997"}} */
+/* { dg-final { scan-assembler-times "stxdw" 7 } } */
+/* { dg-final { scan-assembler-times "\[\t \]stw\[^\r\n\]+,-875836469" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]sth\[^\r\n\]+,-13365" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]stb\[^\r\n\]+,-53" 1 } } */
diff --git a/gcc/testsuite/gcc.target/bpf/memset-4.c b/gcc/testsuite/gcc.target/bpf/memset-4.c
new file mode 100644
index 0000000..0c835c5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/bpf/memset-4.c
@@ -0,0 +1,24 @@
+/* Test that inline memset expansion properly duplicates the byte value
+ across the bytes to fill for non-const value. PR target/122139. */
+/* { dg-do compile } */
+/* { dg-options "-O1 -masm=normal" } */
+
+#define SIZE 63
+
+unsigned char cdata[SIZE];
+unsigned short sdata[SIZE / 2 + 1];
+unsigned int idata[SIZE / 4 + 1];
+unsigned long ldata[SIZE / 8 + 1];
+
+void
+c (unsigned char byte)
+{
+ __builtin_memset (idata, byte, SIZE);
+}
+
+/* Hard to verify for non-const value. Look for the mul by 0x01010101
+ and the proper number of stores... */
+/* { dg-final { scan-assembler "mul32\[\t \]%r.,16843009" } } */
+/* { dg-final { scan-assembler-times "stxw" 15 } } */
+/* { dg-final { scan-assembler-times "stxh" 1 } } */
+/* { dg-final { scan-assembler-times "stxb" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h b/gcc/testsuite/gcc.target/i386/amx-check.h
index 0addb5b..c43a955 100644
--- a/gcc/testsuite/gcc.target/i386/amx-check.h
+++ b/gcc/testsuite/gcc.target/i386/amx-check.h
@@ -260,9 +260,6 @@ main ()
#ifdef AMX_TF32
&& __builtin_cpu_supports ("amx-tf32")
#endif
-#ifdef AMX_TRANSPOSE
- && __builtin_cpu_supports ("amx-transpose")
-#endif
#ifdef AMX_FP8
&& __builtin_cpu_supports ("amx-fp8")
#endif
diff --git a/gcc/testsuite/gcc.target/i386/amxmovrs-2rpntlvwrs-2.c b/gcc/testsuite/gcc.target/i386/amxmovrs-2rpntlvwrs-2.c
deleted file mode 100644
index 0093ef7..0000000
--- a/gcc/testsuite/gcc.target/i386/amxmovrs-2rpntlvwrs-2.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_movrs } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target avx512fp16 } */
-/* { dg-options "-O2 -mamx-movrs -mamx-transpose -mavx512fp16 -mavx512bf16" } */
-#define AMX_MOVRS
-#define AMX_TRANSPOSE
-#define DO_TEST test_amx_movrs_t2rpntlvwrs
-void test_amx_movrs_t2rpntlvwrs ();
-#include "amx-helper.h"
-
-#define init_pair_tile_reg_and_src_z_t(tmm_num, src, buffer, ztype, wtype) \
-{ \
- init_pair_tile_src (tmm_num, &src, buffer, ztype); \
- _tile_2rpntlvwz##ztype##rs##wtype (tmm_num, buffer, _STRIDE); \
-}
-
-void test_amx_movrs_t2rpntlvwrs ()
-{
- __tilecfg_u cfg;
- __tilepair src;
- __tile ref_0, ref_1;
- uint8_t buffer[2048];
- int i;
-
- init_tile_config (&cfg);
-
- for (i = 0; i < 2048; i++)
- buffer[i] = i % 256;
-
- /* Check t2rpntlvwz0rs. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 0,);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-
- /* Check t2rpntlvwz1rs. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 1,);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-
- /* Check t2rpntlvwz0t1rs. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 0, t1);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-
- /* Check t2rpntlvwz1t1rs. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 1, t1);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxmovrs-asmatt-1.c b/gcc/testsuite/gcc.target/i386/amxmovrs-asmatt-1.c
index d99a97f..339550b 100644
--- a/gcc/testsuite/gcc.target/i386/amxmovrs-asmatt-1.c
+++ b/gcc/testsuite/gcc.target/i386/amxmovrs-asmatt-1.c
@@ -1,11 +1,7 @@
/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-options "-O2 -mamx-movrs -mamx-transpose" } */
+/* { dg-options "-O2 -mamx-movrs" } */
/* { dg-final { scan-assembler "tileloaddrs\[ \\t]+\[^\n\]*\(%\[a-z0-9\]*\,%\[a-z0-9\]*\,\[124\]\)+\[^\n\]*%tmm\[0-9\]" } } */
/* { dg-final { scan-assembler "tileloaddrst1\[ \\t]+\[^\n\]*\(%\[a-z0-9]*\,%\[a-z0-9\]*\,\[124\]\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0rs\[ \\t]+\[^\n\]*\(%\[a-z0-9\]*\,%\[a-z0-9\]*\,\[124\]\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0rst1\[ \\t]+\[^\n\]*\(%\[a-z0-9\]*\,%\[a-z0-9\]*\,\[124\]\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1rs\[ \\t]+\[^\n\]*\(%\[a-z0-9\]*\,%\[a-z0-9\]*\,\[124\]\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1rst1\[ \\t]+\[^\n\]*\(%\[a-z0-9\]*\,%\[a-z0-9\]*\,\[124\]\)+\[^\n\]*%tmm\[0-9\]" } } */
#include <immintrin.h>
extern const void* base;
@@ -20,8 +16,4 @@ void TEST()
{
_tile_loaddrs (TMM1, base, stride);
_tile_loaddrst1 (TMM1, base, stride);
- _tile_2rpntlvwz0rs (TMM0, base, stride);
- _tile_2rpntlvwz0rst1 (TMM1, base, stride);
- _tile_2rpntlvwz1rs (TMM2, base, stride);
- _tile_2rpntlvwz1rst1 (TMM3, base, stride);
}
diff --git a/gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c b/gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c
index 6a33986..6a522b5 100644
--- a/gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c
+++ b/gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c
@@ -1,12 +1,8 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-require-effective-target masm_intel } */
-/* { dg-options "-O2 -mamx-movrs -mamx-transpose -masm=intel" } */
+/* { dg-options "-O2 -mamx-movrs -masm=intel" } */
/* { dg-final { scan-assembler-times "tileloaddrs\[ \\t]%tmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "tileloaddrst1\[ \\t]%tmm\[0-9\]" 1 } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0rs\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0rst1\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1rs\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1rst1\[ \\t]%tmm\[0-9\]" } } */
#include <immintrin.h>
extern const void* base;
@@ -21,8 +17,4 @@ void TEST()
{
_tile_loaddrs (TMM1, base, stride);
_tile_loaddrst1 (TMM1, base, stride);
- _tile_2rpntlvwz0rs (TMM0, base, stride);
- _tile_2rpntlvwz0rst1 (TMM1, base, stride);
- _tile_2rpntlvwz1rs (TMM2, base, stride);
- _tile_2rpntlvwz1rst1 (TMM3, base, stride);
}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-2rpntlvw-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-2rpntlvw-2.c
deleted file mode 100644
index 2d01827..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-2rpntlvw-2.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-options "-O2 -mamx-transpose" } */
-#define AMX_TRANSPOSE
-#define DO_TEST test_amx_transpose_t2rpntlvw
-void test_amx_transpose_t2rpntlvw ();
-#include "amx-helper.h"
-#define init_pair_tile_reg_and_src_z_t(tmm_num, src, buffer, ztype, wtype) \
-{ \
- init_pair_tile_src (tmm_num, &src, buffer, ztype); \
- _tile_2rpntlvwz##ztype##wtype (tmm_num, buffer, _STRIDE); \
-}
-
-void test_amx_transpose_t2rpntlvw ()
-{
- __tilecfg_u cfg;
- __tilepair src;
- __tile ref_0, ref_1;
- uint8_t buffer[2048];
- int i;
-
- init_tile_config (&cfg);
-
- for (i = 0; i < 2048; i++)
- buffer[i] = i % 256;
-
- /* Check t2rpntlvwz0. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 0,);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-
- /* Check t2rpntlvwz1. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 1,);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-
- /* Check t2rpntlvwz0t1. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 0, t1);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-
- /* Check t2rpntlvwz1t1. */
- init_pair_tile_reg_and_src_z_t (0, src, buffer, 1, t1);
- _tile_stored (0, ref_0.buf, _STRIDE);
- _tile_stored (1, ref_1.buf, _STRIDE);
- if (!check_pair_tile_register (&ref_0, &ref_1, &src))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-asmatt-1.c b/gcc/testsuite/gcc.target/i386/amxtranspose-asmatt-1.c
deleted file mode 100644
index a970f5d..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-asmatt-1.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-options "-O2 -mamx-transpose -mamx-bf16 -mamx-complex -mamx-fp16 -mamx-tf32" } */
-/* { dg-final { scan-assembler "ttdpbf16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "ttdpfp16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "ttransposed\[ \\t]+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0\[ \\t]+\[^\n\]*\\(%\[a-z0-9]*\,%\[a-z0-9\]*\,\[124\]\\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0t1\[ \\t]+\[^\n\]*\\(%\[a-z0-9]*\,%\[a-z0-9\]*\,\[124\]\\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1\[ \\t]+\[^\n\]*\\(%\[a-z0-9]*\,%\[a-z0-9\]*\,\[124\]\\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1t1\[ \\t]+\[^\n\]*\\(%\[a-z0-9]*\,%\[a-z0-9\]*\,\[124\]\\)+\[^\n\]*%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "tconjtcmmimfp16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "tconjtfp16\[ \\t]+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "ttcmmimfp16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "ttcmmrlfp16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-/* { dg-final { scan-assembler "ttmmultf32ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
-#include <immintrin.h>
-
-extern const void* base;
-extern const int stride;
-
-#define TMM0 0
-#define TMM1 1
-#define TMM2 2
-#define TMM3 3
-
-void TEST()
-{
- _tile_tdpbf16ps (TMM1, TMM2, TMM3);
- _tile_tdpfp16ps (TMM1, TMM2, TMM3);
- _tile_transposed (TMM1, TMM2);
- _tile_2rpntlvwz0 (TMM0, base, stride);
- _tile_2rpntlvwz0t1 (TMM1, base, stride);
- _tile_2rpntlvwz1 (TMM2, base, stride);
- _tile_2rpntlvwz1t1 (TMM3, base, stride);
- _tile_conjtcmmimfp16ps (TMM1, TMM2, TMM3);
- _tile_conjtfp16 (TMM1, TMM2);
- _tile_tcmmimfp16ps (TMM1, TMM2, TMM3);
- _tile_tcmmrlfp16ps (TMM1, TMM2, TMM3);
- _tile_tmmultf32ps (TMM1, TMM2, TMM3);
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-asmintel-1.c b/gcc/testsuite/gcc.target/i386/amxtranspose-asmintel-1.c
deleted file mode 100644
index 2cf73ae..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-asmintel-1.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-require-effective-target masm_intel } */
-/* { dg-options "-O2 -mamx-transpose -mamx-bf16 -mamx-complex -mamx-fp16 -mamx-tf32 -masm=intel" } */
-/* { dg-final { scan-assembler "ttdpbf16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
-/* { dg-final { scan-assembler "ttdpfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
-/* { dg-final { scan-assembler "ttransposed\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz0t1\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "t2rpntlvwz1t1\[ \\t]%tmm\[0-9\]" } } */
-/* { dg-final { scan-assembler "tconjtcmmimfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
-/* { dg-final { scan-assembler "tconjtfp16\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2" } } */
-/* { dg-final { scan-assembler "ttcmmimfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
-/* { dg-final { scan-assembler "ttcmmrlfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
-/* { dg-final { scan-assembler "ttmmultf32ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
-#include <immintrin.h>
-
-extern const void* base;
-extern const int stride;
-
-void TEST()
-{
- _tile_tdpbf16ps (1, 2, 3);
- _tile_tdpfp16ps (1, 2, 3);
- _tile_transposed (1, 2);
- _tile_2rpntlvwz0 (5, base, stride);
- _tile_2rpntlvwz0t1 (4, base, stride);
- _tile_2rpntlvwz1 (3, base, stride);
- _tile_2rpntlvwz1t1 (2, base, stride);
- _tile_conjtcmmimfp16ps (1, 2, 3);
- _tile_conjtfp16 (1, 2);
- _tile_tcmmimfp16ps (1, 2, 3);
- _tile_tcmmrlfp16ps (1, 2, 3);
- _tile_tmmultf32ps (1, 2, 3);
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-conjtcmmimfp16ps-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-conjtcmmimfp16ps-2.c
deleted file mode 100644
index 159867d..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-conjtcmmimfp16ps-2.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_complex } */
-/* { dg-require-effective-target avx512fp16 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-complex -mavx512fp16" } */
-#define AMX_TRANSPOSE
-#define AMX_COMPLEX
-#define DO_TEST test_amx_transpose_conjtcmmimfp16ps
-void test_amx_transpose_conjtcmmimfp16ps ();
-#include "amx-helper.h"
-
-void calc_matrix_conjtcmmimfp16ps (__tile *dst, __tile *src1, __tile *src2)
-{
- uint16_t *src1_buf = (uint16_t *) src1->buf;
- uint16_t *src2_buf = (uint16_t *) src2->buf;
- float *dst_buf = (float *) dst->buf;
-
- int K = src1->rows;
- int M = src1->colsb / 4;
- int N = src2->colsb / 4;
- int m, k, n, t;
-
- for (m = 0; m < M; m++)
- for (k = 0; k < K; k++)
- for (n = 0; n < N; n++)
- for (t = 0; t < 2; t+=2)
- dst_buf[m * N + n] +=
- (make_fp16_f32(src1_buf[k * 2 * M + 2 * m + t]) *
- make_fp16_f32(src2_buf[k * 2 * N + 2 * n + t + 1])) -
- (make_fp16_f32(src1_buf[k * 2 * M + 2 * m + t + 1]) *
- make_fp16_f32(src2_buf[k * 2 * N + 2 * n + t]));
-}
-
-void test_amx_transpose_conjtcmmimfp16ps ()
-{
- __tilecfg_u cfg;
- __tile dst, dst_ref, src1, src2;
- uint8_t tmp_dst_buf[1024], tmp_dst_zero_buf[1024];
-
- init_fp16_max_tile_buffer (tmp_dst_buf);
- init_fp16_max_tile_zero_buffer (tmp_dst_zero_buf);
-
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_zero_buf);
- init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
-
- calc_matrix_conjtcmmimfp16ps (&dst, &src1, &src2);
-
- _tile_conjtcmmimfp16ps (1, 2, 3);
- _tile_stored (1, dst_ref.buf, _STRIDE);
-
- if (!check_tile_register (&dst_ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-conjtfp16-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-conjtfp16-2.c
deleted file mode 100644
index 710d76a..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-conjtfp16-2.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_complex } */
-/* { dg-require-effective-target avx512fp16 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-complex -mavx512fp16" } */
-#define AMX_TRANSPOSE
-#define AMX_COMPLEX
-#define DO_TEST test_amx_transpose_conjtfp16
-void test_amx_transpose_conjtfp16 ();
-#include "amx-helper.h"
-
-void calc_matrix_conjtfp16 (__tile *dst, __tile *src)
-{
- uint16_t *src_buf = (uint16_t *) src->buf;
- float *dst_buf = (float *) dst->buf;
-
- int M = dst->rows;
- int N = dst->colsb / 4;
- int i, j, t;
-
- for (i = 0; i < M; i++)
- for (j = 0; j < N; j++)
- for (t = 0; t < 2; t+=2)
- {
- dst_buf[i * 2 * N + 2 * j + t] = src_buf[j * 2 * M + 2 * i + t];
- dst_buf[i * 2 * N + 2 * j + t + 1] = -src_buf[j * 2 * M + 2 * i + t + 1];
- }
-}
-
-void test_amx_transpose_conjtfp16 ()
-{
- __tilecfg_u cfg;
- __tile src, dst, ref;
- uint8_t tmp_dst_buf[1024];
-
- init_fp16_max_tile_buffer (tmp_dst_buf);
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (2, src, tmp_dst_buf);
-
- /* Check tconjtfp16. */
- calc_matrix_conjtfp16 (&dst, &src);
- _tile_conjtfp16 (1, 2);
- _tile_stored (1, ref.buf, _STRIDE);
-
- if (!check_tile_register (&ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-tcmmimfp16ps-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-tcmmimfp16ps-2.c
deleted file mode 100644
index e2a0f10..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-tcmmimfp16ps-2.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_complex } */
-/* { dg-require-effective-target avx512fp16 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-complex -mavx512fp16" } */
-#define AMX_TRANSPOSE
-#define AMX_COMPLEX
-#define DO_TEST test_amx_transpose_tcmmimfp16ps
-void test_amx_transpose_tcmmimfp16ps ();
-#include "amx-helper.h"
-
-void calc_matrix_tcmmimfp16ps (__tile *dst, __tile *src1, __tile *src2)
-{
- uint16_t *src1_buf = (uint16_t *) src1->buf;
- uint16_t *src2_buf = (uint16_t *) src2->buf;
- float *dst_buf = (float *) dst->buf;
-
- int K = src1->rows;
- int M = src1->colsb / 4;
- int N = src2->colsb / 4;
- int m, k, n, t;
-
- for (m = 0; m < M; m++)
- for (k = 0; k < K; k++)
- for (n = 0; n < N; n++)
- for (t = 0; t < 2; t+=2)
- dst_buf[m * N + n] +=
- (make_fp16_f32(src1_buf[k * 2 * M + 2 * m + t]) *
- make_fp16_f32(src2_buf[k * 2 * N + 2 * n + t + 1])) +
- (make_fp16_f32(src1_buf[k * 2 * M + 2 * m + t + 1]) *
- make_fp16_f32(src2_buf[k * 2 * N + 2 * n + t]));
-}
-
-void test_amx_transpose_tcmmimfp16ps ()
-{
- __tilecfg_u cfg;
- __tile dst, dst_ref, src1, src2;
- uint8_t tmp_dst_buf[1024], tmp_dst_zero_buf[1024];
-
- init_fp16_max_tile_buffer (tmp_dst_buf);
- init_fp16_max_tile_zero_buffer (tmp_dst_zero_buf);
-
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_zero_buf);
- init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
-
- calc_matrix_tcmmimfp16ps (&dst, &src1, &src2);
-
- _tile_tcmmimfp16ps (1, 2, 3);
- _tile_stored (1, dst_ref.buf, _STRIDE);
-
- if (!check_tile_register (&dst_ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-tcmmrlfp16ps-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-tcmmrlfp16ps-2.c
deleted file mode 100644
index b09186c..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-tcmmrlfp16ps-2.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_complex } */
-/* { dg-require-effective-target avx512fp16 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-complex -mavx512fp16" } */
-#define AMX_TRANSPOSE
-#define AMX_COMPLEX
-#define DO_TEST test_amx_transpose_tcmmrlfp16ps
-void test_amx_transpose_tcmmrlfp16ps ();
-#include "amx-helper.h"
-
-void calc_matrix_tcmmrlfp16ps (__tile *dst, __tile *src1, __tile *src2)
-{
- uint16_t *src1_buf = (uint16_t *) src1->buf;
- uint16_t *src2_buf = (uint16_t *) src2->buf;
- float *dst_buf = (float *) dst->buf;
-
- int K = src1->rows;
- int M = src1->colsb / 4;
- int N = src2->colsb / 4;
- int m, k, n, t;
-
- for (m = 0; m < M; m++)
- for (k = 0; k < K; k++)
- for (n = 0; n < N; n++)
- for (t = 0; t < 2; t+=2)
- dst_buf[m * N + n] +=
- (make_fp16_f32(src1_buf[k * 2 * M + 2 * m + t]) *
- make_fp16_f32(src2_buf[k * 2 * N + 2 * n + t])) -
- (make_fp16_f32(src1_buf[k * 2 * M + 2 * m + t + 1]) *
- make_fp16_f32(src2_buf[k * 2 * N + 2 * n + t + 1]));
-}
-
-void test_amx_transpose_tcmmrlfp16ps ()
-{
- __tilecfg_u cfg;
- __tile dst, dst_ref, src1, src2;
- uint8_t tmp_dst_buf[1024], tmp_dst_zero_buf[1024];
-
- init_fp16_max_tile_buffer (tmp_dst_buf);
- init_fp16_max_tile_zero_buffer (tmp_dst_zero_buf);
-
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_zero_buf);
- init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
-
- calc_matrix_tcmmrlfp16ps (&dst, &src1, &src2);
-
- _tile_tcmmrlfp16ps (1, 2, 3);
- _tile_stored (1, dst_ref.buf, _STRIDE);
-
- if (!check_tile_register (&dst_ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-tdpbf16ps-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-tdpbf16ps-2.c
deleted file mode 100644
index 6a3226b..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-tdpbf16ps-2.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_bf16 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-bf16 -mavx512bf16" } */
-#define AMX_TRANSPOSE
-#define AMX_BF16
-#define DO_TEST test_amx_transpose_tdpbf16ps
-void test_amx_transpose_tdpbf16ps ();
-#include "amx-helper.h"
-
-void calc_matrix_tdpbf16ps(__tile *dst, __tile *src1, __tile *src2)
-{
- uint16_t *src1_buf = (uint16_t *) src1->buf;
- uint16_t *src2_buf = (uint16_t *) src2->buf;
- float *dst_buf = (float *) dst->buf;
-
- int K = src1->rows;
- int M = src1->colsb / 4;
- int N = src2->colsb / 4;
- int m, k, n, t;
-
- for (m = 0; m < M; m++)
- for (k = 0; k < K; k++)
- for (n = 0; n < N; n++)
- for (t = 0; t < 2; t+=2)
- dst_buf[m * N + n] +=
- (make_bf16_f32 (src1_buf[k * 2 * M + 2 * m + t]) *
- make_bf16_f32 (src2_buf[k * 2 * N + 2 * n + t])) +
- (make_bf16_f32 (src1_buf[k * 2 * M + 2 * m + t + 1]) *
- make_bf16_f32 (src2_buf[k * 2 * N + 2 * n + t + 1]));
-}
-
-void test_amx_transpose_tdpbf16ps ()
-{
- __tilecfg_u cfg;
- __tile dst, dst_ref, src1, src2;
- uint8_t tmp_dst_buf[1024];
-
- init_bf16_max_tile_buffer (tmp_dst_buf);
-
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
-
- calc_matrix_tdpbf16ps (&dst, &src1, &src2);
-
- _tile_tdpbf16ps (1, 2, 3);
- _tile_stored (1, dst_ref.buf, _STRIDE);
-
- if (!check_float_tile_register (&dst_ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-tdpfp16ps-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-tdpfp16ps-2.c
deleted file mode 100644
index 83c3715..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-tdpfp16ps-2.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_fp16 } */
-/* { dg-require-effective-target avx512fp16 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-fp16 -mavx512fp16" } */
-#define AMX_TRANSPOSE
-#define AMX_FP16
-#define DO_TEST test_amx_transpose_tdpfp16ps
-void test_amx_transpose_tdpfp16ps ();
-#include "amx-helper.h"
-
-void calc_matrix_tdpfp16ps(__tile *dst, __tile *src1, __tile *src2)
-{
- uint16_t *src1_buf = (uint16_t *) src1->buf;
- uint16_t *src2_buf = (uint16_t *) src2->buf;
- float *dst_buf = (float *) dst->buf;
-
- int K = src1->rows;
- int M = src1->colsb / 4;
- int N = src2->colsb / 4;
- int m, k, n, t;
-
- for (m = 0; m < M; m++)
- for (k = 0; k < K; k++)
- for (n = 0; n < N; n++)
- for (t = 0; t < 2; t+=2)
- dst_buf[m * N + n] +=
- (make_fp16_f32 (src1_buf[k * 2 * M + 2 * m + t]) *
- make_fp16_f32 (src2_buf[k * 2 * N + 2 * n + t])) +
- (make_fp16_f32 (src1_buf[k * 2 * M + 2 * m + t + 1]) *
- make_fp16_f32 (src2_buf[k * 2 * N + 2 * n + t + 1]));
-}
-
-void test_amx_transpose_tdpfp16ps ()
-{
- __tilecfg_u cfg;
- __tile dst, dst_ref, src1, src2;
- uint8_t tmp_dst_buf[1024], tmp_dst_zero_buf[1024];
-
- init_fp16_max_tile_buffer (tmp_dst_buf);
- init_fp16_max_tile_zero_buffer(tmp_dst_zero_buf);
-
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_zero_buf);
- init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
-
- calc_matrix_tdpfp16ps (&dst, &src1, &src2);
-
- _tile_tdpfp16ps (1, 2, 3);
- _tile_stored (1, dst_ref.buf, _STRIDE);
-
- if (!check_float_tile_register (&dst_ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-tmmultf32ps-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-tmmultf32ps-2.c
deleted file mode 100644
index 44166c1..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-tmmultf32ps-2.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-require-effective-target amx_tf32 } */
-/* { dg-options "-O2 -mamx-transpose -mamx-tf32" } */
-#define AMX_TRANSPOSE
-#define AMX_TF32
-#define DO_TEST test_amx_transpose_tmmultf32ps
-void test_amx_transpose_tmmultf32ps();
-#include "amx-helper.h"
-
-void calc_matrix_tmmultf32ps(__tile *dst, __tile *src1, __tile *src2)
-{
- float *src1_buf = (float *) src1->buf;
- float *src2_buf = (float *) src2->buf;
- float *dst_buf = (float *) dst->buf;
-
- int K = src1->rows;
- int M = src1->colsb / 4;
- int N = src2->colsb / 4;
- int m, n, k;
-
- for (m = 0; m < M; m++)
- for (k = 0; k < K; k++)
- for (n = 0; n < N; n++)
- dst_buf[m * N + n] +=
- zero_lower_mantissa_bits_fp32 (silence_snan_fp32 (src1_buf[k * M + m])) *
- zero_lower_mantissa_bits_fp32 (silence_snan_fp32 (src2_buf[k * N + n]));
-
-}
-
-void test_amx_transpose_tmmultf32ps ()
-{
- __tilecfg_u cfg;
- __tile dst, dst_ref, src1, src2;
- uint8_t tmp_dst_buf[1024];
-
- init_fp32_max_tile_buffer (tmp_dst_buf);
-
- init_tile_config (&cfg);
- init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
- init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
-
- calc_matrix_tmmultf32ps (&dst, &src1, &src2);
-
- _tile_tmmultf32ps (1, 2, 3);
- _tile_stored (1, dst_ref.buf, _STRIDE);
-
- if (!check_tile_register (&dst_ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/amxtranspose-transposed-2.c b/gcc/testsuite/gcc.target/i386/amxtranspose-transposed-2.c
deleted file mode 100644
index 73c709c..0000000
--- a/gcc/testsuite/gcc.target/i386/amxtranspose-transposed-2.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* { dg-do run { target { ! ia32 } } } */
-/* { dg-require-effective-target amx_transpose } */
-/* { dg-options "-O2 -mamx-transpose" } */
-#define AMX_TRANSPOSE
-#define DO_TEST test_amx_transpose_transposed
-void test_amx_transpose_transposed ();
-#include "amx-helper.h"
-
-void calc_matrix_ttransposed (__tile *dst, __tile *src)
-{
- uint32_t *src_buf = (uint32_t *) src->buf;
- uint32_t *dst_buf = (uint32_t *) dst->buf;
-
- int M = src->rows;
- int N = src->colsb / 4;
- int i, j;
-
- for (i = 0; i < M; i++)
- for (j = 0; j < N; j++)
- dst_buf[j * M + i] = (uint32_t) src_buf[i * N + j];
-}
-
-void test_amx_transpose_transposed ()
-{
- __tilecfg_u cfg;
- __tile src, dst, ref;
-
- init_tile_config (&cfg);
- init_tile_reg_and_src (1, dst);
- init_tile_reg_and_src (2, src);
-
- /* Check ttransposed. */
- calc_matrix_ttransposed (&dst, &src);
- _tile_transposed (1, 2);
- _tile_stored (1, ref.buf, _STRIDE);
-
- if (!check_tile_register (&ref, &dst))
- abort ();
-}
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
index e462ead..3d9af7a 100644
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
@@ -90,7 +90,6 @@ extern void test_user_msr (void) __attribute__((__target__("usermsr")));
extern void test_avx10_2 (void) __attribute__((__target__("avx10.2")));
extern void test_amx_avx512 (void) __attribute__((__target__("amx-avx512")));
extern void test_amx_tf32 (void) __attribute__((__target__("amx-tf32")));
-extern void test_amx_transpose (void) __attribute__((__target__("amx-transpose")));
extern void test_amx_fp8 (void) __attribute__((__target__("amx-fp8")));
extern void test_movrs (void) __attribute__((__target__("movrs")));
extern void test_amx_movrs (void) __attribute__((__target__("amx-movrs")));
@@ -185,7 +184,6 @@ extern void test_no_user_msr (void) __attribute__((__target__("no-usermsr")));
extern void test_no_avx10_2 (void) __attribute__((__target__("no-avx10.2")));
extern void test_no_amx_avx512 (void) __attribute__((__target__("no-amx-avx512")));
extern void test_no_amx_tf32 (void) __attribute__((__target__("no-amx-tf32")));
-extern void test_no_amx_transpose (void) __attribute__((__target__("no-amx-transpose")));
extern void test_no_amx_fp8 (void) __attribute__((__target__("no-amx-fp8")));
extern void test_no_movrs (void) __attribute__((__target__("no-movrs")));
extern void test_no_amx_movrs (void) __attribute__((__target__("no-amx-movrs")));
diff --git a/gcc/testsuite/gcc.target/i386/pr122266.c b/gcc/testsuite/gcc.target/i386/pr122266.c
new file mode 100644
index 0000000..4e31a6a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr122266.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2" } */
+
+signed __int128 foo(signed __int128 x) {
+ signed __int128 t = x >> 127;
+ return ((x^t)>>1)^t;
+}
+
+/* { dg-final { scan-assembler-times "xorq" 4 } } */
+/* { dg-final { scan-assembler-times "sarq" 2 } } */
diff --git a/gcc/testsuite/gcc.target/i386/sse-12.c b/gcc/testsuite/gcc.target/i386/sse-12.c
index cabccb0..fc406b0 100644
--- a/gcc/testsuite/gcc.target/i386/sse-12.c
+++ b/gcc/testsuite/gcc.target/i386/sse-12.c
@@ -3,7 +3,7 @@
popcntintrin.h gfniintrin.h and mm_malloc.h are usable
with -O -std=c89 -pedantic-errors. */
/* { dg-do compile } */
-/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-transpose -mamx-fp8 -mmovrs -mamx-movrs" } */
+/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-13.c b/gcc/testsuite/gcc.target/i386/sse-13.c
index 189e19e..7541956 100644
--- a/gcc/testsuite/gcc.target/i386/sse-13.c
+++ b/gcc/testsuite/gcc.target/i386/sse-13.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-transpose -mamx-fp8 -mmovrs -mamx-movrs" } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
/* { dg-add-options bind_pic_locally } */
#include <mm_malloc.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-14.c b/gcc/testsuite/gcc.target/i386/sse-14.c
index f3b7c112..1e86c75 100644
--- a/gcc/testsuite/gcc.target/i386/sse-14.c
+++ b/gcc/testsuite/gcc.target/i386/sse-14.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-transpose -mamx-fp8 -mmovrs -mamx-movrs" } */
+/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
/* { dg-add-options bind_pic_locally } */
#include <mm_malloc.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-22.c b/gcc/testsuite/gcc.target/i386/sse-22.c
index 0cb0368..418fe23 100644
--- a/gcc/testsuite/gcc.target/i386/sse-22.c
+++ b/gcc/testsuite/gcc.target/i386/sse-22.c
@@ -103,7 +103,7 @@
#ifndef DIFFERENT_PRAGMAS
-#pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-transpose,amx-fp8,movrs,amx-movrs")
+#pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-fp8,movrs,amx-movrs")
#endif
/* Following intrinsics require immediate arguments. They
@@ -220,7 +220,7 @@ test_4 (_mm_cmpestrz, int, __m128i, int, __m128i, int, 1)
/* immintrin.h (AVX/AVX2/RDRND/FSGSBASE/F16C/RTM/AVX512F/SHA) */
#ifdef DIFFERENT_PRAGMAS
-#pragma GCC target ("avx,avx2,rdrnd,fsgsbase,f16c,rtm,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-transpose,amx-fp8,movrs,amx-movrs")
+#pragma GCC target ("avx,avx2,rdrnd,fsgsbase,f16c,rtm,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-fp8,movrs,amx-movrs")
#endif
#include <immintrin.h>
test_1 (_cvtss_sh, unsigned short, float, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-23.c b/gcc/testsuite/gcc.target/i386/sse-23.c
index 95db1f7..f9b0613 100644
--- a/gcc/testsuite/gcc.target/i386/sse-23.c
+++ b/gcc/testsuite/gcc.target/i386/sse-23.c
@@ -895,6 +895,6 @@
#define __builtin_ia32_minmaxsh_mask_round(A, B, C, D, E, F) __builtin_ia32_minmaxsh_mask_round (A, B, 100, D, E, 4)
#define __builtin_ia32_minmaxss_mask_round(A, B, C, D, E, F) __builtin_ia32_minmaxss_mask_round (A, B, 100, D, E, 4)
-#pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,fma,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,xsavec,xsaves,clflushopt,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,vpclmulqdq,pconfig,wbnoinvd,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,cmpccxadd,amx-fp16,prefetchi,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-transpose,amx-fp8,movrs,amx-movrs")
+#pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,fma,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,xsavec,xsaves,clflushopt,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,vpclmulqdq,pconfig,wbnoinvd,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,cmpccxadd,amx-fp16,prefetchi,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-fp8,movrs,amx-movrs")
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-1.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-1.c
new file mode 100644
index 0000000..5fc17ab
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-1.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvi20u64 -mabi=lp64" } */
+
+int main () {
+
+#ifndef __riscv_rvi20u64
+#error "__riscv_rvi20u64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-2.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-2.c
new file mode 100644
index 0000000..86f2771
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-2.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvi20u32 -mabi=ilp32" } */
+
+int main () {
+
+#ifndef __riscv_rvi20u32
+#error "__riscv_rvi20u32"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-3.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-3.c
new file mode 100644
index 0000000..7787549
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-3.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva20u64 -mabi=lp64d" } */
+
+int main () {
+
+#ifndef __riscv_rva20u64
+#error "__riscv_rva20u64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-4.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-4.c
new file mode 100644
index 0000000..abb20b7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-4.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva22u64 -mabi=lp64d" } */
+
+int main () {
+
+#ifndef __riscv_rva22u64
+#error "__riscv_rva22u64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-5.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-5.c
new file mode 100644
index 0000000..0840cdc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-5.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva23u64 -mabi=lp64d" } */
+
+int main () {
+
+#ifndef __riscv_rva23u64
+#error "__riscv_rva23u64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-6.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-6.c
new file mode 100644
index 0000000..7159780
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-6.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva23s64 -mabi=lp64d" } */
+
+int main () {
+
+#ifndef __riscv_rva23s64
+#error "__riscv_rva23s64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-7.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-7.c
new file mode 100644
index 0000000..1366159
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-7.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvb23u64 -mabi=lp64d" } */
+
+int main () {
+
+#ifndef __riscv_rvb23u64
+#error "__riscv_rvb23u64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/riscv/predef-profiles-8.c b/gcc/testsuite/gcc.target/riscv/predef-profiles-8.c
new file mode 100644
index 0000000..c0c5003
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/predef-profiles-8.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvb23s64 -mabi=lp64d" } */
+
+int main () {
+
+#ifndef __riscv_rvb23s64
+#error "__riscv_rvb23s64"
+#endif
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/gnat.dg/specs/style1.ads b/gcc/testsuite/gnat.dg/specs/style1.ads
new file mode 100644
index 0000000..e7fd923
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/style1.ads
@@ -0,0 +1,19 @@
+-- { dg-do compile }
+-- { dg-options "-gnatyr" }
+
+with Ada.Containers.Vectors;
+with Ada.Unchecked_Conversion;
+
+package Style1 is
+
+ package My_Vector is new ada.containers.vectors -- { dg-warning " bad casing" }
+ (Index_Type => Positive,
+ Element_Type => Integer);
+
+ type Word is mod 2**32;
+
+ function My_Conv is new ada.unchecked_conversion -- { dg-warning " bad casing" }
+ (Source => Integer,
+ Target => Word);
+
+end Style1;
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 1acfb37..4ee8d12 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -11238,17 +11238,6 @@ proc check_effective_target_amx_tf32 { } {
} "-mamx-tf32" ]
}
-# Return 1 if amx-transpose instructions can be compiled.
-proc check_effective_target_amx_transpose { } {
- return [check_no_compiler_messages amx_transpose object {
- void
- foo ()
- {
- __asm__ volatile ("ttransposed\t%%tmm1, %%tmm2" ::);
- }
- } "-mamx-transpose" ]
-}
-
# Return 1 if amx-fp8 instructions can be compiled.
proc check_effective_target_amx_fp8 { } {
return [check_no_compiler_messages amx_fp8 object {