diff options
Diffstat (limited to 'gcc/testsuite')
1411 files changed, 23282 insertions, 4230 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 67ba0710e27..761b4af350d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,2345 @@ +2011-05-11 Alan Modra <amodra@gmail.com> + + PR target/47755 + * gcc.target/powerpc/pr47755-2.c: Require vsx_hw. + +2011-05-10 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/defaulted25.C: New. + * g++.dg/template/crash7.C: Adjust. + + * g++.dg/cpp0x/variadic108.C: New. + +2011-05-10 Ville Voutilainen <ville.voutilainen@gmail.com> + + * g++.dg/inherit/virtual9.C: Extend. + +2011-05-10 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/48857 + * gcc.target/powerpc/pr48857.c: New file, make sure V2DI arguments + are passed and returned in vector registers. + +2011-05-10 Richard Guenther <rguenther@suse.de> + + * gcc.dg/tree-ssa/ssa-fre-2.c: Disable forwprop. + * gcc.dg/tree-ssa/ssa-fre-3.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-4.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-5.c: Likewise. + * gcc.dg/tree-ssa/scev-cast.c: Adjust. Note what transformation + applies. + +2011-05-10 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/48611 + PR tree-optimization/48794 + * gfortran.dg/gomp/pr48611.f90: New test. + * gfortran.dg/gomp/pr48794.f90: New test. + + PR debug/48928 + * gcc.dg/dfp/pr48928.c: New test. + +2011-05-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48522 + * g++.dg/cpp0x/pr48522.C: New. + +2011-05-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48735 + * g++.dg/cpp0x/sfinae21.C: New. + +2011-05-09 Paolo Carlini <paolo.carlini@oracle.com> + + * g++.dg/template/sfinae28.C: Rename to... + * g++.dg/cpp0x/sfinae19.C: ... this. + * g++.dg/template/sfinae29.C: Rename to... + * g++.dg/cpp0x/sfinae20.C: ... this. + +2011-05-09 Jeff Law <law@redhat.com> + + * lib/gcc-gdb-test.exp (gdb-test): Reorder matchers to give more + consistent results. + +2011-05-09 Fabien Chêne <fabien@gcc.gnu.org> + + PR c++/20039 + * g++.dg/init/pr20039.C: New. + +2011-05-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48737 + PR c++/48744 + * g++.dg/template/sfinae28.C: New. + * g++.dg/template/sfinae29.C: Likewise. + +2011-05-09 Jason Merrill <jason@redhat.com> + + * g++.dg/template/nontype23.C: New. + +2011-05-07 Fabien Chêne <fabien@gcc.gnu.org> + PR c++/48859 + * g++.dg/init/pr48859.C: New. + +2011-05-09 Jason Merrill <jason@redhat.com> + + * gcc.dg/gcc.dg/uninit-D.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-D-O0.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-E.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-E-O0.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-F.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-F-O0.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-G.c: Move to c-c++-common. + * gcc.dg/gcc.dg/uninit-G-O0.c: Move to c-c++-common. + +2011-05-08 Ville Voutilainen <ville.voutilainen@gmail.com> + + * g++.dg/inherit/virtual9.C: New. + +2011-05-09 Dodji Seketeli <dodji@redhat.com> + + PR c++/48574 + * g++.dg/template/dependent-expr8.C: New test case. + +2011-05-07 Zdenek Dvorak <ook@ucw.cz> + + PR tree-optimization/48837 + * gcc.dg/pr48837.c: New testcase. + +2011-05-06 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/constexpr-condition2.C: New. + + * g++.dg/cpp0x/constexpr-missing.C: New. + +2011-05-06 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray/this_image_2.f90: New. + +2011-05-06 Tobias Burnus <burnus@net-b.de> + + PR fortran/48858 + PR fortran/48820 + * gfortran.dg/bind_c_usage_22.f90: New. + * gfortran.dg/bind_c_usage_23.f90: New. + * gfortran.dg/bind_c_usage_24.f90: New. + * gfortran.dg/bind_c_usage_24_c.c: New. + +2011-05-06 Dodji Seketeli <dodji@redhat.com> + + PR c++/48838 + * g++.dg/template/member9.C: New test case. + +2011-05-05 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr29.ad[sb]: New test. + * gnat.dg/discr30.adb: Likewise. + +2011-05-05 Julian Brown <julian@codesourcery.com> + + * gcc.target/arm/neon-vset_lanes8.c: New test. + +2011-05-05 Jason Merrill <jason@redhat.com> + + * g++.dg/init/new32.C: New. + +2011-05-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gfortran.dg/fmt_g0_6.f08: Use dg-options "-ffloat-store". + Fix typo. + +2011-05-05 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/48381 + * gcc.c-torture/compile/pr48381.c: New test. + +2011-05-05 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/opt-1.c: Add --param min-insn-to-prefetch -ratio=0 + to dg-options. + * gcc.target/i386/opt-1.c: Ditto. + +2011-05-04 Jason Merrill <jason@redhat.com> + + * g++.dg/conversion/base1.C: New. + +2011-05-04 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/48787 + * gfortran.dg/round_3.f08: Add more checks to test case. + +2011-05-04 Hans-Peter Nilsson <hp@axis.com> + + * gfortran.dg/pr47878.f90, gfortran.dg/endfile_3.f90, + gfortran.dg/endfile_4.f90, gfortran.dg/ftell_3.f90, + gfortran.dg/fmt_cache_1.f, gfortran.dg/namelist_66.f90: + Gate test on effective_target fd_truncate. + +2011-05-04 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/recip-vec-divf.c: Decrease array sizes. + * gcc.target/i386/recip-vec-sqrtf.c: Ditto. + * gcc.target/i386/recip-vec-divf-avx.c: Increase array sizes. + * gcc.target/i386/recip-vec-sqrtf-avx.c: Ditto. Update scan times. + * gcc.target/i386/ssefn-1.c: Add -mno-sse2 to dg-options. + * gcc.target/i386/pr38824.c: Ditto. + * gcc.target/i386/vecinit-1.c: Add -mno-sse4 to dg-options. + * gcc.target/i386/vecinit-2.c: Ditto. + * gcc.target/i386/sse-19.c: Add -mno-ssse3 to dg-options. + * gcc.target/i386/parity-1.c: Add -mno-popcnt to dg-options. + * gcc.target/i386/parity-2.c: Ditto. + * gcc.target/i386/incoming-8.c: Add -mno-avx to dg-options. + +2011-05-04 Stuart Henderson <shenders@gcc.gnu.org> + + * gcc.target/bfin/mcpu-bf512.c: Update to latest silicon revision and + remove duplication. + * gcc.target/bfin/mcpu-bf514.c: Likewise. + * gcc.target/bfin/mcpu-bf516.c: Likewise. + * gcc.target/bfin/mcpu-bf518.c: Likewise. + +2011-05-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray/this_image_1.f90: Remove dg-options. + +2011-05-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray/this_image_1.f90: New. + +2011-05-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray/caf.dg: New. + * gfortran.dg/coarray/image_index_1.f90: New, copied + from ../coarray_16.f90. + +2011-05-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/28501 + * g++.dg/ext/complex9.C: New. + +2011-05-03 Stuart Henderson <shenders@gcc.gnu.org> + + From Mike Frysinger + * gcc.target/bfin/mcpu-bf542.c: Check SILICON_REVISION is 0x0004. + * gcc.target/bfin/mcpu-bf544.c, gcc.target/bfin/mcpu-bf547.c, + gcc.target/bfin/mcpu-bf548.c, gcc.target/bfin/mcpu-bf549.c: Likewise. + +2011-05-03 Stuart Henderson <shenders@gcc.gnu.org> + + * gcc.target/bfin/builtins: Created. + * gcc.target/bfin/hisilh-O0.c: Deleted. + * gcc.target/bfin/hisilh.c: Moved to... + * gcc.target/bfin/builtins/hisilh.c: ...here. + * gcc.target/bfin/builtins/shl_fr1x16-6.c: New test. + * gcc.target/bfin/builtins/shr_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-9.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-4.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-8.c: Ditto. + * gcc.target/bfin/builtins/lshl_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/abs_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/norm32-1.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr1x16-3.c: Ditto. + * gcc.target/bfin/builtins/norm_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/bfin-builtins.exp: Ditto. + * gcc.target/bfin/builtins/norm16-2.c: Ditto. + * gcc.target/bfin/builtins/norm32-5.c: Ditto. + * gcc.target/bfin/builtins/norm_fr1x16-3.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x32x32-2.c: Ditto. + * gcc.target/bfin/builtins/norm16-6.c: Ditto. + * gcc.target/bfin/builtins/norm32-9.c: Ditto. + * gcc.target/bfin/builtins/mult_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/min_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/max_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/norm32-10.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-3.c: Ditto. + * gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/diff_hl_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-7.c: Ditto. + * gcc.target/bfin/builtins/shr_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/lshl_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/negate_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/negate_fr1x16-3.c: Ditto. + * gcc.target/bfin/builtins/abs_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr2x16-4.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/max_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/min_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/max_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-3.c: Ditto. + * gcc.target/bfin/builtins/add_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-6.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-7.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-5.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-9.c: Ditto. + * gcc.target/bfin/builtins/abs_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/lshl_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/abs_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/norm32-2.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr1x16-4.c: Ditto. + * gcc.target/bfin/builtins/norm16-3.c: Ditto. + * gcc.target/bfin/builtins/norm32-6.c: Ditto. + * gcc.target/bfin/builtins/norm16-7.c: Ditto. + * gcc.target/bfin/builtins/mult_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/min_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/add_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/norm32-11.c: Ditto. + * gcc.target/bfin/builtins/sub_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-4.c: Ditto. + * gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/diff_lh_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-8.c: Ditto. + * gcc.target/bfin/builtins/shr_fr2x16-3.c: Ditto. + * gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/lshl_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/min_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/max_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/min_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-3.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-4.c: Ditto. + * gcc.target/bfin/builtins/sub_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/add_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-7.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-8.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x16-3.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-6.c: Ditto. + * gcc.target/bfin/builtins/circptr.c: Ditto. + * gcc.target/bfin/builtins/negate_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/abs_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/multr_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/sum_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/norm32-3.c: Ditto. + * gcc.target/bfin/builtins/norm_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/norm16-4.c: Ditto. + * gcc.target/bfin/builtins/norm32-7.c: Ditto. + * gcc.target/bfin/builtins/norm16-8.c: Ditto. + * gcc.target/bfin/builtins/add_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/add_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-5.c: Ditto. + * gcc.target/bfin/builtins/norm32-12.c: Ditto. + * gcc.target/bfin/builtins/sub_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/diff_lh_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shr_fr2x16-4.c: Ditto. + * gcc.target/bfin/builtins/mulhisill_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/negate_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/multr_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/min_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/sub_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-4.c: Ditto. + * gcc.target/bfin/builtins/sub_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-5.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-8.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-3.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x16-4.c: Ditto. + * gcc.target/bfin/builtins/shr_fr1x32-7.c: Ditto. + * gcc.target/bfin/builtins/negate_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/multr_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/sum_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/norm_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/norm16-1.c: Ditto. + * gcc.target/bfin/builtins/norm_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x32x32-1.c: Ditto. + * gcc.target/bfin/builtins/norm32-4.c: Ditto. + * gcc.target/bfin/builtins/norm16-5.c: Ditto. + * gcc.target/bfin/builtins/norm32-8.c: Ditto. + * gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/max_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/add_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr2x16-6.c: Ditto. + * gcc.target/bfin/builtins/diff_hl_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shr_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/negate_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/multr_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/mulhisill_fr2x16-2.c: Ditto. + * gcc.target/bfin/builtins/negate_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/abs_fr2x16-1.c: Ditto. + * gcc.target/bfin/builtins/shrl_fr2x16-3.c: Ditto. + * gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-1.c: Ditto. + * gcc.target/bfin/builtins/max_fr1x16-1.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x16-2.c: Ditto. + * gcc.target/bfin/builtins/sub_fr1x32-2.c: Ditto. + * gcc.target/bfin/builtins/shl_fr1x32-5.c: Ditto. + +2011-05-03 Bernd Schmidt <bernds@codesourcery.com> + + * gcc.target/arm/cold-lc.c: New test. + +2011-05-03 Jakub Jelinek <jakub@redhat.com> + + PR target/48774 + * gcc.dg/pr48774.c: New test. + +2011-05-03 Richard Guenther <rguenther@suse.de> + + * gcc.dg/large-size-array-5.c: New testcase. + +2011-05-03 Richard Sandiford <richard.sandiford@linaro.org> + + * gcc.dg/vect/vect-strided-u16-i3.c: New test. + +2011-05-03 Richard Sandiford <richard.sandiford@linaro.org> + + * lib/target-supports.exp (check_effective_target_vect_strided): + Replace with... + (check_effective_target_vect_strided2) + (check_effective_target_vect_strided3) + (check_effective_target_vect_strided4) + (check_effective_target_vect_strided8): ...these new functions. + + * gcc.dg/vect/O3-pr39675-2.c: Update accordingly. + * gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c: Likewise. + * gcc.dg/vect/fast-math-slp-27.c: Likewise. + * gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c: Likewise. + * gcc.dg/vect/pr37539.c: Likewise. + * gcc.dg/vect/slp-11a.c: Likewise. + * gcc.dg/vect/slp-11b.c: Likewise. + * gcc.dg/vect/slp-11c.c: Likewise. + * gcc.dg/vect/slp-12a.c: Likewise. + * gcc.dg/vect/slp-12b.c: Likewise. + * gcc.dg/vect/slp-18.c: Likewise. + * gcc.dg/vect/slp-19a.c: Likewise. + * gcc.dg/vect/slp-19b.c: Likewise. + * gcc.dg/vect/slp-21.c: Likewise. + * gcc.dg/vect/slp-23.c: Likewise. + * gcc.dg/vect/vect-cselim-1.c: Likewise. + + * gcc.dg/vect/fast-math-vect-complex-3.c: Use vect_stridedN + instead of vect_interleave && vect_extract_even_odd. + * gcc.dg/vect/no-scevccp-outer-10a.c: Likewise. + * gcc.dg/vect/no-scevccp-outer-10b.c: Likewise. + * gcc.dg/vect/no-scevccp-outer-20.c: Likewise. + * gcc.dg/vect/vect-1.c: Likewise. + * gcc.dg/vect/vect-10.c: Likewise. + * gcc.dg/vect/vect-98.c: Likewise. + * gcc.dg/vect/vect-107.c: Likewise. + * gcc.dg/vect/vect-strided-a-mult.c: Likewise. + * gcc.dg/vect/vect-strided-a-u16-i2.c: Likewise. + * gcc.dg/vect/vect-strided-a-u16-i4.c: Likewise. + * gcc.dg/vect/vect-strided-a-u16-mult.c: Likewise. + * gcc.dg/vect/vect-strided-a-u32-mult.c: Likewise. + * gcc.dg/vect/vect-strided-a-u8-i2-gap.c: Likewise. + * gcc.dg/vect/vect-strided-a-u8-i8-gap2.c: Likewise. + * gcc.dg/vect/vect-strided-a-u8-i8-gap7.c: Likewise. + * gcc.dg/vect/vect-strided-float.c: Likewise. + * gcc.dg/vect/vect-strided-mult-char-ls.c: Likewise. + * gcc.dg/vect/vect-strided-mult.c: Likewise. + * gcc.dg/vect/vect-strided-same-dr.c: Likewise. + * gcc.dg/vect/vect-strided-u16-i2.c: Likewise. + * gcc.dg/vect/vect-strided-u16-i4.c: Likewise. + * gcc.dg/vect/vect-strided-u32-i4.c: Likewise. + * gcc.dg/vect/vect-strided-u32-i8.c: Likewise. + * gcc.dg/vect/vect-strided-u32-mult.c: Likewise. + * gcc.dg/vect/vect-strided-u8-i2-gap.c: Likewise. + * gcc.dg/vect/vect-strided-u8-i2.c: Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap2.c: Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap4.c: Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap7.c: Likewise. + * gcc.dg/vect/vect-strided-u8-i8.c: Likewise. + * gcc.dg/vect/vect-vfa-03.c: Likewise. + + * gcc.dg/vect/no-scevccp-outer-18.c: Add vect_stridedN to the + target condition. + * gcc.dg/vect/pr30843.c: Likewise. + * gcc.dg/vect/pr33866.c: Likewise. + * gcc.dg/vect/slp-reduc-6.c: Likewise. + * gcc.dg/vect/vect-strided-store-a-u8-i2.c: Likewise. + * gcc.dg/vect/vect-strided-store-u16-i4.c: Likewise. + * gcc.dg/vect/vect-strided-store-u32-i2.c: Likewise. + +2011-05-03 Richard Sandiford <richard.sandiford@linaro.org> + + * gcc.dg/vect/slp-11.c: Split into... + * gcc.dg/vect/slp-11a.c, gcc.dg/vect/slp-11b.c, + gcc.dg/vect/slp-11c.c: ...these tests. + * gcc.dg/vect/slp-12a.c: Split 4-stride loop into... + * gcc.dg/vect/slp-12c.c: ...this new test. + * gcc.dg/vect/slp-19.c: Split into... + * gcc.dg/vect/slp-19a.c, gcc.dg/vect/slp-19b.c, + gcc.dg/vect/slp-19c.c: ...these new tests. + +2011-05-03 Richard Sandiford <richard.sandiford@linaro.org> + + * lib/target-supports.exp + (check_effective_target_vect_extract_even_odd_wide): Delete. + (check_effective_target_vect_strided_wide): Likewise. + * gcc.dg/vect/O3-pr39675-2.c: Use the non-wide versions instead. + * gcc.dg/vect/fast-math-pr35982.c: Likewise. + * gcc.dg/vect/fast-math-vect-complex-3.c: Likewise. + * gcc.dg/vect/pr37539.c: Likewise. + * gcc.dg/vect/slp-11.c: Likewise. + * gcc.dg/vect/slp-12a.c: Likewise. + * gcc.dg/vect/slp-12b.c: Likewise. + * gcc.dg/vect/slp-19.c: Likewise. + * gcc.dg/vect/slp-23.c: Likewise. + * gcc.dg/vect/vect-1.c: Likewise. + * gcc.dg/vect/vect-98.c: Likewise. + * gcc.dg/vect/vect-107.c: Likewise. + * gcc.dg/vect/vect-strided-float.c: Likewise. + +2011-05-02 Jason Merrill <jason@redhat.com> + + * g++.dg/init/new31.C: New. + +2011-05-02 Simon Martin <simartin@users.sourceforge.net> + + PR c/35445 + * gcc.dg/pr35445.c: New test. + +2011-05-02 Jason Merrill <jason@redhat.com> + + * c-c++-common/vla-1.c: New. + +2011-05-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48822 + * gcc.dg/torture/pr48822.c: New testcase. + +2011-05-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/47969 + * g++.dg/cpp0x/constexpr-47969.C: New. + +2011-05-02 Ira Rosen <ira.rosen@linaro.org> + + PR testsuite/48498 + * gcc.dg/vect/slp-3.c: Increase loop bound. Don't expect to fail + on vect_no_align targets. + * gcc.dg/vect/no-vfa-pr29145.c: Don't expect to fail on + vect_no_align targets. + +2011-05-01 Xinliang David Li <davidxl@google.com> + + * gcc.dg/tree-ssa/integer-addr.c: New test. + * gcc.dg/tree-ssa/alias_bug.c: New test. + +2011-05-01 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/48787 + * gfortran.dg/round_3.f08: Add more checks. + +2011-04-30 Tobias Burnus <burnus@net-b.de> + + PR fortran/48821 + * gfortran.dg/import9.f90: New, proper test. + * gfortran.dg/interface_37.f90: Remove bogus + test (bogus copy of interface_36.f90). + +2011-04-30 Tobias Burnus <burnus@net-b.de> + + PR fortran/48821 + * gfortran.dg/interface_37.f90: New. + +2011-04-30 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/48746 + * gfortran.dg/realloc_on_assign_7.f03: Test bounds. + +2011-04-30 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/48809 + * gcc.c-torture/execute/pr48809.c: New test. + +2011-04-29 Jeff Law <law@redhat.com> + + * gcc.dg/tree-ssa/ssa-dom-thread-4.c: New test. + +2011-04-29 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48606 + * g++.dg/init/ctor10.C: New. + +2011-04-29 Le-Chun Wu <lcwu@google.com> + + * g++.dg/warn/Wconversion-null-2.C: Do not expect a NULL + warning in implicitly instantiated templates. + +2011-04-29 Le-Chun Wu <lcwu@google.com> + + * g++.dg/warn/Wnull-conversion-1.C: New. + * g++.dg/warn/Wnull-conversion-2.C: New. + +2011-04-29 Diego Novillo <dnovillo@google.com> + + * g++.old-deja/g++.other/null3.C: Expect warning about + converting boolean to a pointer. + +2011-04-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/48462 + * gfortran.dg/realloc_on_assign_7.f03: Modify to test for lhs + being a target. + + PR fortran/48746 + * gfortran.dg/realloc_on_assign_7.f03: Add subroutine pr48746. + +2011-04-29 Tobias Burnus <burnus@net-b.de> + + PR fortran/48810 + * gfortran.dg/typebound_proc_22.f90: New. + + PR fortran/48800 + * gfortran.dg/interface_36.f90: New. + +2011-04-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/48488 + PR libgfortran/48602 + PR libgfortran/48615 + PR libgfortran/48684 + PR libgfortran/48787 + * gfortran.dg/fmt_g.f: Adjust test. + * gfortran.dg/fmt_g0_1.f08: Adjust test. + * gfortran.dg/round_3.f08: New test. + * gfortran.dg/namelist_print_1.f: Adjust test. + * gfortran.dg/char4_iunit_1.f03: Adjust test. + * gfortran.dg/f2003_io_5.f03: Adjust test. + * gfortran.dg/coarray_15.f90: Adjust test. + * gfortran.dg/namelist_65.f90: Adjust test. + * gfortran.dg/fmt_cache_1.f: Adjust test. + * gfortran.dg/char4_iunit_2.f03: Adjust test. + * gfortran.dg/real_const_3.f90: Adjust test. + +2011-04-28 Xinliang David Li <davidxl@google.com> + + * testsuite/gcc.dg/tree-prof/prof-robust-1.c: New test. + * testsuite/g++.dg/prof-robust-1.C: New test. + +2011-04-28 Ira Rosen <ira.rosen@linaro.org> + + PR tree-optimization/48765 + * gcc.dg/vect/pr48765.c: New. + +2011-04-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR tree-optimization/48775 + * gcc.dg/pr48616.c: Also add -fno-common on alpha*-dec-osf*. + +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48798 + * g++.dg/inherit/pr48798.C: New. + * g++.old-deja/g++.other/base1.C: Adjust. + +2011-04-28 Dodji Seketeli <dodji@redhat.com> + + PR c++/48656 + * g++.dg/template/inherit7.C: New test case. + +2011-04-28 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/40052 + PR tree-optimization/15347 + * gcc.dg/tree-ssa/vrp57.c: New testcase. + * gcc.dg/pr15347.c: Likewise. + +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48530 + * g++.dg/cpp0x/sfinae18.C: New. + +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48771 + * g++.dg/ext/is_literal_type1.C: New. + +2011-04-28 Tobias Burnus <burnus@net-b.de> + + PR fortran/48112 + PR fortran/48279 + * gfortran.dg/interface_35.f90: New. + * gfortran.dg/erfc_scaled_1.f90: Don't compile with -pedantic. + * gfortran.dg/func_result_6.f90: Add dg-warning. + * gfortran.dg/bessel_1.f90: Ditto. + * gfortran.dg/hypot_1.f90: Ditto. + * gfortran.dg/proc_ptr_comp_20.f90: Ditto. + * gfortran.dg/proc_ptr_comp_21.f90: Ditto. + * gfortran.dg/interface_assignment_4.f90: Ditto. + +2011-04-27 Jason Merrill <jason@redhat.com> + + * g++.dg/ext/complex8.C: New. + + * g++.dg/cpp0x/initlist49.C: New. + * g++.dg/init/new30.C: New. + +2011-04-27 Tobias Burnus <burnus@net-b.de> + + PR fortran/48788 + * gfortran.dg/whole_file_34.f90: New. + +2011-04-27 Jan Hubicka <jh@suse.cz> + + * gcc.dg/tree-ssa/inline-9.c: New testcase. + +2011-04-27 Jason Merrill <jason@redhat.com> + + * g++.old-deja/g++.oliva/overload1.C: Adjust. + + * g++.dg/parse/ambig6.C: New. + +2011-04-27 Nick Clifton <nickc@redhat.com> + + * gcc.dg/20020312-2.c: Add definition for RX. + + * lib/target-supports.exp (add_options_for_ieee): Use -mnofpu + option with RX targets. + + * gcc.target/rx/pack.c: Replace C++ style // comments with C style + /* */ comments. + +2011-04-27 Richard Guenther <rguenther@suse.de> + + * gcc.dg/tree-ssa/pr23382.c: Remove. + +2011-04-27 Kaz Kojima <kkojima@gcc.gnu.org> + + PR target/48767 + * gcc.c-torture/compile/pr48767.c: New test. + +2011-04-27 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48772 + * g++.dg/pr48772.C: New testcase. + +2011-04-27 Jakub Jelinek <jakub@redhat.com> + + PR c/48742 + * gcc.c-torture/compile/pr48742.c: New test. + +2011-04-26 Jason Merrill <jason@redhat.com> + + * g++.dg/lookup/koenig13.C: New. + + * g++.dg/cpp0x/initlist48.C: New. + +2011-04-25 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/sfinae17.C: New. + +2011-03-23 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/48258 + * gcc.target/powerpc/pr48258-1.c: New file. + * gcc.target/powerpc/pr48258-2.c: Ditto. + +2011-04-26 Xinliang David Li <davidxl@google.com> + + * gcc.dg/uninit-suppress.c: New test. + * gcc.dg/uninit-suppress.c: New test. + +2011-04-26 Jakub Jelinek <jakub@redhat.com> + + PR debug/48768 + * gcc.dg/pr48768.c: New test. + + PR tree-optimization/48734 + * gcc.c-torture/compile/pr48734.c: New test. + + PR testsuite/48753 + * gcc.dg/tree-prof/val-prof-2.c: Adjust for 32-bit HWI. + +2011-04-26 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48731 + * gcc.dg/torture/pr48731.c: New testcase. + +2011-04-26 Richard Guenther <rguenther@suse.de> + + PR testsuite/48753 + * gcc.dg/tree-prof/val-prof-2.c: Adjust. + +2011-04-26 Richard Guenther <rguenther@suse.de> + + PR middle-end/48694 + * gcc.dg/torture/pr48694-1.c: New testcase. + * gcc.dg/torture/pr48694-2.c: Likewise. + +2011-04-25 Paolo Carlini <paolo.carlini@oracle.com> + + * g++.dg/ext/underlying_type1.C: New. + * g++.dg/ext/underlying_type2.C: Likewise. + * g++.dg/ext/underlying_type3.C: Likewise. + * g++.dg/ext/underlying_type4.C: Likewise. + * g++.dg/ext/underlying_type5.C: Likewise. + * g++.dg/ext/underlying_type6.C: Likewise. + * g++.dg/ext/underlying_type7.C: Likewise. + * g++.dg/ext/underlying_type8.C: Likewise. + * g++.dg/ext/underlying_type9.C: Likewise. + * g++.dg/ext/underlying_type10.C: Likewise. + +2011-04-25 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/regress/template-const2.C: New. + +2011-04-25 Jeff Law <law@redhat.com> + + * gcc.dg/tree-ssa/vrp56.c: new test. + +2011-04-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * go.test/go-test.exp (go-set-goarch): Accept mips*-*-*. + +2011-04-24 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/48740 + * c-c++-common/raw-string-11.c: New test. + +2011-04-23 John David Anglin <dave.anglin@nrc-cnrc.ca> + + * gcc.dg/pr48616.c (dg-options): Add -fno-common to options on + hppa*-*-hpux*. + +2011-04-23 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_19.f90: New. + +2011-04-23 Jakub Jelinek <jakub@redhat.com> + + PR c/48685 + * gcc.dg/pr48685.c: New test. + +2011-04-22 Jan Hubicka <jh@suse.cz> + + * gcc.dg/tree-ssa/pr38699.c: Fix testcase. + +2011-04-22 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/48717 + * gcc.c-torture/execute/pr48717.c: New test. + +2011-04-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/48723 + * gcc.target/i386/pr48723.c: New test. + +2011-04-22 Jakub Jelinek <jakub@redhat.com> + + PR c/48716 + * gcc.dg/gomp/pr48716.c: New test. + * g++.dg/gomp/pr48716.C: New test. + +2011-04-22 Alexander Monakov <amonakov@ispras.ru> + + PR c/36750 + * gcc.dg/missing-field-init-2.c: Update testcase. + +2011-04-22 Alan Modra <amodra@gmail.com> + + * gcc.target/powerpc/ppc-pow.c: Allow for tail calls. + +2011-04-21 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/48405 + * gfortran.dg/function_optimize_6.f90: New test. + +2011-04-21 Easwaran Raman <eraman@google.com> + + * gcc.dg/stack-layout-2.c: New test. + +2011-04-21 Richard Guenther <rguenther@suse.de> + + PR lto/48703 + * g++.dg/lto/pr48207-2_0.C: New testcase. + * g++.dg/lto/pr48207-3_0.C: Likewise. + +2011-04-21 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/volatile5.adb: New test. + * gnat.dg/volatile5_pkg.ads: New helper. + +2011-04-21 Uros Bizjak <ubizjak@gmail.com> + + PR target/48708 + * gcc.target/i386/pr48708.c: New test. + +2011-04-21 Richard Sandiford <richard.sandiford@linaro.org> + + * gcc.dg/vect/vect-119.c: New test. + +2011-04-21 Richard Sandiford <richard.sandiford@linaro.org> + + * gcc.dg/vect/vect.exp: Run the main tests twice, one with -flto + and once without. + +2011-04-21 Richard Earnshaw <rearnsha@arm.com> + Richard Sandiford <richard.sandiford@linaro.org> + + PR target/46329 + * gcc.target/arm/pr46329.c: New test. + +2011-04-21 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_18.f90: New. + +2011-04-20 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/initlist47.C: New. + + * g++.dg/init/dtor4.C: New. + +2011-04-20 Uros Bizjak <ubizjak@gmail.com> + + PR target/48678 + * gcc.target/i386/sse2-pinsrw.c: New test. + * gcc.target/i386/avx-vpinsrw.c: Ditto. + * gcc.target/i386/sse4_1-insvqi.c: Ditto. + * gcc.target/i386/sse2-insvhi.c: Ditto. + * gcc.target/i386/sse4_1-insvsi.c: Ditto. + * gcc.target/i386/sse4_1-insvdi.c: Ditto. + +2011-04-20 Jason Merrill <jason@redhat.com> + + * g++.dg/template/const4.C: New. + +2011-04-20 Easwaran Raman <eraman@google.com> + + * gcc.dg/stack-layout-1.c: New test. + +2011-04-20 Daniel Jacobowitz <dan@codesourcery.com> + + * gcc.dg/vect/vect-shift-3.c, gcc.dg/vect/vect-shift-4.c: New. + * lib/target-supports.exp (check_effective_target_vect_shift_char): New + function. + +2011-04-20 Kai Tietz <ktietz@redhat.com> + + * gcc.dg/binop-xor1.c: New test. + * gcc.dg/binop-xor2.c: New test. + * gcc.dg/binop-xor3.c: New test. + * gcc.dg/binop-xor4.c: New test. + * gcc.dg/binop-xor5.c: New test. + +2011-04-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/47892 + * gcc.dg/vect/fast-math-ifcvt-1.c: New testcase. + +2011-04-20 Richard Guenther <rguenther@suse.de> + + PR middle-end/48695 + * g++.dg/torture/pr48695.C: New testcase. + +2011-04-20 Georg-Johann Lay <avr@gjlay.de> + + * gcc.dg/pr42629.c: Add dg-require-effective-target int32plus + * gcc.c-torture/execute/cmpsi-2.c: Ditto + * gcc.c-torture/execute/pr45262.c: Ditto + * gcc.dg/torture/pr43165.c: Ditto. + * gcc.dg/torture/pr47228.c: Ditto. + * gcc.dg/tree-ssa/pr45144.c: Ditto. + * gcc.dg/ipa/pr45644.c: Ditto. + * gcc.c-torture/compile/pr43191.c: Ditto. Remove dg-skip-if for + PDP11. + +2011-04-19 Jason Merrill <jason@redhat.com> + + * g++.dg/ext/complex7.C: New. + + * g++.dg/ext/attrib41.C: New. + +2011-04-19 Kaz Kojima <kkojima@gcc.gnu.org> + + PR testsuite/48676 + * gcc.dg/torture/pr37868.c: Skip on sh*-*-*. + +2011-04-19 Jakub Jelinek <jakub@redhat.com> + + PR target/48678 + * gcc.target/i386/pr48678.c: New test. + +2011-04-19 Martin Jambor <mjambor@suse.cz> + + * g++.dg/opt/devirt1.C: Bump to -O2, remove XFAIL. + * g++.dg/opt/devirt2.C: New test. + * g++.dg/ipa/devirt-g-1.C: Likewise. + +2011-04-19 Tobias Burnus <burnus@net-b.de> + + PR fortran/48588 + * gfortran.dg/whole_file_33.f90: New. + +2011-04-19 Martin Jambor <mjambor@suse.cz> + + * g++.dg/ipa/devirt-7.C: New test. + +2011-04-19 Richard Guenther <rguenther@suse.de> + + PR lto/48207 + * g++.dg/lto/pr48207_0.C: New testcase. + +2011-04-18 Jason Merrill <jason@redhat.com> + + * g++.dg/init/void1.C: New. + + * g++.dg/cpp0x/union4.C: New. + +2011-04-18 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/48661 + * g++.dg/torture/pr48661.C: New test. + + PR c++/48632 + * g++.dg/gomp/pr48632.C: New test. + +2011-04-18 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/sse2-maskmovdqu.c: New test. + * gcc.target/i386/avx-vmaskmovdqu.c: Ditto. + +2011-04-18 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_17.f90: New. + * gfortran.dg/coarray_10.f90: Update dg-error. + +2011-04-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR testsuite/48251 + * gcc.dg/guality/guality.exp: Disable on alpha*-dec-osf*. + * gfortran.dg/guality/guality.exp: Likewise. + +2011-04-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gfortran.dg/fmt_g0_5.f08: Use dg-add-options ieee. + +2011-04-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/vect/pr48377.c: Remove dg-do run. + +2011-04-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/ipa/pr48195.c: Add dg-require-effective-target lto. + +2011-04-18 Richard Guenther <rguenther@suse.de> + + PR middle-end/46364 + * g++.dg/torture/pr46364.C: New testcase. + +2011-04-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * obj-c++.dg/dwarf-2.mm: Skip on alpha*-dec-osf*. + +2011-04-18 Alexander Monakov <amonakov@ispras.ru> + + * gcc.dg/pr48235.c: Add dg-require-effective-target freorder. + +2011-04-18 Ulrich Weigand <ulrich.weigand@linaro.org> + Ira Rosen <ira.rosen@linaro.org> + + PR target/48252 + * gcc.target/arm/pr48252.c: New test. + +2011-04-18 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/48616 + * gcc.dg/pr48616.c: New test. + +2011-04-18 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_16.f90: New. + +2011-04-18 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/48462 + * gfortran.dg/realloc_on_assign_7.f03: New test. + +2011-04-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/48602 + * gfortran.dg/fmt_g0_6.f08: New test. + +2011-04-17 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/sfinae16.C: New. + +2011-04-17 Richard Sandiford <rdsandiford@googlemail.com> + + * gcc.target/mips/reg-var-1.c: New test. + +2011-04-17 Jan Hubicka <jh@suse.cz> + + * gcc.dg/winline-5.c: Update testcase. + +2011-04-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr27.ad[sb]: Move dg directive. + * gnat.dg/discr28.ad[sb]: New test. + * gnat.dg/discr28_pkg.ads: New helper. + +2011-04-17 Michael Matz <matz@suse.de> + + PR tree-optimization/48622 + PR lto/48645 + * gcc.dg/lto/pr48622_0.c: New test. + +2011-04-16 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/avx256-unaligned-load-1.c: Update scan patterns. + * gcc.target/i386/avx256-unaligned-load-2.c: Ditto. + * gcc.target/i386/avx256-unaligned-load-3.c: Ditto. + * gcc.target/i386/avx256-unaligned-store-1.c: Ditto. + * gcc.target/i386/avx256-unaligned-store-2.c: Ditto. + * gcc.target/i386/avx256-unaligned-store-3.c: Ditto. + +2011-04-15 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/range-for17.C: New. + +2011-04-15 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com> + + * g++.dg/cpp0x/range-for2.C: Correct for declaration. + * g++.dg/cpp0x/range-for3.C: Likewise. + * g++.dg/cpp0x/range-for9.C: Correct error message. + * g++.dg/cpp0x/range-for11.C: New. + * g++.dg/cpp0x/range-for12.C: New. + * g++.dg/cpp0x/range-for13.C: New. + * g++.dg/cpp0x/range-for14.C: New. + * g++.dg/cpp0x/range-for15.C: New. + * g++.dg/cpp0x/range-for16.C: New. + +2011-04-15 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_15.f90: Change to dg-do run. + +2011-04-15 Nicola Pero <nicola.pero@meta-innovation.com> + + * objc.dg/naming-4.m: Updated. + * objc.dg/naming-5.m: Updated. + * objc.dg/naming-6.m: New. + * objc.dg/naming-7.m: New. + * obj-c++.dg/naming-1.mm: Updated. + * obj-c++.dg/naming-2.mm: Updated. + * obj-c++.dg/naming-3.mm: New. + * obj-c++.dg/naming-4.mm: New. + +2011-04-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/48589 + * gfortran.dg/fmt_g0_5.f08: New test. + +2011-04-15 Richard Guenther <rguenther@suse.de> + + PR testsuite/48286 + * gfortran.dg/cray_pointers_8.f90: Use -ffloat-store. + +2011-04-15 Georg-Johann Lay <avr@gjlay.de> + + * gcc.target/avr/torture/pr41885.c (dg-options): Change + -finline-limit=0 to -fno-inline + +2011-04-15 Jakub Jelinek <jakub@redhat.com> + + PR target/48614 + * gcc.target/i386/pr46084.c: Require avx_runtime instead of + just avx. + +2011-04-14 Jakub Jelinek <jakub@redhat.com> + + PR target/48605 + * gcc.target/i386/sse4_1-insertps-3.c: New test. + * gcc.target/i386/sse4_1-insertps-4.c: New test. + * gcc.target/i386/avx-insertps-3.c: New test. + * gcc.target/i386/avx-insertps-4.c: New test. + +2011-04-14 Georg-Johann Lay <avr@gjlay.de> + + * gcc.target/avr/torture/pr41885.c (dg-options): Add + -finline-limit=0 + +2011-04-14 Georg-Johann Lay <avr@gjlay.de> + + PR target/46779 + PR target/45291 + PR target/41894 + * gcc.target/avr/pr46779-1.c: New test case + * gcc.target/avr/pr46779-2.c: New test case + +2011-04-14 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/sfinae15.C: New. + + * g++.dg/cpp0x/sfinae14.C: New. + + * g++.dg/ext/vla10.C: New. + +2011-04-14 Richard Guenther <rguenther@suse.de> + + * gcc.dg/tree-ssa/ssa-dse-14.c: New testcase. + +2011-04-14 Richard Guenther <rguenther@suse.de> + + * gcc.dg/fold-bitand-4.c: Move ... + * c-c++-common/fold-bitand-4.c: ... here. Adjust slightly. + +2011-04-14 Georg-Johann Lay <avr@gjlay.de> + + * gcc.target/avr/trivial.c: Fix line endings. Make PROGMEM + variables const. + * gcc.target/avr/torture/trivial.c: Ditto. + +2011-04-13 Jason Merrill <jason@redhat.com> + + * g++.dg/template/operator11.C: New. + +2011-04-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/48591 + * gcc.dg/gomp/pr48591.c: New test. + + PR c++/48570 + * g++.dg/cpp0x/constexpr-wstring1.C: New test. + * g++.dg/cpp0x/constexpr-wstring2.C: New test. + +2011-04-13 Dodji Seketeli <dodji@redhat.com> + + PR c++/48574 + * g++.dg/template/dependent-expr7.C: New test case. + +2011-04-13 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/sfinae13.C: New. + +2011-04-13 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/sse2-init-v2di-2.c: Update scan pattern. + +2011-04-12 Janis Johnson <janisjo@codesourcery.com> + + * gcc.target/arm/pr43698.c: Remove -march option. + +2011-04-12 Janis Johnson <janisjo@codesourcery.com> + + * gcc.target/arm/sync-1.c: Limit to sync_int_long, do not use + -march option. + +2011-04-12 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/48360 + PR fortran/48456 + * gfortran.dg/realloc_on_assign_6.f03: New test. + +2011-04-12 Kai Tietz <ktietz@redhat.com> + + * g++.dg/ext/bitfield2.C: Add for i?86/x86_64-*-mingw* + targets the additional -mno-ms-bitfields and + -Wno-packed-bitfield-compat options. + * g++.dg/ext/bitfield3.C: Likewise. + * g++.dg/ext/bitfield4.C: Likewise. + * g++.dg/ext/bitfield5.C: Likewise. + * gcc.dg/bitfld-15.c: Likewise. + * gcc.dg/bitfld-16.c: Likewise. + * gcc.dg/bitfld-17.c: Likewise. + * gcc.dg/bitfld-18.c: Likewise. + +2011-04-12 Richard Sandiford <richard.sandiford@linaro.org> + + * gcc.target/arm/neon-vld3-1.c: New test. + * gcc.target/arm/neon-vst3-1.c: New test. + * gcc.target/arm/neon/v*.c: Regenerate. + +2011-04-12 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/48549 + * g++.dg/opt/pr48549.C: New test. + +2011-04-12 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/46076 + * gcc.dg/tree-ssa/pr46076.c: Un-XFAIL. + +2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR testsuite/21164 + * lib/compat.exp (compat-execute): Declare unsupported after + stripping path from src1. + * lib/lto.exp (lto-execute): Likewise. + +2011-04-12 Jakub Jelinek <jakub@redhat.com> + + PR c/48552 + * gcc.dg/pr48552-1.c: New test. + * gcc.dg/pr48552-2.c: New test. + +2011-04-11 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/sfinae12.C: New. + + * g++.dg/cpp0x/enum10.C: New. + + * g++.dg/cpp0x/lambda/lambda-this4.C: New. + + * g++.dg/cpp0x/rv-func.C: New. + +2011-04-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/torture/pr47917.c: Define _ISO_C_SOURCE=19990L for + alpha*-dec-osf5*. + +2011-04-11 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/48195 + * gcc.dg/ipa/pr48195.c: New test. + +2011-04-10 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/return3.adb: Remove unused switch. + +2011-04-08 Mike Stump <mikestump@comcast.net> + + PR testsuite/48506 + * gcc.dg/tree-ssa/ssa-ccp-17.c: Robustify against ports that + default to fno-common. + +2011-04-08 Georg-Johann Lay <avr@gjlay.de> + + * gcc.dg/sibcall-3.c: Don't xfail on AVR. + * gcc.dg/sibcall-4.c: Don't xfail on AVR. + +2011-04-08 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/48448 + * gfortran.dg/function_optimize_5.f90: New test. + +2011-04-08 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/aggr17.adb: New test. + * gnat.dg/aggr18.adb: Likewise. + +2011-04-08 Michael Matz <matz@suse.de> + + PR middle-end/48389 + * gcc.target/i386/pr48389.c: New test. + +2011-04-08 Andrey Belevantsev <abel@ispras.ru> + + PR rtl-optimization/48272 + * g++.dg/opt/pr48272.C: New. + +2011-04-08 Dmitry Melnik <dm@ispras.ru> + + PR rtl-optimization/48235 + * gcc.dg/pr48235.c: New. + +2011-04-08 Alexander Monakov <amonakov@ispras.ru> + + PR rtl-optimization/48302 + * g++.dg/opt/pr48302.C: New. + +2011-04-08 Alexander Monakov <amonakov@ispras.ru> + + PR target/48273 + * g++.dg/opt/pr48273.C: New. + +2011-04-08 Alexander Monakov <amonakov@ispras.ru> + + PR rtl-optimization/48442 + * gcc.dg/pr48442.c: New. + +2011-04-08 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/48377 + * gcc.dg/vect/pr48377.c: New test. + +2011-04-07 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/regress/call1.C: New. + + * g++.dg/cpp0x/variadic107.C: New. + + * g++.dg/cpp0x/sfinae11.C: New. + * g++.dg/cpp0x/noexcept02.C: Fix. + + * g++.dg/cpp0x/sfinae10.C: New. + + * g++.dg/cpp0x/sfinae9.C: New. + + * c-c++-common/Wcast-qual-1.c: Move here from... + * gcc.dg/cast-qual-3.c: ...here, and... + * g++.dg/warn/Wcast-qual2.C: ...here. + + * g++.dg/cpp0x/sfinae8.C: New. + + * g++.dg/cpp0x/sfinae7.C: New. + + * g++.dg/cpp0x/enum9.C: New. + +2011-04-07 Mike Stump <mikestump@comcast.net> + + * gcc.dg/torture/stackalign/non-local-goto-5.c: Fix for targets + with no trampolines. + +2011-04-07 Jakub Jelinek <jakub@redhat.com> + + PR fortran/48117 + * gfortran.dg/gomp/pr48117.f90: New test. + + PR debug/48343 + * gcc.dg/torture/pr48343.c: New test. + +2011-04-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.target/i386/asm-6.c: Remove dg-xfail-if. + +2011-04-07 Maxim Kuvyrkov <maxim@codesourcery.com> + + * gcc.dg/lto/20090210_0.c: Require tls_runtime target. + +2011-04-07 Tom de Vries <tom@codesourcery.com> + + PR target/43920 + * lib/scanasm.exp (object-size): New proc. + * gcc.target/arm/pr43920-2.c: New test. + +2011-04-06 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + PR fortran/48477 + * gfortran.dg/coarray_13.f90: Avoid out-of-bounds access. + +2011-04-06 Steve Ellcey <sje@cup.hp.com> + + * gcc.dg/mtune.c: Prune note from output. + +2011-04-06 Jakub Jelinek <jakub@redhat.com> + + PR debug/48466 + * gcc.dg/guality/pr36977.c: New test. + * gcc.dg/guality/pr48466.c: New test. + +2011-04-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> + + * gcc.target/arm/pr43920-1.c: Fix accidental duplication. + +2011-04-06 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/return3.adb: New test. + +2011-04-06 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/47663 + * gcc.dg/tree-ssa/inline-8.c: New testcase. + +2011-04-05 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/torture/pr47917.c: Add -D_XOPEN_SOURCE=500 to dg-options for + Solaris 8 and 9 as well. + +2011-04-05 Tom de Vries <tom@codesourcery.com> + + PR target/43920 + * gcc.target/arm/pr43920-1.c: New test. + +2011-04-04 Yufeng Zhang <yufeng.zhang@arm.com> + + * g++.dg/abi/arm_cxa_vec1.C (__ARM_EABI__): Fix typo. + (cctor): Actually return the value. + (main): Cast return values. + +2010-04-04 Thomas Koenig <tkoenig@gcc.gnu.org> + + * gfortran.dg/character_comparison_8.f90: New test. + +2010-04-04 Thomas Koenig <tkoenig@gcc.gnu.org> + + * frontend-passes: (optimize_lexical_comparison): New function. + (optimize_expr): Call it. + (optimize_comparison): Also handle lexical comparison functions. + Return false instad of -2 for unequal comparison. + +2011-04-04 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/48412 + * function_optimize_4.f90: New test. + +2011-04-04 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_10.f90: Add coarray descriptor diagnostic check. + * gfortran.dg/coarray_13.f90: Add checks for run-time cobounds. + * gfortran.dg/coarray_15.f90: New. + +2011-04-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gfortran.dg/bessel_6.f90: Use dg-add-options ieee. + * gfortran.dg/bessel_7.f90: Likewise. + +2011-04-03 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/bessel_6.f90: Reduce mymax for Tru64. + +2011-04-03 Richard Guenther <rguenther@suse.de> + Ira Rosen <ira.rosen@linaro.org> + + * gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c: New test. + * gcc.dg/vect/vect.exp: Run if-cvt-stores-vect* tests with + -ftree-loop-if-convert-stores. + +2011-04-02 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/specs/aggr2.ads: New test. + +2011-04-02 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/debug2.ad[sb]: New test. + * gnat.dg/debug2_pkg.ads: New helper. + * gnat.dg/debug3.ad[sb]: New test. + +2011-04-01 Uros Bizjak <ubizjak@gmail.com> + + * go.test/go-test.exp (go-set-goarch): Recognize alpha*-*-*. + +2011-04-01 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/48335 + * gcc.c-torture/compile/pr48335-1.c: New test. + * gcc.dg/pr48335-1.c: New test. + * gcc.dg/pr48335-2.c: New test. + * gcc.dg/pr48335-3.c: New test. + * gcc.dg/pr48335-4.c: New test. + * gcc.dg/pr48335-5.c: New test. + * gcc.dg/pr48335-6.c: New test. + * gcc.dg/pr48335-7.c: New test. + * gcc.dg/pr48335-8.c: New test. + * gcc.target/i386/pr48335-1.c: New test. + +2011-04-01 Vincent Lefevre <vincent+gcc@vinc17.org> + + PR c/36299 + * gcc.dg/Waddress.c: New test. + +2011-04-01 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/48352 + * gfortran.dg/function_optimize_3.f90: New test. + +2011-04-01 Bernd Schmidt <bernds@codesourcery.com> + + * gcc.c-torture/compile/20110401-1.c: New test. + + * g++.dg/lto/20091002-1_0.C: Use "dg-require-effective-target fpic". + * g++.dg/lto/20091002-2_0.C: Likewise. + * g++.dg/lto/20090303_0.c: Likewise. + * g++.dg/lto/20091004-1_0.C: Likewise. + * g++.dg/lto/20091002-3_0.C: Likewise. + * g++.dg/lto/20091004-2_0.C: Likewise. + * g++.dg/lto/20081123_0.C: Likewise. + * g++.dg/lto/20090313_0.C: Likewise. + * g++.dg/lto/20081109-1_0.C: Likewise. + * g++.dg/lto/20081219_0.C: Likewise. + * g++.dg/lto/20081204-1_0.C: Likewise. + * g++.dg/lto/20090302_0.C: Likewise. + * g++.dg/lto/20081119-1_0.C: Likewise. + * g++.dg/lto/20081118_0.C: Likewise. + * gcc.dg/lto/20091020-2_0.c: Likewise. + * gcc.dg/lto/20090210_0.c: Likewise. + * gcc.dg/lto/20081204-1_0.c: Likewise. + * gcc.dg/lto/20081224_0.c: Likewise. + * gcc.dg/lto/20090219_0.c: Likewise. + * gcc.dg/lto/20091014-1_0.c: Likewise. + * gcc.dg/lto/20091016-1_0.c: Likewise. + * gcc.dg/lto/20090206-2_0.c: Likewise. + * gcc.dg/lto/20090116_0.c: Likewise. + * gcc.dg/lto/20091013-1_0.c: Likewise. + * gcc.dg/lto/20091015-1_0.c: Likewise. + * gcc.dg/lto/20090126-2_0.c: Likewise. + +2011-03-31 Ian Lance Taylor <iant@google.com> + + * go.test/go-test.exp (go-set-goarch): Recognize MIPS ABIs. + +2011-03-31 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/opt16.adb: New test. + +2011-03-31 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/defaulted24.C: New. + +2011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/16292 + * gfortran.dg/g77/cabs.f: Only xfail execution on mips-sgi-irix6* + with -O0. + +2011-03-31 Eric Botcazou <ebotcazou@adacore.com> + + * g++.dg/other/i386-9.C: New test. + +2011-03-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * go.test/go-test.exp (go-set-goarch): Use sparc64 for 64-bit SPARC. + +2011-03-30 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/regress/error-recovery1.C: New. + + * g++.dg/cpp0x/regress/isnan.C: New. + + * g++.dg/cpp0x/initlist46.C: New. + +2011-03-30 Richard Sandiford <richard.sandiford@linaro.org> + + PR target/47551 + * gcc.target/arm/neon-modes-2.c: New test. + +2011-03-30 Jakub Jelinek <jakub@redhat.com> + + PR c/48305 + * gcc.c-torture/compile/pr48305.c: New test. + +2011-03-29 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/regress/value-dep1.C: New. + +2011-03-29 Steve Ellcey <sje@cup.hp.com> + + * gcc.dg/torture/pr47917.c: Use -std=gnu99 on HP-UX. + +2011-03-29 Ian Lance Taylor <iant@google.com> + + * go.test/go-test.exp: Handle the test lines used in several new + tests. + (errchk): Add opts parameter. Change all callers. Handle parens + in regexps. + +2011-03-29 Peter Bergner <bergner@vnet.ibm.com> + Dominique d'Humieres <dominiq@lps.ens.fr> + + * gcc.dg/stack-usage-1.c (SIZE): Provide proper values for __ppc64__ + and __APPLE__ && __PPC__ && __ALTIVEC__. + +2011-03-29 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/dependent1.C: New. + + * g++.dg/cpp0x/constexpr-48089.C: Adjust. + + * g++.dg/cpp0x/constexpr-memfn1.C: New. + + * g++.dg/cpp0x/constexpr-diag1.C: Adjust error locations. + +2011-03-29 Janus Weil <janus@gcc.gnu.org> + + PR fortran/48095 + * gfortran.dg/module_md5_1.f90: Modified MD5 sum. + * gfortran.dg/proc_ptr_comp_32.f90: New. + +2011-03-29 Thomas Koenig <tkoenig@gcc.gnu.org> + + * gfortran.dg/function_optimize_1.f90: Add -Warray-temporaries, + check for corresponding warning. + +2011-03-28 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/rv-deduce2.C: New. + +2011-03-29 Jakub Jelinek <jakub@redhat.com> + + PR debug/48203 + * gcc.dg/pr48203.c: New test. + +2011-03-28 Jeff Law <law@redhat.com> + + * gcc.dg/tree-ssa/ssa-dom-thread-3.c: New test. + +2011-03-28 Peter Bergner <bergner@vnet.ibm.com> + + * gcc.dg/stack-usage-1.c (SIZE): Provide proper values for __PPC64__ + and __PPC__ && __ALTIVEC__. + +2011-03-28 Dominique d'Humieres <dominiq@lps.ens.fr> + + PR testsuite/48238 + * gcc.dg/debug/dwarf2/pr47939-1.c: Generalize scan-assembler regex. + * gcc.dg/debug/dwarf2/pr47939-2.c: Likewise. + * gcc.dg/debug/dwarf2/pr47939-3.c: Likewise. + * gcc.dg/debug/dwarf2/pr47939-4.c: Likewise. + +2011-03-28 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/initlist-array2.C: New. + + * g++.dg/cpp0x/initlist-array1.C: New. + + * g++.dg/cpp0x/constexpr-compound.C: New. + + * g++.dg/cpp0x/constexpr-using.C: New. + + * g++.dg/cpp0x/constexpr-noexcept.C: New. + +2011-03-28 H.J. Lu <hongjiu.lu@intel.com> + + PR testsuite/48276 + * gcc.target/i386/pr47502-2.c: Add -fno-pic. + +2011-03-28 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/slp-1.c: New test. + +2011-03-27 H.J. Lu <hongjiu.lu@intel.com> + + * gcc.target/i386/avx256-unaligned-load-1.c: New. + * gcc.target/i386/avx256-unaligned-load-2.c: Likewise. + * gcc.target/i386/avx256-unaligned-load-3.c: Likewise. + * gcc.target/i386/avx256-unaligned-load-4.c: Likewise. + * gcc.target/i386/avx256-unaligned-load-5.c: Likewise. + * gcc.target/i386/avx256-unaligned-load-6.c: Likewise. + * gcc.target/i386/avx256-unaligned-load-7.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-1.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-2.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-3.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-4.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-5.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-6.c: Likewise. + * gcc.target/i386/avx256-unaligned-store-7.c: Likewise. + +2011-03-27 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/47065 + * gfortran.dg/trim_optimize_5.f90: New test. + * gfortran.dg/trim_optimize_6.f90: New test. + +2011-03-27 Richard Sandiford <rdsandiford@googlemail.com> + + PR target/38598 + * gcc.target/mips/madd-7.c: Remove -mlong32. + * gcc.target/mips/msub-7.c: Likewise. + +2011-03-27 Ira Rosen <ira.rosen@linaro.org> + + * gcc.dg/vect/vect-outer-5.c: Reduce the distance between data + accesses to preserve the meaning of the test for doubleword vectors. + * gcc.dg/vect/no-vfa-pr29145.c: Likewise. + * gcc.dg/vect/slp-3.c: Reduce the loop bound for the same reason. + +2011-03-26 Janus Weil <janus@gcc.gnu.org> + + PR fortran/48291 + * gfortran.dg/class_42.f03: New. + +2011-03-26 Ira Rosen <ira.rosen@linaro.org> + + * gcc.dg/vect/vect-cselim-1.c: Fail on targets that don't support + strided accesses. + +2011-03-26 Andrey Belevantsev <abel@ispras.ru> + + PR rtl-optimization/48144 + * gcc.dg/pr48144.c: New test. + +2011-03-26 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr27.ad[sb]: New test. + +2011-03-26 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/limited_with2.ad[sb]: New test. + * gnat.dg/limited_with2_pkg1.ads: New helper. + * gnat.dg/limited_with2_pkg2.ads: Likewise. + +2011-03-26 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/opt15.adb: New test. + * gnat.dg/opt15_pkg.ad[sb]: New helper. + +2011-03-25 Tobias Burnus <burnus@net-b.de> + + PR fortran/48174 + PR fortran/45304 + * gfortran.dg/ishft_4.f90: Adapt scan-tree-dump-times. + * gfortran.dg/leadz_trailz_3.f90: Ditto + +2011-03-25 Martin Jambor <mjambor@suse.cz> + + * gcc.c-torture/compile/pr44686.c: Do not explicitely specify -O2. + +2011-03-25 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/defaulted22.C: New. + * g++.dg/cpp0x/defaulted23.C: New. + * g++.dg/cpp0x/defaulted15.C: Adjust. + +2011-03-25 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/move1.C: New. + +2011-03-25 Ira Rosen <ira.rosen@linaro.org> + + PR target/48287 + * gcc.dg/vect/vect-cselim-1.c: Fail for vect_no_align. + +2011-03-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/torture/pr47917.c: Add -D_XOPEN_SOURCE=500 to dg-options + for mips-sgi-irix6.5. + Replace snprintf prototype by <stdio.h>. + +2011-03-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR testsuite/48283 + * gcc.dg/graphite/block-3.c: Add dg-require-effective-target + run_expensive_tests. + * gcc.dg/graphite/block-4.c: Likewise. + * gcc.dg/graphite/block-7.c: Likewise. + * gcc.dg/graphite/block-8.c: Likewise. + +2011-03-25 Richard Guenther <rguenther@suse.de> + + * g++.dg/tree-ssa/pr41186.C: Scan the appropriate FRE dump. + * g++.dg/tree-ssa/pr8781.C: Likewise. + * gcc.dg/ipa/ipa-pta-13.c: Likewise. + * gcc.dg/ipa/ipa-pta-3.c: Likewise. + * gcc.dg/ipa/ipa-pta-4.c: Likewise. + * gcc.dg/tree-ssa/20041122-1.c: Likewise. + * gcc.dg/tree-ssa/alias-18.c: Likewise. + * gcc.dg/tree-ssa/foldstring-1.c: Likewise. + * gcc.dg/tree-ssa/forwprop-10.c: Likewise. + * gcc.dg/tree-ssa/forwprop-9.c: Likewise. + * gcc.dg/tree-ssa/fre-vce-1.c: Likewise. + * gcc.dg/tree-ssa/loadpre6.c: Likewise. + * gcc.dg/tree-ssa/pr21574.c: Likewise. + * gcc.dg/tree-ssa/ssa-dom-cse-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-11.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-12.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-13.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-14.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-15.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-16.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-17.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-18.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-19.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-2.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-21.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-22.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-23.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-24.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-25.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-26.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-27.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-3.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-4.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-5.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-6.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-7.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-8.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-9.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-10.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-26.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-7.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-8.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-9.c: Likewise. + * gcc.dg/tree-ssa/ssa-sccvn-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-sccvn-2.c: Likewise. + * gcc.dg/tree-ssa/ssa-sccvn-3.c: Likewise. + * gcc.dg/tree-ssa/ssa-sccvn-4.c: Likewise. + * gcc.dg/tree-ssa/struct-aliasing-1.c: Likewise. + * gcc.dg/tree-ssa/struct-aliasing-2.c: Likewise. + * c-c++-common/pr46562-2.c: Likewise. + * gfortran.dg/pr42108.f90: Likewise. + * gcc.dg/torture/pta-structcopy-1.c: Scan ealias dump, force + foo to be inlined even at -O1. + * gcc.dg/tree-ssa/ssa-dce-4.c: Disable FRE. + * gcc.dg/ipa/ipa-pta-14.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-1.c: Adjust. + * gcc.dg/matrix/matrix.exp: Disable FRE. + +2011-03-24 Jakub Jelinek <jakub@redhat.com> + + PR debug/48204 + * gcc.dg/dfp/pr48204.c: New test. + +2011-03-24 Steve Ellcey <sje@cup.hp.com> + + PR target/48209 + * gcc.c-torture/execute/pr47917.c: Move this... + * gcc.dg/torture/pr47917.c: to here and add xfails. + +2011-03-24 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/array16.ad[sb]: New test. + * gnat.dg/array16.ads: New helper. + +2011-03-24 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/derived_type2.adb: New test. + +2011-03-24 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48271 + * g++.dg/torture/pr48271.C: New testcase. + +2011-03-24 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/array15.ad[sb]: New test. + +2011-03-24 Uros Bizjak <ubizjak@gmail.com> + + PR target/48237 + * gcc.target/i386/pr48237.c: New test. + +2011-03-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/48269 + * gcc.dg/builtin-object-size-10.c: New testcase. + +2011-03-24 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/46562 + * c-c++-common/pr46562-2.c: New testcase. + * c-c++-common/pr46562.c: Likewise. + +2011-03-24 Ira Rosen <ira.rosen@linaro.org> + + * gcc.dg/vect/vect-cselim-1.c: New test. + * gcc.dg/vect/vect-cselim-2.c: New test. + +2011-03-23 Chung-Lin Tang <cltang@codesourcery.com> + + * gcc.target/arm/pr46934.c: New. + +2011-03-23 Ian Lance Taylor <iant@google.com> + + * go.test/go-test.exp (errchk): Ignore lines containing ////. + +2011-03-23 Richard Guenther <rguenther@suse.de> + + * gcc.dg/struct: Remove directory and contents. + +2011-03-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR testsuite/48251 + * g++.dg/guality/guality.exp: Disable on alpha*-dec-osf*. + +2011-03-23 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr26.ad[sb]: New test. + * gnat.dg/discr26_pkg.ads: New helper. + +2011-03-23 Richard Sandiford <richard.sandiford@linaro.org> + + PR target/47553 + * gcc.target/arm/neon-vld-1.c: New test. + +2011-03-23 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/array14.ad[sb]: New test. + * gnat.dg/array14_pkg.ads: New helper. + +2011-03-22 Joseph Myers <joseph@codesourcery.com> + + * gcc.c-torture/execute/920501-8.x: Remove. + * gcc.c-torture/execute/930513-1.x: Remove. + * gcc.c-torture/execute/960312-1.x: Remove. + * gcc.c-torture/compile/20000804-1.c, + gcc.c-torture/compile/20001205-1.c, + gcc.c-torture/compile/20001226-1.c, + gcc.c-torture/compile/20010518-2.c, + gcc.c-torture/compile/20020312-1.c, + gcc.c-torture/compile/20020604-1.c, + gcc.c-torture/compile/920501-12.c, + gcc.c-torture/compile/920501-4.c, + gcc.c-torture/compile/920520-1.c, + gcc.c-torture/compile/980506-1.c, + gcc.c-torture/execute/980709-1.x, + gcc.c-torture/execute/990826-0.x: Don't XFAIL or use special + options for m68hc11. + * gcc.dg/cpp/assert4.c: Don't handle ARC. + * gcc.dg/sibcall-3.c, gcc.dg/sibcall-4.c: Don't XFAIL for arc or + m68hc11. + +2011-03-22 Nick Clifton <nickc@redhat.com> + + * lib/target-supports.exp (check_profiling_available): Add MN10300 + to the list of targets that do not support profiling. Restore + alpha sorting to this list. + +2011-03-22 Michael Meissner <meissner@linux.vnet.ibm.com> + + * gcc.dg/torture/vector-1.c: On powerpc add -fabi=altivec to avoid + failure on 32-bit systems. + * gcc.dg/torture/vector-2.c: Ditto. + +2011-03-22 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48228 + * gcc.dg/Wstrict-overflow-23.c: New testcase. + +2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com> + + * gcc.dg/torture/va-arg-25.c: Add -mabi=altivec -maltivec for + powerpc. + + PR target/48226 + * gcc.target/powerpc/pr48226.c: New file. + +2011-03-21 Jack Howarth <howarth@bromo.med.uc.edu> + + * lib/prune.exp (prune_gcc_output): Prune "could not create + compact unwind for" warnings. + +2011-03-20 Jakub Jelinek <jakub@redhat.com> + + PR c/42544 + PR c/48197 + * gcc.c-torture/execute/pr42544.c: New test. + * gcc.c-torture/execute/pr48197.c: New test. + +2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR preprocessor/48192 + * gcc.target/powerpc/pr48192.c: New file. + + PR target/48053 + * gcc.target/powerpc/pr48053-3.c: New file, add test case for + split problem of 0 being loaded in a VSX register. + +2011-03-21 Richard Guenther <rguenther@suse.de> + + PR c/47939 + * gcc.dg/debug/dwarf2/pr47939-1.c: New testcase. + * gcc.dg/debug/dwarf2/pr47939-2.c: Likewise. + * gcc.dg/debug/dwarf2/pr47939-3.c: Likewise. + * gcc.dg/debug/dwarf2/pr47939-4.c: Likewise. + +2011-03-21 Jakub Jelinek <jakub@redhat.com> + + PR target/48213 + * gcc.dg/pr48213.c: New test. + +2011-03-21 Kai Tietz <ktietz@redhat.com> + + PR target/12171 + * g++.dg/plugin/attribute_plugin.c: Adjust test. + +2011-03-21 Chung-Lin Tang <cltang@codesourcery.com> + + * gcc.target/arm/xor-and.c: New. + +2010-03-21 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/22572 + * gfortran.dg/function_optimize_1.f90: New test. + * gfortran.dg/function_optimize_2.f90: New test. + +2011-03-20 H.J. Lu <hongjiu.lu@intel.com> + + PR rtl-optimization/47502 + * gcc.target/i386/pr47502-1.c: New. + * gcc.target/i386/pr47502-2.c: Likewise. + +2011-03-20 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/48156 + * gcc.dg/pr48156.c: New test. + +2011-03-19 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR libfortran/47439 + * gfortran.dg/scratch_1.f90: Adjust test. + +2011-03-19 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR libfortran/47439 + * gfortran.dg/scratch_1.f90: New test. + +2011-03-18 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/c1x-typedef-1.c: Expect errors for redefinitions of + variably modified typedefs. + * gcc.dg/c1x-typedef-2.c: Remove. + +2011-03-18 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/c1x-anon-struct-1.c: Don't test use of typedefs. + * gcc.dg/c1x-anon-struct-3.c: New test. + * gcc.dg/anon-struct-11.c: Update. + +2011-03-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/vect/slp-multitypes-2.c: Replace dg-do run with + dg-xfail-run-if. + Only xfail with gas. + +2011-03-18 Jason Merrill <jason@redhat.com> + + * g++.dg/template/fn-ptr1.C: New. + + * g++.dg/overload/volatile1.C: New. + + * g++.dg/opt/pr23372.C: New. + + * g++.dg/ext/attrib32.C: Expect errors on the two-names case. + +2011-03-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR middle-end/47405 + * gcc.dg/torture/20090618-1.c: Skip on mips-sgi-irix*. + +2011-03-18 Chung-Lin Tang <cltang@codesourcery.com> + + * gcc.target/arm/unsigned-extend-1.c: New. + +2011-03-18 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/48161 + * gcc.c-torture/compile/pr48161.c: New test. + +2011-03-17 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/47725 + * gcc.dg/torture/pr47725.c: New. + +2011-03-17 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/constexpr-overflow2.C: New. + * g++.dg/cpp0x/constexpr-data2.C: Remove FIXME. + +2011-03-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/specs/elab2.ads: New test. + * gnat.dg/specs/elab2_pkg.ads: New helper. + +2011-03-17 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/decltype-1212.C: New. + * g++.dg/cpp0x/rv-return.C: Adjust expected type. + +2011-03-17 Jason Merrill <jason@redhat.com> + + * g++.dg/parse/memfnquals1.C: New. + +2011-03-17 Richard Guenther <rguenther@suse.de> + + PR middle-end/48134 + * gcc.dg/pr48134.c: New testcase. + +2011-03-17 Richard Guenther <rguenther@suse.de> + + PR middle-end/48165 + * g++.dg/torture/pr48165.C: New testcase. + +2011-03-17 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/48141 + * gcc.dg/pr48141.c: New test. + +2011-03-16 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/constexpr-48089.C: New. + + * g++.dg/cpp0x/constexpr-abi1.C: New. + + * g++.dg/cpp0x/constexpr-46336.C: New. + * g++.dg/parse/friend5.C: Adjust expected errors. + + * g++.dg/cpp0x/constexpr-47570.C: New. + +2011-03-16 Dodji Seketeli <dodji@redhat.com> + + PR debug/47510 + * ++.dg/debug/dwarf2/typedef6.C: New test. + +2011-03-16 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/elision2.C: New. + + * g++.dg/cpp0x/constexpr-array3.C: New. + +2011-03-16 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/sfinae6.C: New. + * gcc/testsuite/g++.dg/cpp0x/initlist38.C: Adjust expected error. + * gcc/testsuite/g++.dg/cpp0x/pr45908.C: Likewise. + * gcc/testsuite/g++.dg/cpp0x/sfinae6.C: Likewise. + * gcc/testsuite/g++.old-deja/g++.jason/conversion11.C: Likewise. + * gcc/testsuite/g++.old-deja/g++.law/arg11.C: Likewise. + +2011-03-16 Jason Merrill <jason@redhat.com> + + * g++.dg/template/incomplete6.C: New. + +2011-03-16 Jeff Law <law@redhat.com> + + * gcc.dg/tree-ssa/vrp55.c: New test. + +2011-03-16 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/auto22.C: New. + +2011-03-16 Richard Guenther <rguenther@suse.de> + + * gcc.dg/guality/vla-1.c (main): Use result of f1 to avoid + optimizing it away if promoted to const. + +2011-03-16 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48149 + * gcc.dg/fold-complex-1.c: New testcase. + +2011-03-16 Richard Guenther <rguenther@suse.de> + + PR testsuite/48147 + * gcc.dg/guality/pr45882.c: Really make sure no inlining + or cloning happens. + +2011-03-16 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/26134 + * gcc.dg/tree-ssa/complex-6.c: New testcase. + +2011-03-16 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48146 + * gcc.dg/torture/pr48146.c: New testcase. + +2011-03-16 Richard Guenther <rguenther@suse.de> + + * gcc.dg/tree-ssa/pr14814.c: Adjust. + * gcc.dg/tree-ssa/ssa-ccp-19.c: Likewise. + +2011-03-16 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/48136 + * gcc.c-torture/compile/pr48136.c: New test. + + * g++.dg/debug/dwarf2/icf.C: Adjust for -fenable-icf-debug removal. + + PR debug/45882 + * gcc.dg/guality/pr45882.c: New test. + +2011-03-15 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/constexpr-recursion.C: New. + + * g++.dg/cpp0x/implicit11.C: New. + +2011-03-15 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com> + + * g++.dg/cpp0x/constexpr-attribute.C: New. + +2011-03-15 Manuel López-Ibáñez <manu@gcc.gnu.org> + + * g++.dg/parse/pr34758.C: New. + +2011-03-15 Xinliang David Li <davidxl@google.com> + + PR c/47837 + * gcc.dg/uninit-pred-7_d.c: New test. + * gcc.dg/uninit-pred-8_d.c: New test. + +2011-03-15 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> + + PR target/46788 + * gcc.target/arm/pr46788.c: New. + +2011-03-15 Richard Guenther <rguenther@suse.de> + + PR middle-end/47650 + * gfortran.dg/c_f_pointer_tests_3.f90: Adjust. + * gfortran.dg/ishft_4.f90: Likewise. + * gfortran.dg/leadz_trailz_3.f90: Likewise. + +2011-03-15 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/13954 + * g++.dg/tree-ssa/pr13954.C: New testcase. + +2011-03-15 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48037 + * gcc.target/i386/pr48037-1.c: New testcase. + +2011-03-15 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/41490 + * gcc.dg/tree-ssa/ssa-sink-6.c: New testcase. + * gcc.dg/tree-ssa/ssa-sink-7.c: Likewise. + * gcc.dg/tree-ssa/ssa-sink-8.c: Likewise. + * gcc.dg/tree-ssa/ssa-sink-9.c: Likewise. + * g++.dg/tree-ssa/pr33604.C: Adjust. + +2011-03-14 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/47917 + * gcc.c-torture/execute/pr47917.c: New test. + * gcc.dg/pr47917.c: New test. + + PR middle-end/38878 + * gcc.dg/tree-ssa/foldaddr-1.c: Remove xfail. + +2011-03-14 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/sse4_1-floor-vec.c: New test. + * gcc.target/i386/sse4_1-ceil-vec.c: Ditto. + * gcc.target/i386/sse4_1-trunc-vec.c: Ditto. + * gcc-target/i386/sse4_1-rint-vec.c: Ditto. + * gcc.target/i386/sse4_1-floorf-vec.c: Ditto. + * gcc.target/i386/sse4_1-ceilf-vec.c: Ditto. + * gcc.target/i386/sse4_1-truncf-vec.c: Ditto. + * gcc.target/i386/sse4_1-rintf-vec.c: Ditto. + * gcc.target/i386/avx-floor-vec.c: Ditto. + * gcc.target/i386/avx-ceil-vec.c: Ditto. + * gcc.target/i386/avx-trunc-vec.c: Ditto. + * gcc.target/i386/avx-rint-vec.c: Ditto. + * gcc.target/i386/avx-floorf-vec.c: Ditto. + * gcc.target/i386/avx-ceilf-vec.c: Ditto. + * gcc.target/i386/avx-truncf-vec.c: Ditto. + * gcc.target/i386/avx-rintf-vec.c: Ditto. + +2011-03-14 Tom Tromey <tromey@redhat.com> + + * gcc.dg/Woverlength-strings-pedantic-c90-asm.c: New file. + * gcc.dg/Woverlength-strings-pedantic-c89-asm.c: New file. + * gcc.dg/Woverlength-strings-pedantic-c99-asm.c: New file. + +2011-03-14 Tom Tromey <tromey@redhat.com> + + * gcc.dg/Woverlength-strings-pedantic-c89-ext.c: New file. + * gcc.dg/Woverlength-strings-pedantic-c90-ext.c: New file. + * gcc.dg/Woverlength-strings-pedantic-c99-ext.c: New file. + +2011-03-14 H.J. Lu <hongjiu.lu@intel.com> + + * gcc.target/i386/builtin-copysign.c: Remove __LP64__ check. + 2011-03-14 Richard Sandiford <richard.sandiford@linaro.org> PR rtl-optimization/47166 @@ -11,8 +2353,8 @@ 2011-03-12 Peter Bergner <bergner@vnet.ibm.com> PR target/48053 - * gcc/testsuite/gcc.target/powerpc/pr48053-1.c: New test. - * gcc/testsuite/gcc.target/powerpc/pr48053-2.c: Likewise. + * gcc.target/powerpc/pr48053-1.c: New test. + * gcc.target/powerpc/pr48053-2.c: Likewise. 2011-03-12 Thomas Koenig <tkoenig@gcc.gnu.org> @@ -843,6 +3185,13 @@ PR fortran/47775 * gfortran.dg/func_result_6.f90: New. +2011-02-18 Michael Matz <matz@suse.de> + + PR fortran/45586 + * gfortran.dg/lto/pr45586_0.f90: New test. + * gfortran.dg/typebound_proc_20.f90: Ditto. + * gfortran.dg/typebound_proc_21.f90: Ditto. + 2011-02-18 Paolo Carlini <paolo.carlini@oracle.com> PR c++/47795 diff --git a/gcc/testsuite/ada/acats/tests/c4/c460011.a b/gcc/testsuite/ada/acats/tests/c4/c460011.a index 56e4c0c4ec2..78038a2bcd4 100644 --- a/gcc/testsuite/ada/acats/tests/c4/c460011.a +++ b/gcc/testsuite/ada/acats/tests/c4/c460011.a @@ -37,7 +37,7 @@ -- and greater than the value of the mod. -- Declare a generic test procedure and instantiate it for each of the -- unsigned types for each operand type. --- Check that the the operand is properly rounded during the conversion. +-- Check that the operand is properly rounded during the conversion. -- -- APPLICABILITY CRITERIA: -- This test is applicable to all implementations which support diff --git a/gcc/testsuite/ada/acats/tests/c9/c954013.a b/gcc/testsuite/ada/acats/tests/c9/c954013.a index a9de8c56b12..70ea3f55970 100644 --- a/gcc/testsuite/ada/acats/tests/c9/c954013.a +++ b/gcc/testsuite/ada/acats/tests/c9/c954013.a @@ -363,7 +363,7 @@ procedure C954013 is -- Show that this message did pass through the Distributor Task Transaction.TC_Thru_Dist := true; - -- Pass this transaction on the the appropriate computation + -- Pass this transaction on the appropriate computation -- task case Transaction.Code is when Credit => diff --git a/gcc/testsuite/g++.dg/warn/Wcast-qual2.C b/gcc/testsuite/c-c++-common/Wcast-qual-1.c index 88fdcfb38f5..640e4f0b683 100644 --- a/gcc/testsuite/g++.dg/warn/Wcast-qual2.C +++ b/gcc/testsuite/c-c++-common/Wcast-qual-1.c @@ -1,11 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-Wcast-qual" } */ -/* The files gcc.dg/cast-qual-3.c and g++.dg/warn/Wcast-qual2.c are - duals. they are intended to show that gcc -Wcast-qual and g++ - -Wcast-qual emit warnings in the same cases. If you change this - file, please also change the other one. */ - void f1 (void *bar) { diff --git a/gcc/testsuite/gcc.dg/fold-bitand-4.c b/gcc/testsuite/c-c++-common/fold-bitand-4.c index acb0ce9af9b..f4bfe2fcfe2 100644 --- a/gcc/testsuite/gcc.dg/fold-bitand-4.c +++ b/gcc/testsuite/c-c++-common/fold-bitand-4.c @@ -38,8 +38,8 @@ int f5 (int i) return 3 & (__SIZE_TYPE__)&c16[i]; } -/* { dg-final { scan-tree-dump-times "return 12" 1 "original" } } */ +/* { dg-final { scan-tree-dump-times "return \[^\n0-9\]*12;" 1 "original" } } */ /* { dg-final { scan-tree-dump-times "\& 15" 1 "original" } } */ -/* { dg-final { scan-tree-dump-times "return 0" 2 "original" } } */ +/* { dg-final { scan-tree-dump-times "return \[^\n0-9\]*0;" 2 "original" } } */ /* { dg-final { scan-tree-dump-times "\& 7" 1 "original" } } */ /* { dg-final { cleanup-tree-dump "original" } } */ diff --git a/gcc/testsuite/c-c++-common/pr46562-2.c b/gcc/testsuite/c-c++-common/pr46562-2.c new file mode 100644 index 00000000000..45bf5cf7195 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr46562-2.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-ccp -fno-tree-forwprop -fdump-tree-fre1" } */ + +static const int a[4] = {}; +int foo(void) +{ + int i = 1; + const int *p = &a[i]; + return *p; +} + +/* { dg-final { scan-tree-dump "= 0;" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/c-c++-common/pr46562.c b/gcc/testsuite/c-c++-common/pr46562.c new file mode 100644 index 00000000000..30659070f01 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr46562.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-ccp1" } */ + +static const int a[4] = {}; +int foo(void) +{ + int i = 1; + const int *p = &a[i]; + return *p; +} + +/* { dg-final { scan-tree-dump "return 0;" "ccp1" } } */ +/* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/testsuite/c-c++-common/raw-string-11.c b/gcc/testsuite/c-c++-common/raw-string-11.c new file mode 100644 index 00000000000..49ceba225b3 --- /dev/null +++ b/gcc/testsuite/c-c++-common/raw-string-11.c @@ -0,0 +1,13 @@ +// PR preprocessor/48740 +// { dg-options "-std=gnu99 -trigraphs -save-temps" { target c } } +// { dg-options "-std=c++0x -save-temps" { target c++ } } +// { dg-do run } + +int main () +{ + return __builtin_memcmp (R"raw(foo%sbar%sfred%sbob?????)raw", + "foo%sbar%sfred%sbob?""?""?""?""?", + sizeof ("foo%sbar%sfred%sbob?""?""?""?""?")); +} + +// { dg-final { cleanup-saved-temps } } diff --git a/gcc/testsuite/gcc.dg/uninit-D-O0.c b/gcc/testsuite/c-c++-common/uninit-D-O0.c index e63cb80aee0..e63cb80aee0 100644 --- a/gcc/testsuite/gcc.dg/uninit-D-O0.c +++ b/gcc/testsuite/c-c++-common/uninit-D-O0.c diff --git a/gcc/testsuite/gcc.dg/uninit-D.c b/gcc/testsuite/c-c++-common/uninit-D.c index ea957e49e98..ea957e49e98 100644 --- a/gcc/testsuite/gcc.dg/uninit-D.c +++ b/gcc/testsuite/c-c++-common/uninit-D.c diff --git a/gcc/testsuite/gcc.dg/uninit-E-O0.c b/gcc/testsuite/c-c++-common/uninit-E-O0.c index 2cc2459663d..2cc2459663d 100644 --- a/gcc/testsuite/gcc.dg/uninit-E-O0.c +++ b/gcc/testsuite/c-c++-common/uninit-E-O0.c diff --git a/gcc/testsuite/gcc.dg/uninit-E.c b/gcc/testsuite/c-c++-common/uninit-E.c index eb356c3ee0d..eb356c3ee0d 100644 --- a/gcc/testsuite/gcc.dg/uninit-E.c +++ b/gcc/testsuite/c-c++-common/uninit-E.c diff --git a/gcc/testsuite/gcc.dg/uninit-F-O0.c b/gcc/testsuite/c-c++-common/uninit-F-O0.c index 737cc65007e..737cc65007e 100644 --- a/gcc/testsuite/gcc.dg/uninit-F-O0.c +++ b/gcc/testsuite/c-c++-common/uninit-F-O0.c diff --git a/gcc/testsuite/gcc.dg/uninit-F.c b/gcc/testsuite/c-c++-common/uninit-F.c index 1dbb365e5b7..1dbb365e5b7 100644 --- a/gcc/testsuite/gcc.dg/uninit-F.c +++ b/gcc/testsuite/c-c++-common/uninit-F.c diff --git a/gcc/testsuite/gcc.dg/uninit-G-O0.c b/gcc/testsuite/c-c++-common/uninit-G-O0.c index d6edffede66..d6edffede66 100644 --- a/gcc/testsuite/gcc.dg/uninit-G-O0.c +++ b/gcc/testsuite/c-c++-common/uninit-G-O0.c diff --git a/gcc/testsuite/gcc.dg/uninit-G.c b/gcc/testsuite/c-c++-common/uninit-G.c index 08f5f532116..08f5f532116 100644 --- a/gcc/testsuite/gcc.dg/uninit-G.c +++ b/gcc/testsuite/c-c++-common/uninit-G.c diff --git a/gcc/testsuite/c-c++-common/vla-1.c b/gcc/testsuite/c-c++-common/vla-1.c new file mode 100644 index 00000000000..401c4e05511 --- /dev/null +++ b/gcc/testsuite/c-c++-common/vla-1.c @@ -0,0 +1,21 @@ +/* Test that changes to a variable are reflected in a VLA later in the + expression. */ +/* { dg-options "" } */ + +#ifdef __cplusplus +extern "C" +#endif +void abort(); + +int i = 4; +int f() +{ + return i; +} + +int main() +{ + if (i+=2, sizeof(*(int(*)[f()])0) != 6*sizeof(int)) + abort(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C index b681a1fcbd9..4c462d5f3a4 100644 --- a/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C +++ b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C @@ -3,10 +3,12 @@ #include <cxxabi.h> -#ifdef ___ARM_EABI__ -static void cctor (void * a, void * b) +#ifdef __ARM_EABI__ +using namespace __cxxabiv1; +static __cxa_cdtor_return_type cctor (void * a, void * b) { - *(char *) a = *(char *) b + *(char *) a = *(char *) b; + return a; } int main() @@ -15,10 +17,10 @@ int main() char data2; char *p; - p = __cxa_vec_ctor (&data, 1, 1, NULL, NULL); + p = (char *) __cxa_vec_ctor (&data, 1, 1, NULL, NULL); if (p != &data) return 1; - p = __cxa_vec_cctor (&data2, &data, 1, 1, cctor, NULL); + p = (char *) __cxa_vec_cctor (&data2, &data, 1, 1, cctor, NULL); if (p != &data2) return 1; diff --git a/gcc/testsuite/g++.dg/conversion/base1.C b/gcc/testsuite/g++.dg/conversion/base1.C new file mode 100644 index 00000000000..e236504ae87 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/base1.C @@ -0,0 +1,20 @@ +// PR c++/48749 + +struct Tuple3 +{ + float x; +}; + +struct Pos: virtual Tuple3 { }; + +struct TexCoords +{ + Pos pos; +}; + +template <class T> +void eval (const TexCoords &coords) +{ + const Pos &pos = coords.pos; + pos.x; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/auto22.C b/gcc/testsuite/g++.dg/cpp0x/auto22.C new file mode 100644 index 00000000000..66630e5367f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto22.C @@ -0,0 +1,21 @@ +// PR c++/47999 +// { dg-options -std=c++0x } + +int& identity(int& i) +{ + return i; +} + +// In a function template, auto type deduction works incorrectly. +template <typename = void> +void f() +{ + int i = 0; + auto&& x = identity(i); // Type of x should be `int&`, but it is `int&&`. +} + +int main (int argc, char* argv[]) +{ + f(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C new file mode 100644 index 00000000000..3c51c2cbf54 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C @@ -0,0 +1,14 @@ +// PR c++/46336 +// { dg-options -std=c++0x } + +extern "C" { + enum A { }; + inline constexpr A + f(A a, A b) // { dg-error "previous declaration" } + { return A(static_cast<int>(a) & static_cast<int>(b)); } + enum B { }; + inline constexpr B + f(B a, B b) // { dg-error "C function" } + { return B(static_cast<int>(a) & static_cast<int>(b)); } +} + diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C new file mode 100644 index 00000000000..c60ba865862 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C @@ -0,0 +1,25 @@ +// PR c++/47570 +// { dg-options -std=c++0x } + +unsigned int constexpr one() +{ return 1; } + +int constexpr one_B() +{ return 1; } + +int main() +{ + // FAIL TO COMPILE: + static bool constexpr SC_huh1 = ((unsigned int)one()) >= ((unsigned int)0); + static bool constexpr SC_huh2 = one() >= ((unsigned int)0); + static bool constexpr SC_huh3 = one() >= 0; + + // COMPILE OK: + static bool constexpr SC_huh4 = ((one() == 0) || (one() > 0)); + static bool constexpr SC_huh5 = one() == 0; + static bool constexpr SC_huh6 = one() > 0; + static bool constexpr SC_huh7 = one_B() >= 0; + static bool constexpr SC_huh8 = one() >= 1; + + return SC_huh3; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C new file mode 100644 index 00000000000..c950a3642fe --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C @@ -0,0 +1,11 @@ +// PR c++/47969 +// { dg-options -std=c++0x } + +struct A +{ + // constexpr operator int () { return 1; } +}; + +constexpr A a = A(); + +int ar[a]; // { dg-error "has non-integral type" } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C new file mode 100644 index 00000000000..fc69cfef678 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C @@ -0,0 +1,24 @@ +// PR c++/48089 +// { dg-options -std=c++0x } + +// bang is ill-formed (diagnostic required) because its initializer is +// non-constant, because it uses the value of an uninitialized object. + +// s() is ill-formed (no diagnostic required) because there is no set of +// arguments that would produce a constant expression. + +// R() is well-formed because i is initialized before j. + +struct s { + constexpr s() : v(v) { } // { dg-message "" } + int v; +}; + +constexpr s bang; // { dg-error "" } + +struct R { + int i,j; + constexpr R() : i(42),j(i) { } // { dg-bogus "" "" { xfail *-*-* } } +}; + +constexpr R r; // { dg-bogus "" "" { xfail *-*-* } } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C new file mode 100644 index 00000000000..e83f142300a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C @@ -0,0 +1,16 @@ +// PR c++/47301 +// { dg-options "-std=c++0x -fabi-version=1" } + +struct A +{ + constexpr operator int () + { + return 1; + } +}; + +template < int > struct B +{ + static constexpr A a = A(); + int ar[a]; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C new file mode 100644 index 00000000000..145a4307e36 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C @@ -0,0 +1,14 @@ +// PR c++/48132 +// { dg-options -std=c++0x } + +struct C +{ + constexpr C (int x) : c (x) {} + int c; +}; + +void +foo () +{ + C a[] = { C (0) }; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C new file mode 100644 index 00000000000..ac85c076d3e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C @@ -0,0 +1,63 @@ +// { dg-options -std=c++0x } + +//A few constexpr's +constexpr int foo() { return __alignof__(int); } + +template<typename T> +constexpr int fooT() { return __alignof__(T); } + +template<int N> +constexpr int fooN() { return N; } + +//Now the attributes + +//with normal variables, +int a __attribute__((aligned(foo()))); +int b __attribute__((aligned(fooT<int>()))); +int c __attribute__((aligned(fooN<__alignof__(int)>()))); + +//with variables inside a template, +template <typename T> +void fun() +{ + T a __attribute__((aligned(foo()))); + T b __attribute__((aligned(fooT<T>()))); + T c __attribute__((aligned(fooN<__alignof__(T)>()))); + T d __attribute__((aligned(fooT<int>()))); + T e __attribute__((aligned(fooN<__alignof__(int)>()))); +} + +//instantiate it, +void bar() +{ + fun<int>(); +} + +//with classes +struct __attribute__((aligned(foo()))) S0 +{ + char dummy; +}; +S0 s0; + +struct __attribute__((aligned(fooT<int>()))) S1 +{ + char dummy; +}; +S1 s1; + +//and class templates +template <typename T> +struct __attribute__((aligned(foo()))) S2 +{ + char dummy; +}; + +S2<int> s2; + +template <typename T> +struct __attribute__((aligned(fooT<T>()))) S3 +{ + char dummy; +}; +S3<int> s3; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C new file mode 100644 index 00000000000..81fcc54b3e6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C @@ -0,0 +1,9 @@ +// { dg-options "-std=c++0x -pedantic-errors" } + +constexpr int f() +{ + { // { dg-error "" } + return 1; + } + { } // { dg-error "" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C new file mode 100644 index 00000000000..243409669bf --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C @@ -0,0 +1,18 @@ +// PR c++/48909 +// { dg-options -std=c++0x } + +#define SA(X) static_assert((X),#X) + +constexpr int const * is_sorted_until(int const * first, int const * last) +{ + return first == last || first + 1 == last ? last + : (*(first + 1) < *first) != false ? first + 1 + : is_sorted_until(first + 1, last); +} + +int main() +{ + static constexpr int array[2] = {0, 1}; + constexpr int const * last = is_sorted_until(array, array + 2); + SA(last==array+2); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C index 598cae6a44f..2d614ec32ed 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C @@ -44,5 +44,4 @@ extern template struct A3<int, 510>; // Use. A3<int, 1111> a31; -// FIXME should this be an error? A3<char, 9999> a32; // { dg-warning "overflow" } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C index a3706d6ec80..183d3f768fa 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C @@ -1,12 +1,11 @@ // Test that we explain why a template instantiation isn't constexpr // { dg-options -std=c++0x } -// { dg-prune-output "not a constexpr function" } template <class T> struct A { T t; - constexpr int f() { return 42; } + constexpr int f() { return 42; } // { dg-error "enclosing class" } }; struct B { B(); operator int(); }; @@ -14,8 +13,8 @@ struct B { B(); operator int(); }; constexpr A<int> ai = { 42 }; constexpr int i = ai.f(); -constexpr int b = A<B>().f(); // { dg-error "enclosing class" } +constexpr int b = A<B>().f(); // { dg-error "not a constexpr function" } template <class T> -constexpr int f (T t) { return 42; } -constexpr int x = f(B()); // { dg-error "parameter" } +constexpr int f (T t) { return 42; } // { dg-error "parameter" } +constexpr int x = f(B()); // { dg-error "constexpr function" } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C new file mode 100644 index 00000000000..4646f82b904 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C @@ -0,0 +1,18 @@ +// PR c++/48296 +// { dg-options -std=c++0x } + +struct X +{ + constexpr X() { } + constexpr X f(X x) { return x; } + constexpr X g(X x); +}; + +constexpr X X::g(X x) { return x; } + +struct Y +{ + Y() { } + constexpr Y f(Y y); // { dg-error "constexpr" } + static constexpr Y g(Y y); // { dg-error "constexpr" } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C new file mode 100644 index 00000000000..547f552e377 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C @@ -0,0 +1,39 @@ +// PR c++/48911 +// { dg-do compile } +// { dg-options "-std=c++0x" } + +#define SA(X) static_assert((X),#X) + +struct A +{ + constexpr A () : a (6) {} + int a; +}; + +int +main () +{ + constexpr int a[2] = { 42 }; + constexpr int i = a[1]; + SA(i==0); + constexpr int b[1] = { }; + constexpr int j = b[0]; + SA(j==0); + constexpr char c[2] = "a"; + constexpr char k = c[1]; + SA(k==0); + constexpr char d[2] = ""; + constexpr char l = d[1]; + SA(l==0); + constexpr wchar_t e[2] = L"a"; + constexpr wchar_t m = e[1]; + SA(m==0); + constexpr wchar_t f[2] = L""; + constexpr wchar_t n = f[1]; + SA(n==0); + constexpr A g[2] = { A () }; + constexpr A o = g[0]; + SA(o.a == 6); + constexpr A p = g[1]; + SA(p.a == 6); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C new file mode 100644 index 00000000000..7bf961b3c45 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C @@ -0,0 +1,15 @@ +// { dg-options -std=c++0x } + +struct booleable { + bool data; + constexpr explicit operator bool() { return data; } +}; + +constexpr booleable truthy_func() { return {true}; } + +void funky() noexcept(truthy_func()) {} + +int main() { + funky(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C new file mode 100644 index 00000000000..5d5749ce2c3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C @@ -0,0 +1,8 @@ +// PR c++/47504 +// { dg-options -std=c++0x } + +char constexpr sub(char arg) +{ return char(arg - char(1)); } + +int main() +{ static char constexpr m = sub(-1); } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C new file mode 100644 index 00000000000..2f9b4887df6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C @@ -0,0 +1,5 @@ +// Test that we catch excessive recursion. +// { dg-options "-std=c++0x -fconstexpr-depth=5" } +// { dg-prune-output "in constexpr expansion" } +constexpr int f (int i) { return f (i-1); } +constexpr int i = f(42); // { dg-error "constexpr evaluation depth" } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C new file mode 100644 index 00000000000..fc794e9abdf --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C @@ -0,0 +1,27 @@ +// Core issue 898 +// { dg-options -std=c++0x } + +namespace N { const int i = 42; } +namespace M { const int j = 42; } + +constexpr int g() { + using namespace N; + using M::j; + static_assert (i == 42, "i == 42"); + return i + j; +} + +template <class T> +constexpr int h() { + using namespace N; + using M::j; + static_assert (i == 42, "i == 42"); + return i + j; +} + +constexpr int i = g(); +constexpr int i2 = h<int>(); + +static_assert (i == 84, "i == 84"); +static_assert (i2 == 84, "i2 == 84"); + diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C new file mode 100644 index 00000000000..059977bfff9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C @@ -0,0 +1,34 @@ +// PR c++/48570 +// { dg-do run } +// { dg-options "-std=c++0x" } + +extern "C" void abort (); +constexpr wchar_t foo (int i) { return L"0123"[i]; } +constexpr char16_t bar (int i) { return u"0123"[i]; } +constexpr char32_t baz (int i) { return U"0123"[i]; } +const wchar_t foo0 = foo (0); +const wchar_t foo1 = foo (1); +const wchar_t foo2 = foo (2); +const wchar_t foo3 = foo (3); +const wchar_t foo4 = foo (4); +const char16_t bar0 = bar (0); +const char16_t bar1 = bar (1); +const char16_t bar2 = bar (2); +const char16_t bar3 = bar (3); +const char16_t bar4 = bar (4); +const char32_t baz0 = baz (0); +const char32_t baz1 = baz (1); +const char32_t baz2 = baz (2); +const char32_t baz3 = baz (3); +const char32_t baz4 = baz (4); + +int +main () +{ + if (foo0 != L'0' || foo1 != L'1' || foo2 != L'2' || foo3 != L'3' || foo4 != L'\0') + abort (); + if (bar0 != u'0' || bar1 != u'1' || bar2 != u'2' || bar3 != u'3' || bar4 != u'\0') + abort (); + if (baz0 != U'0' || baz1 != U'1' || baz2 != U'2' || baz3 != U'3' || baz4 != U'\0') + abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C new file mode 100644 index 00000000000..4fc8980ef96 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C @@ -0,0 +1,7 @@ +// PR c++/48570 +// { dg-do compile } +// { dg-options -std=c++0x } + +constexpr wchar_t c1 = L"hi"[3]; // { dg-error "out of bound" } +constexpr char16_t c2 = u"hi"[3]; // { dg-error "out of bound" } +constexpr char32_t c3 = U"hi"[3]; // { dg-error "out of bound" } diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C b/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C new file mode 100644 index 00000000000..38393d3b874 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C @@ -0,0 +1,11 @@ +// Core 1212 +// { dg-options -std=c++0x } + +template <class T, class U> struct assert_same_type; +template <class T> struct assert_same_type<T,T> {}; + +int main() +{ + int i; + assert_same_type<int&&,decltype(static_cast<int&&>(i))>(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted15.C b/gcc/testsuite/g++.dg/cpp0x/defaulted15.C index 4c5b11c9e19..0a47c20f778 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted15.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted15.C @@ -54,5 +54,5 @@ struct G: public F struct H { - virtual ~H() = default; // { dg-error "declared virtual" } + virtual ~H() = default; }; diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted22.C b/gcc/testsuite/g++.dg/cpp0x/defaulted22.C new file mode 100644 index 00000000000..61e9d320521 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted22.C @@ -0,0 +1,23 @@ +// Test that a virtual defaulted constructor is still virtual. +// { dg-do run } +// { dg-options -std=c++0x } + +int r = 1; + +struct A +{ + virtual ~A() = default; +}; + +struct B: A +{ + ~B() noexcept { r = 0; } +}; + +A* ap = new B(); + +int main() +{ + delete ap; + return r; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted23.C b/gcc/testsuite/g++.dg/cpp0x/defaulted23.C new file mode 100644 index 00000000000..5b4438ddd02 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted23.C @@ -0,0 +1,27 @@ +// Test for checking of exception specifications on defaulted fns +// { dg-options -std=c++0x } + +struct A +{ + A() noexcept = default; +}; + +struct B +{ + B() throw (int) = default; // { dg-error "exception-specification that differs from the implicit declaration" } +}; + +struct C +{ + C() throw (int) { } +}; + +struct D: C +{ + D() throw (int) = default; +}; + +struct E +{ + E() = default; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted24.C b/gcc/testsuite/g++.dg/cpp0x/defaulted24.C new file mode 100644 index 00000000000..307bf94ab85 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted24.C @@ -0,0 +1,6 @@ +// PR c++/48280 +// { dg-options -std=c++0x } + +struct S { + template < typename > S (const S &) = default; // { dg-error "" } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted25.C b/gcc/testsuite/g++.dg/cpp0x/defaulted25.C new file mode 100644 index 00000000000..2a38fedb248 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted25.C @@ -0,0 +1,10 @@ +// PR c++/48930 +// { dg-options -std=c++0x } +// { dg-prune-output "note" } + +struct A +{ + A(const A&) = default; +}; + +A a; // { dg-error "no match" } diff --git a/gcc/testsuite/g++.dg/cpp0x/dependent1.C b/gcc/testsuite/g++.dg/cpp0x/dependent1.C new file mode 100644 index 00000000000..1ceeeafd78d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/dependent1.C @@ -0,0 +1,25 @@ +// PR c++/48319 +// { dg-options -std=c++0x } +// We were failing to recognize declval<_Args1> as dependent. + +template<typename Tp> Tp declval() noexcept; + +template<typename _Tp> +class __is_constructible_helper +{ + typedef char __one; + typedef struct { char __arr[2]; } __two; + + template<typename _Tp1, typename... _Args1> + static decltype(_Tp1(declval<_Args1>()...), __one()) __test(int); + + template<typename, typename...> + static __two __test(...); + +public: + static const bool __value = sizeof(__test<_Tp>(0)) == 1; +}; + +int main() { + return __is_constructible_helper<int>::__value; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/elision2.C b/gcc/testsuite/g++.dg/cpp0x/elision2.C new file mode 100644 index 00000000000..216b1b59d16 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/elision2.C @@ -0,0 +1,13 @@ +// Core 1148: should be able to move from value parameter on return +// { dg-options -std=c++0x } + +struct A +{ + A(const A&) = delete; + A(A&&); +}; + +A f (A a) +{ + return a; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/enum10.C b/gcc/testsuite/g++.dg/cpp0x/enum10.C new file mode 100644 index 00000000000..55a1ab46be1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/enum10.C @@ -0,0 +1,9 @@ +// PR c++/48534 +// { dg-options -std=c++0x } + +enum class OpSE : bool; + +int main() +{ + return static_cast<bool>(OpSE()); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/enum9.C b/gcc/testsuite/g++.dg/cpp0x/enum9.C new file mode 100644 index 00000000000..10e510bcd25 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/enum9.C @@ -0,0 +1,5 @@ +// { dg-options -std=c++0x } + +enum class E { }; +E f(); +bool b2 = static_cast<bool>(f()); diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit11.C b/gcc/testsuite/g++.dg/cpp0x/implicit11.C new file mode 100644 index 00000000000..7ec8e95dcb6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit11.C @@ -0,0 +1,17 @@ +// Test that we consider base dtors in determining whether +// a derived ctor is deleted even if the ctor is trivial. +// { dg-options -std=c++0x } + +struct A +{ + ~A() = delete; // { dg-error "declared here" } +}; + +struct B: A { }; // { dg-error "deleted" } + +extern B eb; +int main() +{ + B* b1 = new B; // { dg-error "use of deleted function" "" { xfail *-*-* } } + B* b2 = new B(eb); // { dg-error "use of deleted function" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C new file mode 100644 index 00000000000..19eec33acf7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C @@ -0,0 +1,12 @@ +// { dg-options -std=c++0x } + +typedef int IA[2]; +typedef double DA[2]; + +void f(const IA&) { } +void f(const DA&); + +int main() +{ + f({1,2}); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C new file mode 100644 index 00000000000..25113d770b0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C @@ -0,0 +1,5 @@ +// { dg-options -std=c++0x } + +typedef int IRT[2]; + +const IRT& ir = IRT{1,2}; diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist38.C b/gcc/testsuite/g++.dg/cpp0x/initlist38.C index 818d69ad654..32e20d591c7 100644 --- a/gcc/testsuite/g++.dg/cpp0x/initlist38.C +++ b/gcc/testsuite/g++.dg/cpp0x/initlist38.C @@ -17,5 +17,5 @@ int main() f({}); B b0 = { }; B b1 { }; // OK, uses #1 - B b2 { 1 }; // { dg-error "conversion" } + B b2 { 1 }; // { dg-error "could not convert" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist46.C b/gcc/testsuite/g++.dg/cpp0x/initlist46.C new file mode 100644 index 00000000000..2b9f07dbdc9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist46.C @@ -0,0 +1,14 @@ +// PR c++/48281 +// { dg-options "-std=c++0x -O2" } +// { dg-do run } + +#include <initializer_list> + +typedef std::initializer_list<int> int1; +typedef std::initializer_list<int1> int2; +static int2 ib = {{42,2,3,4,5},{2,3,4,5,1},{3,4,5,2,1}}; + +int main() +{ + return *(ib.begin()->begin()) != 42; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist47.C b/gcc/testsuite/g++.dg/cpp0x/initlist47.C new file mode 100644 index 00000000000..b76fb58361f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist47.C @@ -0,0 +1,9 @@ +// { dg-options -std=c++0x } + +struct A { ~A() = delete; }; // { dg-error "declared" } + +int main() +{ + typedef const A cA[2]; + cA{}; // { dg-error "deleted" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist48.C b/gcc/testsuite/g++.dg/cpp0x/initlist48.C new file mode 100644 index 00000000000..9eb451a8277 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist48.C @@ -0,0 +1,11 @@ +// PR c++/48726 +// { dg-options -std=c++0x } + +#include <memory> + +struct Foo{ + int i; +}; +typedef std::unique_ptr<Foo> up; + +std::initializer_list<up> il{up{new Foo}, up{new Foo}}; diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist49.C b/gcc/testsuite/g++.dg/cpp0x/initlist49.C new file mode 100644 index 00000000000..752c4331afb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist49.C @@ -0,0 +1,18 @@ +// Test for non-trivial list-initialization with array new. +// { dg-options -std=c++0x } +// { dg-do run } + +struct A +{ + enum E { c_string, number } e; + A(const char *): e(c_string) {} + A(int): e(number) {} +}; + +int main() +{ + A* ap = new A[2]{1, ""}; + if (ap[0].e != A::number || ap[1].e != A::c_string) + return 1; + delete[] ap; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C new file mode 100644 index 00000000000..29cd2a97b3f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C @@ -0,0 +1,13 @@ +// PR c++/48523 +// { dg-options -std=c++0x } + +template<typename> +struct X +{ + bool b; + + void f() + { + [this]{ return b; }; + } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/move1.C b/gcc/testsuite/g++.dg/cpp0x/move1.C new file mode 100644 index 00000000000..12e363a8cab --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/move1.C @@ -0,0 +1,15 @@ +// { dg-options "-std=c++0x -pedantic-errors" } + +#include <utility> + +class A { }; + +static void g ( A && ) { } + +template < class T > class B { +public: + void f ( ) { + A a; + g ( std :: move ( a ) ); + } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept02.C b/gcc/testsuite/g++.dg/cpp0x/noexcept02.C index be6fa00dd09..60015e75668 100644 --- a/gcc/testsuite/g++.dg/cpp0x/noexcept02.C +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept02.C @@ -46,7 +46,9 @@ SA(!noexcept(f3(A()))); template <class T1, class T2> void f (T1, T2) noexcept(noexcept(T1(), T2())); -SA(noexcept(f3(1,1))); +struct B { }; + +SA(noexcept(f3(1,B()))); SA(!noexcept(f3(1,A()))); SA(!noexcept(f3(A(),1))); SA(!noexcept(f3(A(),A()))); diff --git a/gcc/testsuite/g++.dg/cpp0x/pr45908.C b/gcc/testsuite/g++.dg/cpp0x/pr45908.C index 1a821e5d83b..3a8508890ee 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr45908.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr45908.C @@ -14,5 +14,5 @@ struct vector { class block { vector v; auto end() const -> decltype(v.begin()) - { return v.begin(); } // { dg-error "conversion" } + { return v.begin(); } // { dg-error "could not convert" } }; diff --git a/gcc/testsuite/g++.dg/cpp0x/pr48522.C b/gcc/testsuite/g++.dg/cpp0x/pr48522.C new file mode 100644 index 00000000000..1543d8a281d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr48522.C @@ -0,0 +1,24 @@ +// { dg-options "-std=c++0x" } + +template <typename T> +struct Handle +{ + Handle(T& t); +}; + +template<class T> +struct Class { + struct Struct {} data; + void f(); + void g(); +}; + +template<class T> +void Class<T>::f() { + Handle< decltype((data)) > handle(data); +} + +template<class T> +void Class<T>::g() { + Handle< decltype((data)) > handle(data); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for11.C b/gcc/testsuite/g++.dg/cpp0x/range-for11.C new file mode 100644 index 00000000000..d02519a2519 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for11.C @@ -0,0 +1,40 @@ +// Test for range-based for loop +// Test the loop with a custom iterator +// with begin/end as member functions + +// { dg-do compile } +// { dg-options "-std=c++0x" } + +struct iterator +{ + int x; + explicit iterator(int v) :x(v) {} + iterator &operator ++() { ++x; return *this; } + int operator *() { return x; } + bool operator != (const iterator &o) { return x != o.x; } +}; + +namespace foo +{ + struct container + { + int min, max; + container(int a, int b) :min(a), max(b) {} + + iterator begin() + { + return iterator(min); + } + iterator end() + { + return iterator(max + 1); + } + }; +} + +int main() +{ + foo::container c(1,4); + for (int it : c) + ; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for12.C b/gcc/testsuite/g++.dg/cpp0x/range-for12.C new file mode 100644 index 00000000000..9b405dc620a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for12.C @@ -0,0 +1,116 @@ +// Test for range-based for loop with templates +// and begin/end as member functions + +// { dg-do run } +// { dg-options "-std=c++0x" } + +/* Preliminary declarations */ +namespace pre +{ + struct iterator + { + int x; + explicit iterator (int v) :x(v) {} + iterator &operator ++() { ++x; return *this; } + int operator *() { return x; } + bool operator != (const iterator &o) { return x != o.x; } + }; + + struct container + { + int min, max; + container(int a, int b) :min(a), max(b) {} + iterator begin() const + { + return iterator(min); + } + iterator end() const + { + return iterator(max); + } + + }; + +} //namespace pre + +using pre::container; +extern "C" void abort(void); + +container run_me_just_once() +{ + static bool run = false; + if (run) + abort(); + run = true; + return container(1,2); +} + +/* Template with dependent expression. */ +template<typename T> int test1(const T &r) +{ + int t = 0; + for (int i : r) + t += i; + return t; +} + +/* Template with non-dependent expression and dependent declaration. */ +template<typename T> int test2(const container &r) +{ + int t = 0; + for (T i : r) + t += i; + return t; +} + +/* Template with non-dependent expression (array) and dependent declaration. */ +template<typename T> int test2(const int (&r)[4]) +{ + int t = 0; + for (T i : r) + t += i; + return t; +} + +/* Template with non-dependent expression and auto declaration. */ +template<typename T> int test3(const container &r) +{ + int t = 0; + for (auto i : r) + t += i; + return t; +} + +/* Template with non-dependent expression (array) and auto declaration. */ +template<typename T> int test3(const int (&r)[4]) +{ + int t = 0; + for (auto i : r) + t += i; + return t; +} + +int main () +{ + container c(1,5); + int a[4] = {5,6,7,8}; + + for (auto x : run_me_just_once()) + ; + + if (test1 (c) != 10) + abort(); + if (test1 (a) != 26) + abort(); + + if (test2<int> (c) != 10) + abort(); + if (test2<int> (a) != 26) + abort(); + + if (test3<int> (c) != 10) + abort(); + if (test3<int> (a) != 26) + abort(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for13.C b/gcc/testsuite/g++.dg/cpp0x/range-for13.C new file mode 100644 index 00000000000..7ebf0c563e8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for13.C @@ -0,0 +1,103 @@ +// Test for errors in range-based for loops +// with member begin/end + +// { dg-do compile } +// { dg-options "-std=c++0x" } + +//These should not be used +template<typename T> int *begin(T &t) +{ + T::fail; +} +template<typename T> int *end(T &t) +{ + T::fail; +} + +struct container1 +{ + int *begin(); + //no end +}; + +struct container2 +{ + int *end(); + //no begin +}; + +struct container3 +{ +private: + int *begin(); // { dg-error "is private" } + int *end(); // { dg-error "is private" } +}; + +struct container4 +{ + int *begin; + int *end; +}; + +struct container5 +{ + typedef int *begin; + typedef int *end; +}; + +struct callable +{ + int *operator()(); +}; + +struct container6 +{ + callable begin; + callable end; +}; + +struct container7 +{ + static callable begin; + static callable end; +}; + +struct container8 +{ + static int *begin(); + int *end(); +}; + +struct private_callable +{ +private: + int *operator()(); // { dg-error "is private" } +}; + +struct container9 +{ + private_callable begin; + private_callable end; +}; + +struct container10 +{ + typedef int *(*function)(); + + function begin; + static function end; +}; + +void test1() +{ + for (int x : container1()); // { dg-error "member but not" } + for (int x : container2()); // { dg-error "member but not" } + for (int x : container3()); // { dg-error "within this context" } + for (int x : container4()); // { dg-error "cannot be used as a function" } + for (int x : container5()); // { dg-error "invalid use of" } + for (int x : container6()); + for (int x : container7()); + for (int x : container8()); + for (int x : container9()); // { dg-error "within this context" } + for (int x : container10()); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for14.C b/gcc/testsuite/g++.dg/cpp0x/range-for14.C new file mode 100644 index 00000000000..26ae477d70e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for14.C @@ -0,0 +1,95 @@ +// Test for other range-based for loops with +// begin/end member functions + +// { dg-do compile } +// { dg-options "-std=c++0x" } + +//These should not be used +template<typename T> int *begin(T &t) +{ + T::fail; +} +template<typename T> int *end(T &t) +{ + T::fail; +} + +//Test for defaults + +struct default1 +{ + int *begin(int x); // { dg-message "note" } + int *end(); +}; + +struct default2 +{ + int *begin(int x=0); + int *end(); +}; + +struct default3 +{ + template <typename T> T *begin(); // { dg-message "note" } + int *end(); +}; + +struct default4 +{ + template <typename T=int> T *begin(); + int *end(); +}; + +struct default5 +{ + template <typename T=int> T *begin(int x=0); + int *end(); +}; + +void test1() +{ + for (int x : default1()); // { dg-error "no matching function|note" } + for (int x : default2()); + for (int x : default3()); // { dg-error "no matching function|note" } + for (int x : default4()); + for (int x : default5()); +} + +//Inheritance tests + +struct base_begin +{ + int *begin(); // { dg-error "" } +}; + +struct base_end +{ + int *end(); +}; + +struct derived1 : base_begin, base_end +{ +}; + +struct base_begin2 : base_begin +{ +}; + +struct derived2 : base_begin, base_end, base_begin2 // { dg-warning "" } +{ +}; + +struct base_begin3 : virtual base_begin +{ +}; + +struct derived3 : virtual base_begin, base_end, base_begin3 +{ +}; + +void test2() +{ + for (int x : derived1()); + for (int x : derived2()); // { dg-error "is ambiguous" } + for (int x : derived3()); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for15.C b/gcc/testsuite/g++.dg/cpp0x/range-for15.C new file mode 100644 index 00000000000..38f330771ea --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for15.C @@ -0,0 +1,59 @@ +// Test for range-based for loop with templates +// and begin/end as member (non-)virtual functions + +// { dg-do run } +// { dg-options "-std=c++0x" } + +unsigned int g; + +struct A +{ + virtual int *begin() + { + g |= 1; + return 0; + } + int *end() + { + g |= 2; + return 0; + } +}; + +struct B : A +{ + virtual int *begin() + { + g |= 4; + return 0; + } + int *end() + { + g |= 8; + return 0; + } +}; + +extern "C" void abort(void); + +int main () +{ + A a; + B b; + A &aa = b; + + g = 0; + for (int x : a); + if (g != (1 | 2)) + abort(); + + g = 0; + for (int x : b); + if (g != (4 | 8)) + abort(); + + g = 0; + for (int x : aa); + if (g != (4 | 2)) + abort(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for16.C b/gcc/testsuite/g++.dg/cpp0x/range-for16.C new file mode 100644 index 00000000000..86cc2a828bf --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for16.C @@ -0,0 +1,21 @@ +// Test for range-based for loop with arrays of +// incomplete type or unknown size + +// { dg-do compile } +// { dg-options "-std=c++0x" } + +extern int a[10]; +extern int b[]; + +struct S; +extern S c[10]; +extern S d[]; + +void test() +{ + for (int n : a); + for (int n : b); // { dg-error "incomplete type" } + for (S &n : c); // { dg-error "incomplete type" } + for (S &n : d); // { dg-error "incomplete type" } + for (int n : *c); // { dg-error "incomplete type" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for17.C b/gcc/testsuite/g++.dg/cpp0x/range-for17.C new file mode 100644 index 00000000000..eb888d9ab62 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for17.C @@ -0,0 +1,17 @@ +// { dg-options -std=c++0x } + +extern "C" int printf (const char *, ...); + +enum E { e1, e2, e3, X }; +E operator*(E e) { return e; } +E begin(E e) { return e; } +E end(E e) { return X; }; +E operator++(E& e) { return e = E(e+1); } + +int main() +{ + for (auto e: e1) + { + printf ("%d ", e); + } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for2.C b/gcc/testsuite/g++.dg/cpp0x/range-for2.C index bfab37673a1..17eb41dba7b 100644 --- a/gcc/testsuite/g++.dg/cpp0x/range-for2.C +++ b/gcc/testsuite/g++.dg/cpp0x/range-for2.C @@ -8,7 +8,7 @@ struct iterator { int x; - iterator(int v) :x(v) {} + explicit iterator(int v) :x(v) {} iterator &operator ++() { ++x; return *this; } int operator *() { return x; } bool operator != (const iterator &o) { return x != o.x; } @@ -36,6 +36,6 @@ namespace foo int main() { foo::container c(1,4); - for (iterator it : c) + for (int it : c) ; } diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for3.C b/gcc/testsuite/g++.dg/cpp0x/range-for3.C index 947f01ced74..85115a38f5e 100644 --- a/gcc/testsuite/g++.dg/cpp0x/range-for3.C +++ b/gcc/testsuite/g++.dg/cpp0x/range-for3.C @@ -8,7 +8,7 @@ struct iterator { int x; - iterator(int v) :x(v) {} + explicit iterator(int v) :x(v) {} iterator &operator ++() { ++x; return *this; } int operator *() { return x; } bool operator != (const iterator &o) { return x != o.x; } @@ -36,7 +36,7 @@ namespace std int main() { container c(1,4); - for (iterator it : c) + for (int it : c) { } } diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for9.C b/gcc/testsuite/g++.dg/cpp0x/range-for9.C index 96e9cb61fd6..c51cbf99469 100644 --- a/gcc/testsuite/g++.dg/cpp0x/range-for9.C +++ b/gcc/testsuite/g++.dg/cpp0x/range-for9.C @@ -6,6 +6,6 @@ void test() { int a[] = {0,1,2}; - for (int x : a) // { dg-error "range-based-for" } + for (int x : a) // { dg-error "range-based 'for'" } ; } diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/call1.C b/gcc/testsuite/g++.dg/cpp0x/regress/call1.C new file mode 100644 index 00000000000..833318b0560 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/call1.C @@ -0,0 +1,13 @@ +// PR c++/48500 +// { dg-options -std=c++0x } + +struct linked_ptr { +}; +template <typename T> linked_ptr make_linked_ptr(T* ptr); +struct Concrete; +struct NewedClass { + NewedClass(const Concrete& req){} +}; +template<typename ArgT> void AddObjToChange(const ArgT& req) { + linked_ptr p = make_linked_ptr(new NewedClass(req)); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C new file mode 100644 index 00000000000..2094d3e3ebe --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C @@ -0,0 +1,9 @@ +// PR c++/48212 +// { dg-options -std=c++0x } + +template < bool > void +foo () +{ + const bool b =; // { dg-error "" } + foo < b > (); // { dg-error "constant expression" } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C b/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C new file mode 100644 index 00000000000..40d07e5deef --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C @@ -0,0 +1,9 @@ +// PR c++/48369 +// { dg-options -std=gnu++0x } + +extern "C" int isnan (double); + +void f(double d) +{ + bool b = isnan(d); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C b/gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C new file mode 100644 index 00000000000..25354b3a54a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C @@ -0,0 +1,14 @@ +// PR c++/48707 +// { dg-options -std=c++0x } + +struct A { + static int a(); +}; + +template<typename X> +struct B: A { + static int const b; +}; + +template<typename X> +int const B<X>::b=B<X>::a(); diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C b/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C new file mode 100644 index 00000000000..112389d4a8e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C @@ -0,0 +1,7 @@ +// PR c++/48265 +// { dg-options -std=c++0x } + +template < int > struct S +{ + S () { const int i = i; i; }; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C b/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C new file mode 100644 index 00000000000..160296f640f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C @@ -0,0 +1,18 @@ +// PR c++/48313 +// { dg-options -std=c++0x } + +template<typename F> +void f(F&&) { } + +void g() { } + +template<typename T> void h() { } + +int main() +{ + f( g ); // OK + void (&p)() = h<int>; + f( p ); // OK + f( h<int> ); // ??? +} + diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-func.C b/gcc/testsuite/g++.dg/cpp0x/rv-func.C new file mode 100644 index 00000000000..db142961128 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/rv-func.C @@ -0,0 +1,22 @@ +// PR c++/48457, Core 1238 +// { dg-options -std=c++0x } + +template<class T> +T&& create(); + +template<class T, class Arg> +void test() { + T t(create<Arg>()); + (void) t; +} + +void f (void (&)()); +void f (void (&&)()); + +int main() { + test<void(&)(), void()>(); + test<void(&&)(), void()>(); + // This call should choose the lvalue reference overload. + // { dg-final { scan-assembler-not "_Z1fOFvvE" } } + f(create<void()>()); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-return.C b/gcc/testsuite/g++.dg/cpp0x/rv-return.C index e52101feae1..3ab659833ea 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv-return.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv-return.C @@ -7,12 +7,12 @@ template<typename T> struct same_type<T, T> {}; int const f() { return 0; } int &&r = f(); // binding "int&&" to "int" should succeed -same_type<decltype(f()), int const> s1; +same_type<decltype(f()), int> s1; same_type<decltype(0,f()), int> s2; template <class T> T const g() { return 0; } int &&r2 = g<int>(); -same_type<decltype(g<int>()), int const> s3; +same_type<decltype(g<int>()), int> s3; same_type<decltype(0,g<int>()), int> s4; diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae10.C b/gcc/testsuite/g++.dg/cpp0x/sfinae10.C new file mode 100644 index 00000000000..ede8b704245 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae10.C @@ -0,0 +1,18 @@ +// PR c++/48452 +// { dg-options -std=c++0x } +namespace std { + template <class T> T&& declval(); +} + +template<class T, class... Args> +decltype(T(std::declval<Args>()...), char()) f(int); + +template<class, class...> +char (&f(...))[2]; + +struct A { virtual ~A() = 0; }; +struct B {}; + +static_assert(sizeof(f<A, int, int>(0)) != 1, "Error"); // a +static_assert(sizeof(f<B, void, int>(0)) != 1, "Error"); // b +static_assert(sizeof(f<void, int, int>(0)) != 1, "Error"); // c diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae11.C b/gcc/testsuite/g++.dg/cpp0x/sfinae11.C new file mode 100644 index 00000000000..a3ffc34f9a3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae11.C @@ -0,0 +1,56 @@ +// PR c++/48468 +// { dg-options -std=c++0x } +// { dg-prune-output "note" } + +template<class T> +T&& declval() noexcept; + +template< class T > +inline void f1( T& x ) noexcept( noexcept( declval<T&>().foo() ) ) +{ + x.foo(); +} + +template< class T, + bool Noexcept = noexcept( declval<T&>().foo() ) +> +inline void f2( T& x ) noexcept( Noexcept ) +{ + x.foo(); +} + +// a common and trivial mistake +template< class T > +inline void f3( T& x ) noexcept( declval<T&>().foo() ) +{ + x.foo(); +} + +struct X +{ + void foo(); +}; + +struct Y +{ + void foo() noexcept; +}; + +struct Z {}; + +int main() +{ + X x; Y y; Z z; + + static_assert( !noexcept( f1(x) ), "OK." ); + static_assert( !noexcept( f2(x) ), "OK." ); + // static_assert( !noexcept( f3(x) ), "shall be ill-formed(OK)." ); + + static_assert( noexcept( f1(y) ), "OK." ); + static_assert( noexcept( f2(y) ), "OK." ); + // static_assert( noexcept( f3(y) ), "shall be ill-formed(OK)." ); + + static_assert( noexcept( f1(z) ), "shall be ill-formed." ); // { dg-error "no match" } + static_assert( noexcept( f2(z) ), "shall be ill-formed." ); // { dg-error "no match" } + static_assert( !noexcept( f3(z) ), "shall be ill-formed." ); // { dg-error "no match" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae12.C b/gcc/testsuite/g++.dg/cpp0x/sfinae12.C new file mode 100644 index 00000000000..114f1b42da8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae12.C @@ -0,0 +1,18 @@ +// PR c++/48535 +// { dg-options -std=c++0x } + +template<class T, + class = decltype(T{}) +> +char f(int); + +template<class> +char (&f(...))[2]; + +struct A { virtual ~A() = 0; }; + +static_assert(sizeof(f<A>(0)) != 1, "Error"); // (a) +static_assert(sizeof(f<void()>(0)) != 1, "Error"); // (b) +static_assert(sizeof(f<int&>(0)) != 1, "Error"); // (d) +static_assert(sizeof(f<const int&>(0)) == 1, "Error"); // (e) +static_assert(sizeof(f<int[]>(0)) != 1, "Error"); // (f) diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae13.C b/gcc/testsuite/g++.dg/cpp0x/sfinae13.C new file mode 100644 index 00000000000..465df2d8b8c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae13.C @@ -0,0 +1,20 @@ +// PR c++/48581 +// { dg-options -std=c++0x } + +template<class T> +T&& create(); + +template<class T, + class = decltype(foo(create<T>())) +> +auto f(int) -> char; + +template<class> +auto f(...) -> char (&)[2]; + +struct S {}; +void foo(S); + +static_assert(sizeof(f<S>(0)) == 1, "Error"); // (#) + +int main() {} diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae14.C b/gcc/testsuite/g++.dg/cpp0x/sfinae14.C new file mode 100644 index 00000000000..305f96eddca --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae14.C @@ -0,0 +1,27 @@ +// PR c++/48557 +// { dg-options -std=c++0x } + +template<class T> +struct add_rval_ref +{ + typedef T&& type; +}; + +template<> +struct add_rval_ref<void> +{ + typedef void type; +}; + +template<class T> +typename add_rval_ref<T>::type create(); + +template<class T, class U, + class = decltype(create<T>() + create<U>()) +> +char f(int); + +template<class, class> +char (&f(...))[2]; + +static_assert(sizeof(f<void, int>(0)) != 1, "Error"); // (a) diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae15.C b/gcc/testsuite/g++.dg/cpp0x/sfinae15.C new file mode 100644 index 00000000000..595ca40b555 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae15.C @@ -0,0 +1,12 @@ +// PR c++/48531 +// { dg-options -std=c++0x } + +template<class T, + class = decltype(T()) +> +char f(int); + +template<class> +char (&f(...))[2]; + +static_assert(sizeof(f<int[]>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae16.C b/gcc/testsuite/g++.dg/cpp0x/sfinae16.C new file mode 100644 index 00000000000..6470567b7a2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae16.C @@ -0,0 +1,17 @@ +// PR c++/48531 +// { dg-options -std=c++0x } + +template<class T, + class = decltype(T()) +> +char f(int); + +template<class> +double f(...); + +struct B2 { + B2(...); +}; + +#define SA(X) static_assert ((X), #X); +SA(sizeof(f<B2[2]>(0)) != 1); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae17.C b/gcc/testsuite/g++.dg/cpp0x/sfinae17.C new file mode 100644 index 00000000000..dbbd9efe410 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae17.C @@ -0,0 +1,31 @@ +// PR c++/48530 +// { dg-options -std=c++0x } + +template<class T, + class = decltype(T{}) +> +char f(int); + +template<class> +char (&f(...))[2]; + +struct DelDtor { + ~DelDtor() = delete; +}; + +static_assert(sizeof(f<DelDtor[2]>(0)) != 1, "Error"); + +struct A +{ + static DelDtor *p; +}; + +template<class T, + class = decltype(delete T::p, (T*)0) +> +char g(int); + +template<class> +char (&g(...))[2]; + +static_assert(sizeof(g<DelDtor>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae18.C b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C new file mode 100644 index 00000000000..bb54335e6cc --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C @@ -0,0 +1,17 @@ +// PR c++/48530 +// { dg-options -std=c++0x } + +template<class T, + class = decltype(T()) +> +char f(int); + +template<class> +char (&f(...))[2]; + +struct DelDtor { + DelDtor() = default; + ~DelDtor() = delete; +}; + +static_assert(sizeof(f<DelDtor>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae19.C b/gcc/testsuite/g++.dg/cpp0x/sfinae19.C new file mode 100644 index 00000000000..be96983bf39 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae19.C @@ -0,0 +1,13 @@ +// PR c++/48737 +// { dg-options "-std=c++0x" } + +template<class T> +T&& create(); + +template<class T, class... Args> +decltype(T{create<Args>()...}, char()) f(int); + +template<class, class...> +char (&f(...))[2]; + +static_assert(sizeof(f<int[1], int, int>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae20.C b/gcc/testsuite/g++.dg/cpp0x/sfinae20.C new file mode 100644 index 00000000000..486064c3af7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae20.C @@ -0,0 +1,23 @@ +// PR c++/48744 +// { dg-options "-std=c++0x" } + +template<class T> +struct add_rval_ref { + typedef T&& type; +}; + +template<> +struct add_rval_ref<void> { + typedef void type; +}; + +template<class T> +typename add_rval_ref<T>::type create(); + +template<class T, class Arg> +decltype(T{create<Arg>()}, char()) f(int); + +template<class, class> +char (&f(...))[2]; + +static_assert(sizeof(f<int, void>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae21.C b/gcc/testsuite/g++.dg/cpp0x/sfinae21.C new file mode 100644 index 00000000000..4fba6eb82a1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae21.C @@ -0,0 +1,14 @@ +// PR c++/48735 +// { dg-options "-std=c++0x" } + +template<class T, + class = decltype(T{}) +> +char f(int); + +template<class> +char (&f(...))[2]; + +struct ND { ND() = delete; }; + +static_assert(sizeof(f<ND[1]>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae6.C b/gcc/testsuite/g++.dg/cpp0x/sfinae6.C new file mode 100644 index 00000000000..401d5362d84 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae6.C @@ -0,0 +1,31 @@ +// PR c++/48113 +// { dg-options -std=c++0x } + +template<typename T> T declval(); + +struct tuple { }; + +struct F1 +{ + void operator()(tuple, int); +}; + +typedef void (*F2)(tuple, int); + +template<typename F, typename T> +struct Bind +{ + template<typename A, + typename R = decltype( F()(declval<T&>(), A()) )> + R f(A); + + template<typename A, + typename R = decltype( F()(declval<volatile T&>(), A()) )> + R f(A) volatile; +}; + +int main() +{ + Bind<F1, tuple>().f(0); // OK + Bind<F2, tuple>().f(0); // ERROR, should be OK +} diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae7.C b/gcc/testsuite/g++.dg/cpp0x/sfinae7.C new file mode 100644 index 00000000000..0a95a9644c7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae7.C @@ -0,0 +1,20 @@ +// { dg-options -std=c++0x } + +struct A +{ + void f(); + void f(int); + typedef int g; +}; + +template <class T> decltype (T::f) f(); +template <class T> void f(); + +template <class T> decltype (T::g) g(); +template <class T> void g(); + +int main() +{ + f<A>(); + g<A>(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae8.C b/gcc/testsuite/g++.dg/cpp0x/sfinae8.C new file mode 100644 index 00000000000..7f3012f94df --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae8.C @@ -0,0 +1,14 @@ +// PR c++/48449 +// { dg-options -std=c++0x } + +template<class T, class = decltype(T())> +char f(int); + +template<class> +char (&f(...))[2]; + +struct A { virtual ~A() = 0; }; + +static_assert(sizeof(f<int&>(0)) != 1, "Error"); +static_assert(sizeof(f<void()>(0)) != 1, "Error"); +static_assert(sizeof(f<A>(0)) != 1, "Error"); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae9.C b/gcc/testsuite/g++.dg/cpp0x/sfinae9.C new file mode 100644 index 00000000000..6f1de21d51d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae9.C @@ -0,0 +1,24 @@ +// PR c++/48450 +// { dg-options -std=c++0x } + +namespace std { + template <class T> T&& declval(); +}; + +template<class To, class From, + class = decltype(static_cast<To>(std::declval<From>())) +> +char f(int); + +template<class, class> +char (&f(...))[2]; + +struct A { virtual ~A() = 0; }; +struct B {}; +struct D : B {}; + +static_assert(sizeof(f<A, int>(0)) != 1, "Error"); // a +static_assert(sizeof(f<int*, const void*>(0)) != 1, "Error"); // b +static_assert(sizeof(f<D*, const B*>(0)) != 1, "Error"); // c +static_assert(sizeof(f<int B::*, const int D::*>(0)) != 1, "Error"); // d +static_assert(sizeof(f<B, void>(0)) != 1, "Error"); // e diff --git a/gcc/testsuite/g++.dg/cpp0x/union4.C b/gcc/testsuite/g++.dg/cpp0x/union4.C new file mode 100644 index 00000000000..07050475d36 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/union4.C @@ -0,0 +1,17 @@ +// PR c++/48537 +// { dg-options -std=c++0x } + +struct SFoo +{ + SFoo() =delete; // { dg-error "declared" } +}; + +union UFoo // { dg-error "deleted" } +{ + SFoo foo; +}; + +int main() +{ + UFoo(); // { dg-error "deleted" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic107.C b/gcc/testsuite/g++.dg/cpp0x/variadic107.C new file mode 100644 index 00000000000..5c3f468515d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic107.C @@ -0,0 +1,15 @@ +// PR c++/48451 +// { dg-options -std=c++0x } + +namespace std { + template <class T> T&& declval(); +} + +template<class T, class... Args, + class = decltype(T(std::declval<Args>()...)) + > +char f(int); + +struct From2Ints { From2Ints(int, int); }; + +static_assert(sizeof(f<From2Ints, int, int>(0)) == 1, "Error"); // b diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic108.C b/gcc/testsuite/g++.dg/cpp0x/variadic108.C new file mode 100644 index 00000000000..3ad5af45717 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic108.C @@ -0,0 +1,10 @@ +// PR c++/48736 +// { dg-options -std=c++0x } + +template<class T> +T&& create(); + +template<class T, class... Args, + class = decltype(T{create<Args>()...}) // Line X +> +char f(int); diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/icf.C b/gcc/testsuite/g++.dg/debug/dwarf2/icf.C index af2c112b654..ca73ab72479 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/icf.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/icf.C @@ -1,6 +1,5 @@ -// Test support for ICF debugging. // { dg-do compile } -// { dg-options "-O0 -gdwarf-2 -fenable-icf-debug -dA" } +// { dg-options "-O1 -gdwarf-2 -gno-strict-dwarf -fno-inline -dA" } class A { @@ -37,14 +36,3 @@ test2(A* a) b.work(a); } } - -// Verify that we get .debug_dcall and .debug_vcall tables generated -// and that we see entries for both virtual calls. -// { dg-final { scan-assembler "\\.section.*\.debug_dcall" } } -// { dg-final { scan-assembler "\\.section.*\.debug_vcall" } } -// { dg-final { scan-assembler "New caller" } } -// { dg-final { scan-assembler "Caller DIE offset" } } -// { dg-final { scan-assembler "Point of call" } } -// { dg-final { scan-assembler "Callee DIE offset" } } -// { dg-final { scan-assembler "0\[ \t\]+.*Vtable slot" } } -// { dg-final { scan-assembler "0x1\[ \t\]+.*Vtable slot" } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/typedef6.C b/gcc/testsuite/g++.dg/debug/dwarf2/typedef6.C new file mode 100644 index 00000000000..8896446a7ed --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/typedef6.C @@ -0,0 +1,30 @@ +// Origin PR debug/ +// { dg-options "-g -dA" } + +class C { +public: + C() {} + ~C() {} +}; +typedef struct { + C m; +} t; +typedef t s; +s v; + +/* + We want to check that we have a DIE describing the typedef t like this: + + .uleb128 0xc # (DIE (0xb8) DW_TAG_typedef) + .ascii "t\0" # DW_AT_name + .byte 0x1 # DW_AT_decl_file (../../prtests/test.cc) + .byte 0xb # DW_AT_decl_line + .long 0x78 # DW_AT_type + + e.g, it should not haven any child DIE -- the bug here was that this + DIE had children DIEs. So we check that the last line is immediately + followed by a line containing the pattern "(DIE (", instead of a + line containing a DW_AT_sibling attribute. + */ + +// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE \[^\n\r\]* DW_TAG_typedef\\)\[\n\r\]{1,2}\[^\n\r\].*\"t\\\\0\"\[^\n\r\]*DW_AT_name\[\n\r\]{1,2}\[^\n\r\]*\[\n\r\]{1,2}\[^\n\r\]*\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type\[\n\r\]{1,2}\[^\n\r\]*\\(DIE" 1 } } diff --git a/gcc/testsuite/g++.dg/ext/attrib32.C b/gcc/testsuite/g++.dg/ext/attrib32.C index 77f71ded89d..e4dfe4e9f67 100644 --- a/gcc/testsuite/g++.dg/ext/attrib32.C +++ b/gcc/testsuite/g++.dg/ext/attrib32.C @@ -10,10 +10,10 @@ void bar() foo(0); } -typedef union U1 { int i; } U2 __attribute__((transparent_union)); +typedef union U1 { int i; } U2 __attribute__((transparent_union)); // { dg-warning "ignored" } -static void foo2(U1) {} -static void foo2(U2) {} +static void foo2(U1) {} // { dg-error "previously defined" } +static void foo2(U2) {} // { dg-error "redefinition" } void bar2(U1 u1, U2 u2) { diff --git a/gcc/testsuite/g++.dg/ext/attrib41.C b/gcc/testsuite/g++.dg/ext/attrib41.C new file mode 100644 index 00000000000..368554a1b1d --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib41.C @@ -0,0 +1,19 @@ +// PR c++/45267 +// { dg-options "-O" } + +template<typename T> struct Vector { + Vector(long long x); + inline Vector<T> operator<<(int x) const __attribute__((always_inline)); +}; +long long bar (long long); +template<> inline Vector<int> Vector<int>::operator<<(int x) const { + return bar(x); +} +bool b; +int main() { + Vector<int> a(1); + if ((a << 2), b) { + a << 2; + throw 1; + } +} diff --git a/gcc/testsuite/g++.dg/ext/bitfield2.C b/gcc/testsuite/g++.dg/ext/bitfield2.C index 753492ce994..c288cec7c33 100644 --- a/gcc/testsuite/g++.dg/ext/bitfield2.C +++ b/gcc/testsuite/g++.dg/ext/bitfield2.C @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* Remove pedantic. Allow the GCC extension to use char for bitfields. */ /* { dg-options "" } */ -/* { dg-options "-mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target { i?86-*-netware i?86-*-mingw* x86_64-*-mingw* } } } */ struct t /* { dg-message "note: offset of packed bit-field 't::b' has changed in GCC 4.4" "" { target pcc_bitfield_type_matters } } */ { diff --git a/gcc/testsuite/g++.dg/ext/bitfield3.C b/gcc/testsuite/g++.dg/ext/bitfield3.C index 0a89bdab1ff..f9fb78cceee 100644 --- a/gcc/testsuite/g++.dg/ext/bitfield3.C +++ b/gcc/testsuite/g++.dg/ext/bitfield3.C @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-Wno-packed-bitfield-compat" } */ -/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target { i?86-*-netware i?86-*-mingw* x86_64-*-mingw* } } } */ struct t { diff --git a/gcc/testsuite/g++.dg/ext/bitfield4.C b/gcc/testsuite/g++.dg/ext/bitfield4.C index 7bf85533130..8562686d6eb 100644 --- a/gcc/testsuite/g++.dg/ext/bitfield4.C +++ b/gcc/testsuite/g++.dg/ext/bitfield4.C @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "" } */ -/* { dg-options "-mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target { i?86-*-netware i?86-*-mingw* x86_64-*-mingw* } } } */ struct t /* { dg-message "note: offset of packed bit-field 't::b' has changed in GCC 4.4" "" { target pcc_bitfield_type_matters } } */ { diff --git a/gcc/testsuite/g++.dg/ext/bitfield5.C b/gcc/testsuite/g++.dg/ext/bitfield5.C index cb24c65d723..1d862d76975 100644 --- a/gcc/testsuite/g++.dg/ext/bitfield5.C +++ b/gcc/testsuite/g++.dg/ext/bitfield5.C @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-Wno-packed-bitfield-compat" } */ -/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target { i?86-*-netware i?86-*-mingw* x86_64-*-mingw* } } } */ struct t { diff --git a/gcc/testsuite/g++.dg/ext/complex7.C b/gcc/testsuite/g++.dg/ext/complex7.C new file mode 100644 index 00000000000..9d5463f94dc --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/complex7.C @@ -0,0 +1,6 @@ +// { dg-options "" } + +class A +{ + static const _Complex double x = 1.0 + 2.0i; +}; diff --git a/gcc/testsuite/g++.dg/ext/complex8.C b/gcc/testsuite/g++.dg/ext/complex8.C new file mode 100644 index 00000000000..9b8ac1b186f --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/complex8.C @@ -0,0 +1,67 @@ +// PR libstdc++/48760 +// { dg-options -std=c++0x } +// { dg-do run } + +constexpr _Complex int i{1,2}; +constexpr _Complex int j{3}; + +#define SA(X) static_assert((X),#X) + +SA(__real i == 1); +SA(__imag i == 2); +SA(__real j == 3); +SA(__imag j == 0); + +struct A +{ + _Complex int c; + constexpr A(int i, int j): c{i,j} { } + constexpr A(int i): c{i} { } +}; + +constexpr A a1(1,2); +constexpr A a2(3); + +SA(__real a1.c == 1); +SA(__imag a1.c == 2); +SA(__real a2.c == 3); +SA(__imag a2.c == 0); + +typedef _Complex int ci; + +SA((__real ci{1,2} == 1)); +SA((__imag ci{1,2} == 2)); +SA((__real ci{3} == 3)); +SA((__imag ci{3} == 0)); + +struct B +{ + _Complex int c; + int i; +}; + +constexpr B b1 = { { 1,2 }, 42 }; +constexpr B b2 = { { 3 }, 24 }; +// No brace elision for complex. +constexpr B b3 = { 5, 6 }; + +SA(__real b1.c == 1); +SA(__imag b1.c == 2); +SA(b1.i == 42); +SA(__real b2.c == 3); +SA(__imag b2.c == 0); +SA(b2.i == 24); +SA(__real b3.c == 5); +SA(__imag b3.c == 0); +SA(b3.i == 6); + +int main() +{ + ci* p = new ci{1,2}; + if (__real *p != 1 || __imag *p != 2) + return 1; + delete p; + p = new ci{3}; + if (__real *p != 3 || __imag *p != 0) + return 1; +} diff --git a/gcc/testsuite/g++.dg/ext/complex9.C b/gcc/testsuite/g++.dg/ext/complex9.C new file mode 100644 index 00000000000..5bb1625c9fb --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/complex9.C @@ -0,0 +1,8 @@ +// PR c++/28501 + +struct A +{ + operator int(); +}; + +int i = __real__ A(); diff --git a/gcc/testsuite/g++.dg/ext/is_literal_type1.C b/gcc/testsuite/g++.dg/ext/is_literal_type1.C new file mode 100644 index 00000000000..21570d2d6ec --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_literal_type1.C @@ -0,0 +1,11 @@ +// PR c++/48771 +// { dg-do compile } +// { dg-options "-std=c++0x" } + +struct NonLiteral { + NonLiteral(); + ~NonLiteral(); +}; + +static_assert(__is_literal_type(NonLiteral&), "Error"); +static_assert(__is_literal_type(NonLiteral&&), "Error"); diff --git a/gcc/testsuite/g++.dg/ext/underlying_type1.C b/gcc/testsuite/g++.dg/ext/underlying_type1.C new file mode 100644 index 00000000000..a8f68d3d60a --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type1.C @@ -0,0 +1,18 @@ +// { dg-do compile } + +struct B { }; +union U { }; + +template<typename T> + struct underlying_type + { typedef __underlying_type(T) type; }; // { dg-error "not an enumeration" } + +__underlying_type(int) i1; // { dg-error "not an enumeration|invalid" } +__underlying_type(A) i2; // { dg-error "expected" } +__underlying_type(B) i3; // { dg-error "not an enumeration|invalid" } +__underlying_type(U) i4; // { dg-error "not an enumeration|invalid" } + +underlying_type<int>::type i5; +underlying_type<A>::type i6; // { dg-error "not declared|template|expected" } +underlying_type<B>::type i7; +underlying_type<U>::type i8; diff --git a/gcc/testsuite/g++.dg/ext/underlying_type10.C b/gcc/testsuite/g++.dg/ext/underlying_type10.C new file mode 100644 index 00000000000..cb57407fe88 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type10.C @@ -0,0 +1,32 @@ +// { dg-do run } +// { dg-options "-std=c++0x" } + +#include <cassert> + +enum E1 : unsigned { E1_en = 1 }; +enum E2 : char { E2_en = 1 }; +enum class E3 { a = -1 }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +template<typename T> + struct underlying_type + { typedef __underlying_type(T) type; }; + +template<typename T> + void + test(T t, typename underlying_type<T>::type v) + { + assert( t == T(v) ); + } + +int main() +{ + test(E1::E1_en, 1); + test(E2::E2_en, 1); + test(E3::a, -1); + test(E4::c, 1); + test(E5::a, -1); + test(E6::c, __LONG_MAX__); +} diff --git a/gcc/testsuite/g++.dg/ext/underlying_type2.C b/gcc/testsuite/g++.dg/ext/underlying_type2.C new file mode 100644 index 00000000000..0e4519876d2 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type2.C @@ -0,0 +1,9 @@ +// { dg-do compile } + +enum E1 { }; +enum E2 { a = -1, b = 1 }; +enum E3 { c = __LONG_MAX__ }; + +__underlying_type(E1) e1 = 0; +__underlying_type(E2) e2 = b; +__underlying_type(E3) e3 = __LONG_MAX__; diff --git a/gcc/testsuite/g++.dg/ext/underlying_type3.C b/gcc/testsuite/g++.dg/ext/underlying_type3.C new file mode 100644 index 00000000000..b78cc7dd3f6 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type3.C @@ -0,0 +1,33 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +template<typename T1, typename T2> + struct is_same + { static const bool value = false; }; + +template<typename T> + struct is_same<T, T> + { static const bool value = true; }; + +enum E1 : unsigned { }; +enum E2 : char { }; +enum class E3 { }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +__underlying_type(E1) i1 = __INT_MAX__ * 2U + 1; +__underlying_type(E2) i2 = (char(-1) < 0 + ? __SCHAR_MAX__ + : __SCHAR_MAX__ * 2U + 1); +__underlying_type(E3) i3 = __INT_MAX__; +__underlying_type(E4) i4 = __SCHAR_MAX__ * 2U + 1; +__underlying_type(E5) i5 = int(E5::b); +__underlying_type(E6) i6 = __LONG_MAX__; + +static_assert(is_same<__underlying_type(E1), unsigned>::value, "Error"); +static_assert(is_same<__underlying_type(E2), char>::value, "Error"); +static_assert(is_same<__underlying_type(E3), int>::value, "Error"); +static_assert(is_same<__underlying_type(E4), unsigned char>::value, "Error"); +static_assert(is_same<__underlying_type(E5), int>::value, "Error"); +static_assert(is_same<__underlying_type(E6), long>::value, "Error"); diff --git a/gcc/testsuite/g++.dg/ext/underlying_type4.C b/gcc/testsuite/g++.dg/ext/underlying_type4.C new file mode 100644 index 00000000000..b80ed57694b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type4.C @@ -0,0 +1,25 @@ +// { dg-do compile } + +#include <tr1/type_traits> + +using namespace std::tr1; + +enum E1 { }; +enum E2 { a = -1, b = 1 }; +enum E3 { c = __LONG_MAX__ }; + +typedef __underlying_type(E1) UTE1; +typedef __underlying_type(E2) UTE2; +typedef __underlying_type(E3) UTE3; + +template<typename T> + struct underlying_type + { typedef __underlying_type(T) type; }; + +int test1[is_same<underlying_type<E1>::type, UTE1>::value ? 1 : -1]; +int test2[is_same<underlying_type<E2>::type, UTE2>::value ? 1 : -1]; +int test3[is_same<underlying_type<E3>::type, UTE3>::value ? 1 : -1]; + +int test4[is_integral<underlying_type<E1>::type>::value ? 1 : -1]; +int test5[is_integral<underlying_type<E2>::type>::value ? 1 : -1]; +int test6[is_integral<underlying_type<E3>::type>::value ? 1 : -1]; diff --git a/gcc/testsuite/g++.dg/ext/underlying_type5.C b/gcc/testsuite/g++.dg/ext/underlying_type5.C new file mode 100644 index 00000000000..a9c19924b95 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type5.C @@ -0,0 +1,43 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +template<typename T1, typename T2> + struct is_same + { static const bool value = false; }; + +template<typename T> + struct is_same<T, T> + { static const bool value = true; }; + +enum E1 : unsigned { }; +enum E2 : char { }; +enum class E3 { }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +typedef __underlying_type(E1) UTE1; +typedef __underlying_type(E2) UTE2; +typedef __underlying_type(E3) UTE3; +typedef __underlying_type(E4) UTE4; +typedef __underlying_type(E5) UTE5; +typedef __underlying_type(E6) UTE6; + +template<typename T> + struct underlying_type + { typedef __underlying_type(T) type; }; + +static_assert(is_same<underlying_type<E1>::type, UTE1>::value, "Error"); +static_assert(is_same<underlying_type<E2>::type, UTE2>::value, "Error"); +static_assert(is_same<underlying_type<E3>::type, UTE3>::value, "Error"); +static_assert(is_same<underlying_type<E4>::type, UTE4>::value, "Error"); +static_assert(is_same<underlying_type<E5>::type, UTE5>::value, "Error"); +static_assert(is_same<underlying_type<E6>::type, UTE6>::value, "Error"); + +static_assert(is_same<underlying_type<E1>::type, unsigned>::value, "Error"); +static_assert(is_same<underlying_type<E2>::type, char>::value, "Error"); +static_assert(is_same<underlying_type<E3>::type, int>::value, "Error"); +static_assert(is_same<underlying_type<E4>::type, + unsigned char>::value, "Error"); +static_assert(is_same<underlying_type<E5>::type, int>::value, "Error"); +static_assert(is_same<underlying_type<E6>::type, long>::value, "Error"); diff --git a/gcc/testsuite/g++.dg/ext/underlying_type6.C b/gcc/testsuite/g++.dg/ext/underlying_type6.C new file mode 100644 index 00000000000..50f528856d7 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type6.C @@ -0,0 +1,31 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +template<typename T1, typename T2> + struct is_same + { static const bool value = false; }; + +template<typename T> + struct is_same<T, T> + { static const bool value = true; }; + +enum E1 : unsigned { }; +enum E2 : char { }; +enum class E3 { }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +template<typename T, typename U, + typename V = __underlying_type(T)> + struct test + { + static_assert(is_same<U, V>::value, "Error"); + }; + +template class test<E1, unsigned>; +template class test<E2, char>; +template class test<E3, int>; +template class test<E4, unsigned char>; +template class test<E5, int>; +template class test<E6, long>; diff --git a/gcc/testsuite/g++.dg/ext/underlying_type7.C b/gcc/testsuite/g++.dg/ext/underlying_type7.C new file mode 100644 index 00000000000..872fe52b00e --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type7.C @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +enum E1 : unsigned { E1_en = 1 }; +enum E2 : char { E2_en = 1 }; +enum class E3 { a = -1 }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +template<typename T> + void + test(T, __underlying_type(T)) // { dg-message "sorry, unimplemented: mangling" } + { } + +int main() +{ + test(E1::E1_en, 1); + test(E2::E2_en, 1); + test(E3::a, -1); + test(E4::c, 1); + test(E5::a, -1); + test(E6::c, __LONG_MAX__); +} diff --git a/gcc/testsuite/g++.dg/ext/underlying_type8.C b/gcc/testsuite/g++.dg/ext/underlying_type8.C new file mode 100644 index 00000000000..0bbed2b489c --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type8.C @@ -0,0 +1,46 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +enum E1 : unsigned { E1_en = 1 }; +enum E2 : char { E2_en = 1 }; +enum class E3 { a = -1 }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +template<typename T1, typename T2> + struct is_same + { static const bool value = false; }; + +template<typename T> + struct is_same<T, T> + { static const bool value = true; }; + +template<typename> + struct underlying_type; + +template<typename T, typename U> + void + test(T, U, typename underlying_type<T>::type); + +template<typename T> + struct underlying_type + { typedef __underlying_type(T) type; }; + +template<typename T, typename U> + void + test(T, U, typename underlying_type<T>::type) + { + static_assert(is_same<typename underlying_type<T>::type, U>::value, + "Error"); + } + +int main() +{ + test(E1::E1_en, unsigned(), 1); + test(E2::E2_en, char(), 1); + test(E3::a, int(), -1); + test(E4::c, (unsigned char)(1), 1); + test(E5::a, int(), -1); + test(E6::c, long(), __LONG_MAX__); +} diff --git a/gcc/testsuite/g++.dg/ext/underlying_type9.C b/gcc/testsuite/g++.dg/ext/underlying_type9.C new file mode 100644 index 00000000000..9ffd24439a4 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/underlying_type9.C @@ -0,0 +1,30 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +template<typename T1, typename T2> + struct is_same + { static const bool value = false; }; + +template<typename T> + struct is_same<T, T> + { static const bool value = true; }; + +enum E1 : unsigned { }; +enum E2 : char { }; +enum class E3 { }; +enum class E4 : unsigned char { c = 1 }; +enum class E5 : int { a = -1, b = 1 }; +enum class E6 : long { c = __LONG_MAX__ }; + +template<typename T, typename U> + struct test + { + static_assert(is_same<T, U>::value, "Error"); + }; + +test<__underlying_type(E1), unsigned> t1; +test<__underlying_type(E2), char> t2; +test<__underlying_type(E3), int> t3; +test<__underlying_type(E4), unsigned char> t4; +test<__underlying_type(E5), int> t5; +test<__underlying_type(E6), long> t6; diff --git a/gcc/testsuite/g++.dg/ext/vla10.C b/gcc/testsuite/g++.dg/ext/vla10.C new file mode 100644 index 00000000000..17cdb2f9f76 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/vla10.C @@ -0,0 +1,32 @@ +// PR c++/48446 +// { dg-options "" } + +template<typename T> +struct A +{ + ~A (); + T *operator-> () const; +}; + +struct B +{ + typedef A <B> P; + static P foo (int); +}; + +struct C +{ + typedef A<C> P; + static const int c = 80; +}; + +C::P bar (); + +void +baz () +{ + char z[bar ()->c]; + { + B::P m = B::foo (sizeof (z)); + } +} diff --git a/gcc/testsuite/g++.dg/gomp/pr48632.C b/gcc/testsuite/g++.dg/gomp/pr48632.C new file mode 100644 index 00000000000..afa8b189336 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr48632.C @@ -0,0 +1,22 @@ +// PR c++/48632 +// { dg-do compile } +// { dg-options "-fopenmp" } + +template<typename T> +void +foo (T *x, T *y, unsigned z) +{ +#pragma omp parallel for + for (T *p = x; p < y; p += z) + ; +#pragma omp parallel for + for (T *p = y; p > x; p -= z) + ; +} + +int +main () +{ + char buf[10]; + foo (&buf[0], &buf[9], 1); +} diff --git a/gcc/testsuite/g++.dg/gomp/pr48716.C b/gcc/testsuite/g++.dg/gomp/pr48716.C new file mode 100644 index 00000000000..2dccad2d90a --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr48716.C @@ -0,0 +1,24 @@ +// PR c/48716 +// { dg-do compile } +// { dg-options "-fopenmp" } + +int +main (void) +{ + #pragma omp parallel default(none) + { + static int s; + int t = 0; + #pragma omp atomic + s++; + t++; + } + #pragma omp task default(none) + { + static int s; + int t = 0; + #pragma omp atomic + s++; + t++; + } +} diff --git a/gcc/testsuite/g++.dg/guality/guality.exp b/gcc/testsuite/g++.dg/guality/guality.exp index 9a1785036ef..749691dab7e 100644 --- a/gcc/testsuite/g++.dg/guality/guality.exp +++ b/gcc/testsuite/g++.dg/guality/guality.exp @@ -4,7 +4,8 @@ load_lib g++-dg.exp load_lib gcc-gdb-test.exp # Disable on darwin until radr://7264615 is resolved. -if { [istarget *-*-darwin*] } { +# Disable on Tru64 UNIX (PR testsuite/48251). +if { [istarget *-*-darwin*] || [istarget alpha*-dec-osf*] } { return } diff --git a/gcc/testsuite/g++.dg/inherit/pr48798.C b/gcc/testsuite/g++.dg/inherit/pr48798.C new file mode 100644 index 00000000000..cc9921e69b8 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/pr48798.C @@ -0,0 +1,4 @@ +// PR c++/48798 + +typedef struct A {} const t; +struct B : t {}; diff --git a/gcc/testsuite/g++.dg/inherit/virtual9.C b/gcc/testsuite/g++.dg/inherit/virtual9.C new file mode 100644 index 00000000000..83e04790873 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/virtual9.C @@ -0,0 +1,60 @@ +// { dg-do compile } +struct B +{ + virtual void f() final {} + virtual void g() {} + virtual void x() const {} +}; + +struct B2 +{ + virtual void h() {} +}; + +struct D : B +{ + virtual void g() override final {} // { dg-error "overriding" } +}; + +template <class T> struct D2 : T +{ + void h() override {} // { dg-error "marked override, but does not override" } +}; + +template <class T> struct D3 : T +{ + void h() override {} +}; + +struct D4 : D +{ + void g() {} // { dg-error "virtual function" } +}; + +struct B3 +{ + virtual void f() final final {} // { dg-error "duplicate virt-specifier" } +}; + +struct B4 +{ + void f() final {} // { dg-error "marked final, but is not virtual" } +}; + +struct D5 : B +{ + void ff() override {} // { dg-error "marked override, but does not override" } + virtual void fff() override {} // { dg-error "marked override, but does not override" } + virtual void x() override {} // { dg-error "marked override, but does not override" } + void g() override; +}; + +void D5::g() override {} // { dg-error "not allowed outside a class definition" } +void g() override {} // { dg-error "not allowed outside a class definition" } + +int main() +{ + D2<B> d; + D2<B2> d2; + D3<B2> d3; +} diff --git a/gcc/testsuite/g++.dg/init/ctor10.C b/gcc/testsuite/g++.dg/init/ctor10.C new file mode 100644 index 00000000000..91cc2501209 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/ctor10.C @@ -0,0 +1,9 @@ +// PR c++/48606 +// { dg-do compile } +// { dg-options "-fkeep-inline-functions" } + +struct S +{ + int &ref; + S() : ref() {}; // { dg-error "value-initialization of" } +}; diff --git a/gcc/testsuite/g++.dg/init/dtor4.C b/gcc/testsuite/g++.dg/init/dtor4.C new file mode 100644 index 00000000000..4bca69e4a80 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/dtor4.C @@ -0,0 +1,9 @@ +// { dg-final { scan-assembler-not "_ZN1AD2Ev" } } + +struct A { }; + +int main() +{ + A a; + a.~A(); +} diff --git a/gcc/testsuite/g++.dg/init/new30.C b/gcc/testsuite/g++.dg/init/new30.C new file mode 100644 index 00000000000..24582d8fb1c --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new30.C @@ -0,0 +1,15 @@ +// PR c++/40975 + +struct data_type +{ + // constructor required to reproduce compiler bug + data_type() {} +}; + +struct ptr_type +{ + // array new as default argument required to reproduce compiler bug + ptr_type (data_type* ptr = new data_type[1]) { delete[] ptr; } +}; + +ptr_type obj; diff --git a/gcc/testsuite/g++.dg/init/new31.C b/gcc/testsuite/g++.dg/init/new31.C new file mode 100644 index 00000000000..33c94aaabaa --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new31.C @@ -0,0 +1,18 @@ +// PR c++/48834 +// { dg-options -Wuninitialized } +// { dg-do run } + +struct S +{ + S ():i (0) + { + } + int i; +}; + +int +main () +{ + S *s = new S[2]; + return 0; +} diff --git a/gcc/testsuite/g++.dg/init/new32.C b/gcc/testsuite/g++.dg/init/new32.C new file mode 100644 index 00000000000..f82785749ce --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new32.C @@ -0,0 +1,16 @@ +// PR c++/48873 + +#include <new> + +struct D { +private: + ~D(); +}; + +template<class T> +T& create(); + +void f() +{ + D* dp = new (((void*) 0)) D(create<D>()); // # +} diff --git a/gcc/testsuite/g++.dg/init/pr20039.C b/gcc/testsuite/g++.dg/init/pr20039.C new file mode 100644 index 00000000000..9b0c12d6ea3 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/pr20039.C @@ -0,0 +1,19 @@ +// PR c++/20039 +// { dg-do compile } + +struct M +{ + M() : m(0) { } + int m; +}; + +struct X +{ + M m; +}; + +int mymain() +{ + const X *p = new const X[2]; // { dg-error "uninitialized const" } + return 0; +} diff --git a/gcc/testsuite/g++.dg/init/pr48859.C b/gcc/testsuite/g++.dg/init/pr48859.C new file mode 100644 index 00000000000..8ef5c2ee4a4 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/pr48859.C @@ -0,0 +1,14 @@ +// PR c++/48859 +// { dg-do compile } + +struct HasConstructor { + HasConstructor() {} +}; + +class ConstMember { + const HasConstructor empty_; +}; + +void foo() { + new ConstMember; +} diff --git a/gcc/testsuite/g++.dg/init/void1.C b/gcc/testsuite/g++.dg/init/void1.C new file mode 100644 index 00000000000..ed41a90dea3 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/void1.C @@ -0,0 +1,6 @@ +// PR c++/48569 + +int main() +{ + void(); +} diff --git a/gcc/testsuite/g++.dg/ipa/devirt-7.C b/gcc/testsuite/g++.dg/ipa/devirt-7.C new file mode 100644 index 00000000000..ac147b57599 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/devirt-7.C @@ -0,0 +1,87 @@ +/* Verify that IPA-CP can do devirtualization even if the virtual call + comes from a method that has been early-inlined into a descendant. */ +/* { dg-do run } */ +/* { dg-options "-O3 -fdump-ipa-cp" } */ + +extern "C" void abort (void); + +class Distraction +{ +public: + float f; + double d; + Distraction () + { + f = 8.3; + d = 10.2; + } + virtual float bar (float z); +}; + +class A +{ +public: + int data; + virtual int foo (int i); + int middleman_1 (int i); +}; + + +class B : public Distraction, public A +{ +public: + virtual int foo (int i); + int middleman_2 (int i); + __attribute__ ((noinline)) B(); +}; + +float Distraction::bar (float z) +{ + f += z; + return f/2; +} + +int A::foo (int i) +{ + return i + 1; +} + +int B::foo (int i) +{ + return i + 2; +} + +int __attribute__ ((noinline,noclone)) get_input(void) +{ + return 1; +} + +int __attribute__ ((always_inline)) +A::middleman_1 (int i) +{ + return this->foo (i); +} + +int __attribute__ ((noinline)) +B::middleman_2 (int i) +{ + return this->middleman_1 (i); +} + +B::B () +{ +} + +int main (int argc, char *argv[]) +{ + class B b; + int i; + + for (i = 0; i < get_input(); i++) + if (b.middleman_2 (get_input ()) != 3) + abort (); + return 0; +} + +/* { dg-final { scan-ipa-dump "Discovered a virtual call to a known target.*B::foo" "cp" } } */ +/* { dg-final { cleanup-ipa-dump "cp" } } */ diff --git a/gcc/testsuite/g++.dg/ipa/devirt-g-1.C b/gcc/testsuite/g++.dg/ipa/devirt-g-1.C new file mode 100644 index 00000000000..175f24efbbd --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/devirt-g-1.C @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized" } + +struct S { S(); virtual void xyzzy(); void otherstuff(); }; +struct R { int a; S s; R(); }; +S s; +R r; + +void S::xyzzy () +{ + otherstuff (); + otherstuff (); +} + +static void __attribute__ ((noinline)) foo(S *p) { p->xyzzy(); } +void bar() {foo(&s); } + +static void __attribute__ ((noinline)) foh(S *p) { p->xyzzy(); } +void bah() {foh(&r.s); } + +/* { dg-final { scan-ipa-dump "Discovered a virtual call to a known target.*S::xyzzy" "cp" } } */ +/* { dg-final { scan-tree-dump-times "OBJ_TYPE_REF" 0 "optimized"} } */ +/* { dg-final { cleanup-ipa-dump "cp" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/g++.dg/lookup/koenig13.C b/gcc/testsuite/g++.dg/lookup/koenig13.C new file mode 100644 index 00000000000..625a181f621 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/koenig13.C @@ -0,0 +1,16 @@ +// PR c++/42687 +// DR 705 + +namespace N +{ + struct S { }; + void f(const S &) { } +} + +void f(const N::S &) { } + +int main() +{ + N::S v; + (f)(v); // no ambiguity: ADL is prevented with (), only ::f is considered +} diff --git a/gcc/testsuite/g++.dg/lto/20081109-1_0.C b/gcc/testsuite/g++.dg/lto/20081109-1_0.C index 474ceba79c9..711533600ed 100644 --- a/gcc/testsuite/g++.dg/lto/20081109-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081109-1_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -flto -flto-partition=1to1}} } // { dg-extra-ld-options "-fPIC -flto -flto-partition=1to1 -r -nostdlib -fno-exceptions" } void func(); class Foo { }; diff --git a/gcc/testsuite/g++.dg/lto/20081118_0.C b/gcc/testsuite/g++.dg/lto/20081118_0.C index f11c76b67f5..7be32b6e2a7 100644 --- a/gcc/testsuite/g++.dg/lto/20081118_0.C +++ b/gcc/testsuite/g++.dg/lto/20081118_0.C @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ /* We used to ICE because of dangling pointers. */ diff --git a/gcc/testsuite/g++.dg/lto/20081119-1_0.C b/gcc/testsuite/g++.dg/lto/20081119-1_0.C index a2d5bd320a8..ca1455e49e7 100644 --- a/gcc/testsuite/g++.dg/lto/20081119-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081119-1_0.C @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ #include "20081119-1.h" diff --git a/gcc/testsuite/g++.dg/lto/20081123_0.C b/gcc/testsuite/g++.dg/lto/20081123_0.C index 8817be8f0a9..4cbc25338dd 100644 --- a/gcc/testsuite/g++.dg/lto/20081123_0.C +++ b/gcc/testsuite/g++.dg/lto/20081123_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib -fPIC}} } int diff --git a/gcc/testsuite/g++.dg/lto/20081204-1_0.C b/gcc/testsuite/g++.dg/lto/20081204-1_0.C index 0d24878897f..b87006a6bad 100644 --- a/gcc/testsuite/g++.dg/lto/20081204-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081204-1_0.C @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */ /* Tests for the absence during linking of: diff --git a/gcc/testsuite/g++.dg/lto/20081219_0.C b/gcc/testsuite/g++.dg/lto/20081219_0.C index 432a60c45f2..8f2c2e07edd 100644 --- a/gcc/testsuite/g++.dg/lto/20081219_0.C +++ b/gcc/testsuite/g++.dg/lto/20081219_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -O2}} } // { dg-extra-ld-options "-O2 -fPIC -flto -flto-partition=1to1 -r -nostdlib" } diff --git a/gcc/testsuite/g++.dg/lto/20090302_0.C b/gcc/testsuite/g++.dg/lto/20090302_0.C index 76de7baf0fa..d65d490d3e5 100644 --- a/gcc/testsuite/g++.dg/lto/20090302_0.C +++ b/gcc/testsuite/g++.dg/lto/20090302_0.C @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ struct Foo { bool Mumble(); diff --git a/gcc/testsuite/g++.dg/lto/20090313_0.C b/gcc/testsuite/g++.dg/lto/20090313_0.C index 70029e65105..cba9d054fcb 100644 --- a/gcc/testsuite/g++.dg/lto/20090313_0.C +++ b/gcc/testsuite/g++.dg/lto/20090313_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-flto -flto-partition=1to1 -fPIC}} } // { dg-extra-ld-options "-flto -flto-partition=1to1 -r -nostdlib" } diff --git a/gcc/testsuite/g++.dg/lto/20091002-1_0.C b/gcc/testsuite/g++.dg/lto/20091002-1_0.C index 050211ac355..c63b079d77b 100644 --- a/gcc/testsuite/g++.dg/lto/20091002-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20091002-1_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -flto}} } // { dg-extra-ld-options "-fPIC -r -nostdlib" } diff --git a/gcc/testsuite/g++.dg/lto/20091002-2_0.C b/gcc/testsuite/g++.dg/lto/20091002-2_0.C index c150e977d14..bf936bf53a3 100644 --- a/gcc/testsuite/g++.dg/lto/20091002-2_0.C +++ b/gcc/testsuite/g++.dg/lto/20091002-2_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC}} } // { dg-extra-ld-options "-fPIC -r -nostdlib" } diff --git a/gcc/testsuite/g++.dg/lto/20091002-3_0.C b/gcc/testsuite/g++.dg/lto/20091002-3_0.C index 3c77f4b596f..4bff78b4937 100644 --- a/gcc/testsuite/g++.dg/lto/20091002-3_0.C +++ b/gcc/testsuite/g++.dg/lto/20091002-3_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC}} } // { dg-extra-ld-options "-fPIC -r -nostdlib" } diff --git a/gcc/testsuite/g++.dg/lto/20091004-1_0.C b/gcc/testsuite/g++.dg/lto/20091004-1_0.C index d65cf29fff1..649e35cb80d 100644 --- a/gcc/testsuite/g++.dg/lto/20091004-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20091004-1_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -O -flto}} } typedef double Real; diff --git a/gcc/testsuite/g++.dg/lto/20091004-2_0.C b/gcc/testsuite/g++.dg/lto/20091004-2_0.C index 321e50bc28d..cc1204e6f7e 100644 --- a/gcc/testsuite/g++.dg/lto/20091004-2_0.C +++ b/gcc/testsuite/g++.dg/lto/20091004-2_0.C @@ -1,4 +1,5 @@ // { dg-lto-do link } +// { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -O -flto}} } typedef double Real; diff --git a/gcc/testsuite/g++.dg/lto/pr48207-2_0.C b/gcc/testsuite/g++.dg/lto/pr48207-2_0.C new file mode 100644 index 00000000000..6801b85a862 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr48207-2_0.C @@ -0,0 +1,10 @@ +// { dg-lto-do link } +// { dg-lto-options { { -flto -g } } } + +namespace { + typedef struct { + int x; + } Foo; +} + +int main () {} diff --git a/gcc/testsuite/g++.dg/lto/pr48207-3_0.C b/gcc/testsuite/g++.dg/lto/pr48207-3_0.C new file mode 100644 index 00000000000..ef02dda8400 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr48207-3_0.C @@ -0,0 +1,12 @@ +// { dg-lto-do link } +// { dg-lto-options { { -flto -g } } } + +void bar(void) {} + +void foo(void) +{ + typedef enum { ABC } DEF; + bar(); +} + +int main () {} diff --git a/gcc/testsuite/g++.dg/lto/pr48207_0.C b/gcc/testsuite/g++.dg/lto/pr48207_0.C new file mode 100644 index 00000000000..e66cb491b49 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr48207_0.C @@ -0,0 +1,13 @@ +// { dg-lto-do link } +// { dg-lto-options { { -flto -g } } } + +void bar(int) {} + +void foo(void) +{ + typedef enum { ABC } DEF; + DEF a; + bar((int)a); +} + +int main() {} diff --git a/gcc/testsuite/g++.dg/opt/devirt1.C b/gcc/testsuite/g++.dg/opt/devirt1.C index 0a825c2a590..f9b4dc2fc31 100644 --- a/gcc/testsuite/g++.dg/opt/devirt1.C +++ b/gcc/testsuite/g++.dg/opt/devirt1.C @@ -1,6 +1,6 @@ // { dg-do compile } -// { dg-options "-O" } -// { dg-final { scan-assembler "xyzzy" { xfail *-*-* } } } +// { dg-options "-O2" } +// { dg-final { scan-assembler "xyzzy" } } struct S { S(); virtual void xyzzy(); }; inline void foo(S *s) { s->xyzzy(); } diff --git a/gcc/testsuite/g++.dg/opt/devirt2.C b/gcc/testsuite/g++.dg/opt/devirt2.C new file mode 100644 index 00000000000..087dd179115 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/devirt2.C @@ -0,0 +1,11 @@ +// { dg-do compile } +// { dg-options "-O2" } +// { dg-final { scan-assembler-times "xyzzy" 2 } } + +struct S { S(); virtual void xyzzy(); }; +struct R { int a; S s; R(); }; +S s; +R r; +inline void foo(S *p) { p->xyzzy(); } +void bar() {foo(&s);} +void bah() {foo(&r.s);} diff --git a/gcc/testsuite/g++.dg/opt/pr23372.C b/gcc/testsuite/g++.dg/opt/pr23372.C new file mode 100644 index 00000000000..9be4c9c568d --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr23372.C @@ -0,0 +1,15 @@ +// PR c++/23372 +// { dg-options -fdump-tree-gimple } + +// There shouldn't be an assignment to a temporary in the GIMPLE, +// as that represents a redundant copy. +// { dg-final { scan-tree-dump-not "=" gimple } } + +struct A { + int a[1000]; + //A(A const &); +}; +void f(A); +void g(A *a) { f(*a); } + +// { dg-final { cleanup-tree-dump gimple } } diff --git a/gcc/testsuite/g++.dg/opt/pr48272.C b/gcc/testsuite/g++.dg/opt/pr48272.C new file mode 100644 index 00000000000..cb28a1bb4e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr48272.C @@ -0,0 +1,130 @@ +// { dg-do compile } +// { dg-options "-O3 -ftracer -fsched-pressure -Wno-unused-parameter -Wno-return-type" } + +extern "C" +{ + namespace std + { + class exception + { + virtual const char *what () const throw (); + }; + } +} +namespace std __attribute__ ((__visibility__ ("default"))) +{ + template < typename _Alloc > class allocator; + template < class _CharT > struct char_traits; + template < typename _CharT, typename _Traits = + char_traits < _CharT >, typename _Alloc = + allocator < _CharT > >class basic_string; + typedef basic_string < char >string; + template < typename _CharT, typename _Traits = + char_traits < _CharT > >class basic_ios; + typedef basic_ios < char >ios; +} + +namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) +{ + template < typename _Tp > class new_allocator + { + }; +} + +namespace std __attribute__ ((__visibility__ ("default"))) +{ +template < typename _Tp > class allocator:public __gnu_cxx::new_allocator < + _Tp > + { + }; +} + +typedef int _Atomic_word; +namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) +{ + static inline _Atomic_word + __attribute__ ((__unused__)) __exchange_and_add_dispatch (_Atomic_word * + __mem, + int __val) + { + } +} + +namespace std __attribute__ ((__visibility__ ("default"))) +{ + template < typename _CharT, typename _Traits, + typename _Alloc > class basic_string + { + typedef _Alloc allocator_type; + private:struct _Rep_base + { + _Atomic_word _M_refcount; + }; + struct _Rep:_Rep_base + { + void _M_dispose (const _Alloc & __a) + { + if (__builtin_expect (this != &_S_empty_rep (), false)) + { + if (__gnu_cxx:: + __exchange_and_add_dispatch (&this->_M_refcount, -1) <= 0) + { + _M_destroy (__a); + } + } + } + void _M_destroy (const _Alloc &) throw (); + }; + struct _Alloc_hider:_Alloc + { + _CharT *_M_p; + }; + private:mutable _Alloc_hider _M_dataplus; + _CharT *_M_data () const + { + return _M_dataplus._M_p; + } + _Rep *_M_rep () const + { + return &((reinterpret_cast < _Rep * >(_M_data ()))[-1]); + } + static _Rep & _S_empty_rep () + { + } + public: basic_string ():_M_dataplus (_S_empty_rep ()._M_refdata (), + _Alloc ()) + { + } + basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ()); + ~basic_string () + { + _M_rep ()->_M_dispose (this->get_allocator ()); + } + allocator_type get_allocator () const + { + } + }; + class ios_base + { + public:class failure:public exception + { + public:explicit failure (const string & __str) throw (); + }; + }; +template < typename _CharT, typename _Traits > class basic_ios:public + ios_base + { + }; + namespace iostreams + { + class zlib_error:public std::ios::failure + { + public:explicit zlib_error (int error); + private:int error_; + }; + zlib_error::zlib_error (int error):std::ios::failure ("zlib error"), + error_ (error) + { + } + } +} diff --git a/gcc/testsuite/g++.dg/opt/pr48273.C b/gcc/testsuite/g++.dg/opt/pr48273.C new file mode 100644 index 00000000000..4c5108bdd26 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr48273.C @@ -0,0 +1,10 @@ +// { dg-do compile { target x86_64-*-* } } +// { dg-options "-fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2 -funroll-all-loops -march=core2" } + +void bar (); + +void foo () +{ + for (;;) + bar (); +} diff --git a/gcc/testsuite/g++.dg/opt/pr48302.C b/gcc/testsuite/g++.dg/opt/pr48302.C new file mode 100644 index 00000000000..fd51ba412e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr48302.C @@ -0,0 +1,21 @@ +// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } +// { dg-options "-O -fcrossjumping -fgcse -fschedule-insns2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fselective-scheduling2 --param lim-expensive=320 --param min-crossjump-insns=1" } + +struct S +{ + int i, j; + S *s; + ~S(); +}; + +S *gs; + +void foo () +{ +restart: + for (S *s = gs; s; s = s->s) + if (s->j && s->j != (s->i & 1)) { + delete s; + goto restart; + } +} diff --git a/gcc/testsuite/g++.dg/opt/pr48549.C b/gcc/testsuite/g++.dg/opt/pr48549.C new file mode 100644 index 00000000000..30799ee93f2 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr48549.C @@ -0,0 +1,63 @@ +// PR rtl-optimization/48549 +// { dg-do compile } +// { dg-options "-fcompare-debug -O2" } + +void +foo (void *from, void *to) +{ + long offset = reinterpret_cast <long>(to) - reinterpret_cast <long>(from); + if (offset != static_cast <int>(offset)) + *(int *) 0xC0DE = 0; + reinterpret_cast <int *>(from)[1] = offset; +} +struct A +{ + A () : a () {} + A (void *x) : a (x) {} + void *bar () { return a; } + void *a; +}; +struct C; +struct D; +struct E : public A +{ + C m1 (int); + D m2 (); + E () {} + E (A x) : A (x) {} +}; +struct C : public E +{ + C () {} + C (void *x) : E (x) {} +}; +struct D : public E +{ + D (void *x) : E (x) {} +}; +C +E::m1 (int x) +{ + return (reinterpret_cast <char *>(bar ()) + x); +} +D +E::m2 () +{ + return reinterpret_cast <char *>(bar ()); +} +struct B +{ + E a; + unsigned b : 16; + unsigned c : 1; +}; +void +baz (B *x) +{ + for (unsigned i = 0; i < 64; i++) + { + D d = x[i].a.m2 (); + C c = x[i].a.m1 (x[i].c); + foo (d.bar (), c.bar ()); + } +} diff --git a/gcc/testsuite/g++.dg/other/i386-9.C b/gcc/testsuite/g++.dg/other/i386-9.C new file mode 100644 index 00000000000..79640579142 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/i386-9.C @@ -0,0 +1,12 @@ +// PR target/48142 +// Testcase by Zdenek Sojka <zsojka@seznam.cz> + +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-Os -mpreferred-stack-boundary=5 -fstack-check -fno-omit-frame-pointer" } + +int main() +{ + try { throw 0; } + catch (...) {} + return 0; +} diff --git a/gcc/testsuite/g++.dg/overload/volatile1.C b/gcc/testsuite/g++.dg/overload/volatile1.C new file mode 100644 index 00000000000..baf467d8182 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/volatile1.C @@ -0,0 +1,14 @@ +// PR c++/48118 +// { dg-prune-output "note" } + +struct A { }; + +void f (A); // { dg-error "argument 1" } +void (*g)(A); + +int main() +{ + volatile A a; + f(a); // { dg-error "no match" } + g(a); // { dg-error "no match" } +} diff --git a/gcc/testsuite/g++.dg/parse/ambig6.C b/gcc/testsuite/g++.dg/parse/ambig6.C new file mode 100644 index 00000000000..8f37feaea68 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/ambig6.C @@ -0,0 +1,12 @@ +// PR c++/48046 + +namespace N1 { typedef int T; } // { dg-error "" } +namespace N2 { typedef float T; } // { dg-error "" } + +int main() +{ + using namespace N1; + using namespace N2; + + static T t; // { dg-error "" } +} diff --git a/gcc/testsuite/g++.dg/parse/friend5.C b/gcc/testsuite/g++.dg/parse/friend5.C index ec134c26ea9..bf1e6bfa6dd 100644 --- a/gcc/testsuite/g++.dg/parse/friend5.C +++ b/gcc/testsuite/g++.dg/parse/friend5.C @@ -4,5 +4,4 @@ extern "C" struct A { friend void foo(int) {} // { dg-error "declaration" } friend void foo() {} // { dg-error "foo" "err" } - // { dg-warning "already a friend" "warn" { target *-*-* } 6 } }; diff --git a/gcc/testsuite/g++.dg/parse/memfnquals1.C b/gcc/testsuite/g++.dg/parse/memfnquals1.C new file mode 100644 index 00000000000..ce8af7b7273 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/memfnquals1.C @@ -0,0 +1,6 @@ +// PR c++/48166 + +struct foo { + static void func (); +}; +void foo::func () const {} // { dg-error "type qualifiers" } diff --git a/gcc/testsuite/g++.dg/parse/pr34758.C b/gcc/testsuite/g++.dg/parse/pr34758.C new file mode 100644 index 00000000000..d694853e68e --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/pr34758.C @@ -0,0 +1,28 @@ +// PR 34758 Bad diagnostic for circular dependency in constructor default argument +// { dg-do compile } +// { dg-options "" } +struct A +{ + A (const A& = A()); // { dg-error "recursive evaluation of default argument" } +}; + + +struct S { + S(const S& = f()); // { dg-error "default argument\[^\n\]*which is not yet defined" } + static const S& f(int i = 3); +}; + +struct J { + J(const J& = f(2)); // { dg-error "default argument.*which is not yet defined" } + static const J& f(int i = 3, int j = 4); +}; + +struct Z { + Z(const Z& = f(4)); + static const Z& f(int i = 3); +}; + +struct X { + X(const X& = g()); + static const X& g(void); +}; diff --git a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c index e5b0566837d..8de5f44cbf8 100644 --- a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c @@ -26,7 +26,7 @@ handle_user_attribute (tree *node, tree name, tree args, /* Attribute definition */ static struct attribute_spec user_attr = - { "user", 1, 1, false, false, false, handle_user_attribute }; + { "user", 1, 1, false, false, false, handle_user_attribute, false }; /* Plugin callback called during attribute registration */ diff --git a/gcc/testsuite/g++.dg/pr48484.C b/gcc/testsuite/g++.dg/pr48484.C new file mode 100644 index 00000000000..3f17f39a0a1 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr48484.C @@ -0,0 +1,105 @@ +/* { dg-do compile } */ +/* { dg-options "-O -finline-functions -finline-small-functions -Wuninitialized" } */ + + +struct SQObjectPtr +{ + int _type; + SQObjectPtr operator = (long); +}; +struct SQObjectPtrVec +{ + SQObjectPtr fff (unsigned); + SQObjectPtr *_vals; +}; + +struct SQInstruction +{ + int _arg1; + unsigned op; + unsigned _arg0; + unsigned _arg2; +}; +struct SQVM +{ + struct CallInfo + { + SQInstruction *_ip; + }; + bool + Execute (SQObjectPtr &, long, long, long, SQObjectPtr &, unsigned, int); + bool + FOREACH_OP + (SQObjectPtr + &, SQObjectPtr &, SQObjectPtr &, SQObjectPtr &, long, int, int &); + SQObjectPtrVec _stack; + CallInfo *ci; + long _nnativecalls; + bool ShouldSuspend (); +}; +struct AutoDec +{ + AutoDec (long *); + ~AutoDec (); +}; +bool + SQVM::FOREACH_OP + (SQObjectPtr + & + o1, + SQObjectPtr & o2, SQObjectPtr &, SQObjectPtr & o4, long, int, int &jump) +{ + long + nrefidx = 0; + switch (o1._type) + { + case 0x02000000: + o4 = nrefidx; + jump = 1; + return true; + case 0x00000080: + { + long + idx = 10; + o2 = idx; + jump = 0; + } + } +} + +bool + SQVM::Execute + (SQObjectPtr &, long, long, long, SQObjectPtr &, unsigned, int) +{ + AutoDec + ad (&_nnativecalls); + for (;;) + { + if (ShouldSuspend ()) + return true; + SQInstruction + _i_ = *ci->_ip; + switch (_i_.op) + { + case 0: + { + int + tojump; + + FOREACH_OP + (_stack._vals + [_i_._arg0], + _stack._vals + [_i_._arg2], + _stack._vals + [_i_._arg2], + _stack._vals[_i_._arg2], _i_._arg2, _i_._arg1, tojump); + + ci += tojump; /* { dg-warning "uninitialized" "warning" } */ + } + case 1: + _stack.fff (_i_._arg1); + } + } + +} diff --git a/gcc/testsuite/g++.dg/pr48772.C b/gcc/testsuite/g++.dg/pr48772.C new file mode 100644 index 00000000000..39c1094e810 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr48772.C @@ -0,0 +1,35 @@ +// { dg-do compile } +// { dg-options "-O -fnon-call-exceptions -fno-tree-ccp -fno-tree-dce" } + +extern "C" void abort (); + +struct A +{ + void foo () + { + this->bar (); + } + virtual void bar () + { + abort (); + } + ~A () + { + } +}; + +struct B:A +{ + virtual void bar () + { + } +}; + +int +main () +{ + B b; + b.foo (); + return 0; +} + diff --git a/gcc/testsuite/g++.dg/prof-robust-1.C b/gcc/testsuite/g++.dg/prof-robust-1.C new file mode 100644 index 00000000000..a5d8cb3c470 --- /dev/null +++ b/gcc/testsuite/g++.dg/prof-robust-1.C @@ -0,0 +1,24 @@ +/* { dg-options "-O2 -fno-weak" } */ + +#include <stdio.h> + +namespace { + namespace { + + class MyClass { + public: + void foo() const; + ~MyClass() { foo(); } + }; + + void MyClass::foo() const { printf("Goodbye World\n"); } + + } + + static MyClass variable; + +} + +int main() { + return 0; +} diff --git a/gcc/testsuite/g++.dg/template/const4.C b/gcc/testsuite/g++.dg/template/const4.C new file mode 100644 index 00000000000..6552ec6e968 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/const4.C @@ -0,0 +1,9 @@ +// PR c++/48657 + +template<unsigned> struct A { typedef int T; }; + +template<unsigned> void f() +{ + const unsigned D = 4; + A<D>::T t; +} diff --git a/gcc/testsuite/g++.dg/template/crash7.C b/gcc/testsuite/g++.dg/template/crash7.C index ae07d91e739..7fda9a9ba19 100644 --- a/gcc/testsuite/g++.dg/template/crash7.C +++ b/gcc/testsuite/g++.dg/template/crash7.C @@ -5,11 +5,10 @@ // PR c++/10108: ICE in tsubst_decl for error due to non-existence // nested type. -template <typename> struct A -{ // { not-dg-error "candidates" } +template <typename> struct A // { dg-message "A.void.::A.const A" } +{ template <typename> A(typename A::X) {} // { dg-error "no type" } }; -A<void> a; // { not-dg-error "instantiated|no match" } -// We currently don't give the "no match" error because we don't add the -// invalid constructor template to TYPE_METHODS. +A<void> a; // { dg-error "instantiated|no match" } +// { dg-prune-output "note" } diff --git a/gcc/testsuite/g++.dg/template/dependent-expr7.C b/gcc/testsuite/g++.dg/template/dependent-expr7.C new file mode 100644 index 00000000000..b2468203590 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/dependent-expr7.C @@ -0,0 +1,22 @@ +// Origin PR c++/48574 +// { dg-do compile } + +struct A +{ + virtual void foo(); +}; + +template <typename T> +void +bar(T x) +{ + A &b = *x; + b.foo (); +} + +void +foo() +{ + A a; + bar(&a); +} diff --git a/gcc/testsuite/g++.dg/template/dependent-expr8.C b/gcc/testsuite/g++.dg/template/dependent-expr8.C new file mode 100644 index 00000000000..20014d6e70b --- /dev/null +++ b/gcc/testsuite/g++.dg/template/dependent-expr8.C @@ -0,0 +1,25 @@ +// Origin PR c++/48574 +// { dg-options "-std=c++0x" } +// { dg-do compile } + +struct A +{ + virtual int foo(); +}; + +void baz (int); + +template <typename T> +void +bar(T x) +{ + A &b = *x; + baz (b.foo ()); +} + +void +foo() +{ + A a; + bar(&a); +} diff --git a/gcc/testsuite/g++.dg/template/fn-ptr1.C b/gcc/testsuite/g++.dg/template/fn-ptr1.C new file mode 100644 index 00000000000..c0e7d988524 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/fn-ptr1.C @@ -0,0 +1,5 @@ +// PR c++/48162 + +struct A { }; +A (*f)(); +template <class T> void g() { f(); } diff --git a/gcc/testsuite/g++.dg/template/incomplete6.C b/gcc/testsuite/g++.dg/template/incomplete6.C new file mode 100644 index 00000000000..7138b6a3b41 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/incomplete6.C @@ -0,0 +1,22 @@ +// PR c++/48115 + +template<typename> struct templ { }; + +template<typename T> T declval(); + +typedef int (*F2)(...); + +template<int> struct Int { }; + +template<typename F, typename T> +struct S +{ + template<typename A> + Int<sizeof( declval<F>()(T()) )> + f(A); +}; + +int main() +{ + S<F2, templ<int> >().f(0); +} diff --git a/gcc/testsuite/g++.dg/template/inherit7.C b/gcc/testsuite/g++.dg/template/inherit7.C new file mode 100644 index 00000000000..67afbca6bf0 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/inherit7.C @@ -0,0 +1,21 @@ +// Origin: PR c++/48656 +// { dg-options "-std=c++0x" } +// { dg-do compile } + +struct A { + int f(); + int f(int); +}; + +template <typename> struct B : A +{ +}; + +template <typename T> struct C : B<T> +{ + void + g() + { + A::f(); + } +}; diff --git a/gcc/testsuite/g++.dg/template/member9.C b/gcc/testsuite/g++.dg/template/member9.C new file mode 100644 index 00000000000..f15272db7ab --- /dev/null +++ b/gcc/testsuite/g++.dg/template/member9.C @@ -0,0 +1,21 @@ +// Origin PR c++/48838 +// { dg-do compile } + +class DUChainItemSystem +{ +public: + + template<class T> + void registerTypeClass(); + + static DUChainItemSystem& self(); +}; + +template<class T> +struct DUChainItemRegistrator +{ + DUChainItemRegistrator() + { + DUChainItemSystem::self().registerTypeClass<T>(); + } +}; diff --git a/gcc/testsuite/g++.dg/template/nontype23.C b/gcc/testsuite/g++.dg/template/nontype23.C new file mode 100644 index 00000000000..dfda4fe2e59 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/nontype23.C @@ -0,0 +1,9 @@ +// PR c++/48936 + +template <bool C> int foo (void); +template <class T> struct S +{ + static const unsigned int a = sizeof (T); + enum { c = sizeof (foo <(a == 0)> ()) }; +}; +S<int> x; diff --git a/gcc/testsuite/g++.dg/template/operator11.C b/gcc/testsuite/g++.dg/template/operator11.C new file mode 100644 index 00000000000..8d6b77ab454 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/operator11.C @@ -0,0 +1,25 @@ +// PR c++/48594 +// Test for uses of (X->*Y)() that don't actually involve a +// pointer to member function. + +struct A { } a; +struct B { } b; +struct C * cp; + +struct Func { void operator()(); }; +Func operator->* (A, int); + +typedef void (*pfn)(); +pfn operator->* (B, int); + +pfn C::*cpfn; +Func C::*cfunc; + +template <class T> +void f() +{ + (a->*1)(); + (b->*1)(); + (cp->*cpfn)(); + (cp->*cfunc)(); +} diff --git a/gcc/testsuite/g++.dg/torture/pr46364.C b/gcc/testsuite/g++.dg/torture/pr46364.C new file mode 100644 index 00000000000..8098991ace0 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr46364.C @@ -0,0 +1,20 @@ +// { dg-do compile } +#include <string> + +void a() throw (int); +void b(std::string const &); + +void c(std::string *e) +{ + b(""); + + try { + a(); + } catch (...) { + *e = ""; + } +} + +void d() { + c(0); +} diff --git a/gcc/testsuite/g++.dg/torture/pr48165.C b/gcc/testsuite/g++.dg/torture/pr48165.C new file mode 100644 index 00000000000..a42893f604d --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr48165.C @@ -0,0 +1,38 @@ +/* { dg-do compile } */ + +typedef __SIZE_TYPE__ size_t; + +extern "C" { + extern __inline __attribute__ ((__always_inline__)) + __attribute__ ((__gnu_inline__, __artificial__)) void * + memcpy (void *__restrict __dest, __const void *__restrict __src, + size_t __len) throw () + { + return __builtin___memcpy_chk (__dest, __src, __len, + __builtin_object_size (__dest, 0)); + } +} + +typedef char TCODE[20]; +typedef TCODE TCODE_ARRAY[5]; +typedef struct PARAM +{ + TCODE_ARRAY tcode; +} PARAM; + +static void foo (void* p) +{ + char buffer[4+sizeof(PARAM)]; + PARAM *param = (PARAM *)(buffer + 4); + int i; + + for (i=0; i < 5; i++) + { + memcpy( param->tcode[i], p, 20 ); + } +} + +void bar (void* p) +{ + foo (p); +} diff --git a/gcc/testsuite/g++.dg/torture/pr48271.C b/gcc/testsuite/g++.dg/torture/pr48271.C new file mode 100644 index 00000000000..5b60ccd768c --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr48271.C @@ -0,0 +1,119 @@ +// { dg-do compile } +// { dg-options "-ftree-vrp -fno-guess-branch-probability -fnon-call-exceptions" } + +void *xalloc (); +void xfree (void *); +void error (); + +static inline void * +MallocT () +{ + void *p = xalloc (); + if (!p) + error (); + return p; +} + + +struct ByteBlob +{ + int *header; + + ByteBlob(); + + ~ByteBlob () + { + Free (); + } + + int RawFree (int * p) + { + if (!p) + error (); + xfree (p); + } + + int *LengthRef (); + + void Free () + { + if (*header) + RawFree (header); + } + + int Append (int num_ints) + { + if (*header) + MallocT (); + *LengthRef () += num_ints; + } +}; + +struct CBlobT:ByteBlob +{ + ~CBlobT () + { + Free (); + } +}; + +template < class T > struct FixedSizeArray +{ + int HeaderSize; + T *data; + FixedSizeArray (); + int RefCnt () + { + return *(int *) MallocT (); + } + ~FixedSizeArray () + { + if (RefCnt ()) + for (T * pItem = data + Length (); pItem != data; pItem--) + T (); + } + int Length (); +}; + +class SmallArray +{ + typedef FixedSizeArray < int > SubArray; + typedef FixedSizeArray < SubArray > SuperArray; + SuperArray data; +}; + +struct CHashTableT +{ + int *m_slots; + ~CHashTableT () + { + delete m_slots; + } +}; + +struct CYapfBaseT +{ + int *PfGetSettings (); + SmallArray m_arr; + CHashTableT m_closed; + CYapfBaseT () + { + MallocT (); + } +}; + +struct CYapfCostRailT:CYapfBaseT +{ + CBlobT m_sig_look_ahead_costs; + CYapfCostRailT () + { + m_sig_look_ahead_costs.Append (*Yapf ()->PfGetSettings ()); + Yapf ()->PfGetSettings (); + } + CYapfBaseT *Yapf (); +}; + +void stCheckReverseTrain () +{ + CYapfCostRailT pf1; +} diff --git a/gcc/testsuite/g++.dg/torture/pr48661.C b/gcc/testsuite/g++.dg/torture/pr48661.C new file mode 100644 index 00000000000..8de2142f737 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr48661.C @@ -0,0 +1,77 @@ +// PR middle-end/48661 +// { dg-do run } + +extern "C" void abort (); + +__attribute__((noinline)) +double +foo (double x, double y) +{ + asm volatile ("" : : : "memory"); + return x + y; +} + +__attribute__((noinline, noclone)) +void +bar (int x) +{ + if (x != 123) + abort (); +} + +struct A +{ + double a1, a2; +}; + +struct B +{ + virtual int m () const = 0 ; +}; + +struct C +{ + virtual ~C () {} +}; + +struct D : virtual public B, public C +{ + explicit D (const A &x) : d(123) { foo (x.a2, x.a1); } + int m () const { return d; } + int d; +}; + +struct E +{ + E () : d(0) {} + virtual void n (const B &x) { d = x.m (); x.m (); x.m (); } + int d; +}; + +void +test () +{ + A a; + a.a1 = 0; + a.a2 = 1; + E p; + D q (a); + const B &b = q; + bar (b.m ()); + p.n (b); + bar (p.d); +} + +void +baz () +{ + A a; + D p2 (a); +} + +int +main () +{ + test (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/torture/pr48695.C b/gcc/testsuite/g++.dg/torture/pr48695.C new file mode 100644 index 00000000000..44e6c771dba --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr48695.C @@ -0,0 +1,38 @@ +// { dg-do run } + +typedef __SIZE_TYPE__ size_t; + +inline void *operator new (size_t, void *__p) throw() { return __p; } + +struct _Vector_impl +{ + int *_M_start; + int *_M_finish; + _Vector_impl () :_M_start (0), _M_finish (0) {} +}; + +struct vector +{ + _Vector_impl _M_impl; + int *_M_allocate (size_t __n) + { + return __n != 0 ? new int[__n] : 0; + } + void push_back () + { + new (this->_M_impl._M_finish) int (); + this->_M_impl._M_finish = + this->_M_allocate (this->_M_impl._M_finish - this->_M_impl._M_start) + 1; + } +}; + +int +main () +{ + for (int i = 0; i <= 1; i++) + for (int j = 0; j <= 1; j++) + { + vector a[2]; + a[i].push_back (); + } +} diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr13954.C b/gcc/testsuite/g++.dg/tree-ssa/pr13954.C new file mode 100644 index 00000000000..169497a9c47 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr13954.C @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-optimized" } */ + +void link_error (void); + +class base +{ +}; + +class teststruct: public base +{ +public: + double d; + char f1; +}; + +void +copystruct1 (teststruct param) +{ + teststruct local; + param.f1 = 0; + local = param; + if (local.f1 != 0) + link_error (); +} + +/* There should be no reference to link_error. */ +/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized"} } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr33604.C b/gcc/testsuite/g++.dg/tree-ssa/pr33604.C index 7e820d3ef16..039b3be02a4 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr33604.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr33604.C @@ -42,7 +42,8 @@ int main(int argc, char *argv[]) yielding D.2137.lhs.m ={v} &I; so that SRA can promote all locals to registers and we end up - referencing a single virtual operand at abort () after optimization. */ + referencing two virtual operands at abort () and the return + after optimization. */ -/* { dg-final { scan-tree-dump-times ".MEM_\[0-9\]*\\\(D\\\)" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times ".MEM_\[0-9\]*\\\(D\\\)" 2 "optimized" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr41186.C b/gcc/testsuite/g++.dg/tree-ssa/pr41186.C index 91f21a8c643..8739ae9e6d5 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr41186.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr41186.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ struct Foo { Foo() {}; @@ -29,7 +29,7 @@ int main() return 0; } -/* { dg-final { scan-tree-dump "Replaced b1.b with 1" "fre" } } */ -/* { dg-final { scan-tree-dump "Replaced b1.i with 0" "fre" { xfail *-*-* } } } */ -/* { dg-final { scan-tree-dump "Replaced b1.f with 1" "fre" { xfail *-*-* } } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced b1.b with 1" "fre1" } } */ +/* { dg-final { scan-tree-dump "Replaced b1.i with 0" "fre1" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump "Replaced b1.f with 1" "fre1" { xfail *-*-* } } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr8781.C b/gcc/testsuite/g++.dg/tree-ssa/pr8781.C index a9d279af74e..fc5f44394d9 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr8781.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr8781.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ int f(); @@ -24,5 +24,5 @@ int x() /* We should optimize this to a direct call. */ -/* { dg-final { scan-tree-dump "Replacing call target with f" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replacing call target with f" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C b/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C index c3050f6122b..dd498c199d9 100644 --- a/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C +++ b/gcc/testsuite/g++.dg/warn/Wconversion-null-2.C @@ -44,6 +44,6 @@ int main() k(NULL); // { dg-warning "" } converting NULL to int g(NULL); // { dg-warning "" } converting NULL to int h<NULL>(); // No warning: NULL bound to integer template parameter - l(NULL); // { dg-warning "" } converting NULL to int + l(NULL); // No warning: NULL is used to implicitly instantiate the template NULL && NULL; // No warning: converting NULL to bool is OK } diff --git a/gcc/testsuite/g++.dg/warn/Wnull-conversion-1.C b/gcc/testsuite/g++.dg/warn/Wnull-conversion-1.C new file mode 100644 index 00000000000..511f091f2cf --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wnull-conversion-1.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-Wconversion-null" } + +#include <stddef.h> + +void func1(int* ptr); + +void func2() { + int* t = false; // { dg-warning "converting 'false' to pointer" } + int* p; + p = false; // { dg-warning "converting 'false' to pointer" } + int* r = sizeof(char) / 2; + func1(false); // { dg-warning "converting 'false' to pointer" } + int i = NULL; // { dg-warning "converting to non-pointer" } +} diff --git a/gcc/testsuite/g++.dg/warn/Wnull-conversion-2.C b/gcc/testsuite/g++.dg/warn/Wnull-conversion-2.C new file mode 100644 index 00000000000..92a87d1e76c --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wnull-conversion-2.C @@ -0,0 +1,45 @@ +// { dg-do compile } +// { dg-options "-Wconversion-null" } + +#include <stddef.h> + +class Foo { + public: + template <typename T1, typename T2> + static void Compare(const T1& expected, const T2& actual) { } + + template <typename T1, typename T2> + static void Compare(const T1& expected, T2* actual) { } + +}; + +template<typename T1> +class Foo2 { + public: + Foo2(int x); + template<typename T2> void Bar(T2 y); +}; + +template<typename T3> void func(T3 x) { } + +typedef Foo2<int> MyFooType; + +void func1(long int a) { + MyFooType *foo2 = new MyFooType(NULL); // { dg-warning "passing NULL to" } + foo2->Bar(a); + func(NULL); + func<int>(NULL); // { dg-warning "passing NULL to" } + func<int *>(NULL); +} + +int x = 1; + +main() +{ + int *p = &x; + + Foo::Compare(0, *p); + Foo::Compare<long int, int>(NULL, p); // { dg-warning "passing NULL to" } + Foo::Compare(NULL, p); + func1(NULL); // { dg-warning "passing NULL to" } +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C index 607cf9cc841..6621a27b6a2 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C @@ -21,7 +21,7 @@ void DoSomething(Ding A); void foo(Something* pX) { - DoSomething(1); // { dg-error "conversion" } + DoSomething(1); // { dg-error "could not convert" } pX->DoSomething(1); // { dg-error "no matching" } // { dg-message "candidate" "candidate note" { target *-*-* } 25 } (*pX).DoSomething(1); // { dg-error "no matching" } diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg11.C b/gcc/testsuite/g++.old-deja/g++.law/arg11.C index fc590c4387a..fc9357964f4 100644 --- a/gcc/testsuite/g++.old-deja/g++.law/arg11.C +++ b/gcc/testsuite/g++.old-deja/g++.law/arg11.C @@ -16,7 +16,7 @@ void function(Ack); int foo(S *o) { // Neither call has a usable constructor for conversions of char[5] to Ack. - function("adsf");// { dg-error "conversion" } + function("adsf");// { dg-error "could not convert" } o->method("adsf");// { dg-error "no matching" } // { dg-message "candidate" "candidate note" { target *-*-* } 20 } return 0; diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C b/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C index 91b3b02a439..75c8723c70f 100644 --- a/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C +++ b/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C @@ -6,7 +6,7 @@ // Based on bug report by JDonner <jdonner@schedsys.com> struct foo { - static int bar(); // { dg-error "candidate" } + static int bar(); // { dg-error "foo::bar" } void bar(int); // { dg-error "foo::bar" } }; diff --git a/gcc/testsuite/g++.old-deja/g++.other/base1.C b/gcc/testsuite/g++.old-deja/g++.other/base1.C index 3c9ac264e1d..b38a6546d03 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/base1.C +++ b/gcc/testsuite/g++.old-deja/g++.other/base1.C @@ -3,8 +3,7 @@ // Copyright (C) 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 25 Nov 2000 <nathan@codesourcery.com> -// We lost information about which base wasn't an aggregate type, plus we -// allowed cv qualifed bases via typedefs. +// We lost information about which base wasn't an aggregate type. typedef int I; typedef int cI; @@ -16,5 +15,5 @@ typedef A pA; struct B : I {}; // { dg-error "" } not an aggregate struct C : cI {}; // { dg-error "" } not an aggregate -struct D : cA {}; // { dg-error "" } cv qualified +struct D : cA {}; // cv-qualified is fine per DR 484 struct E : pA {}; diff --git a/gcc/testsuite/g++.old-deja/g++.other/null3.C b/gcc/testsuite/g++.old-deja/g++.other/null3.C index 6228caabd37..01071f9297b 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/null3.C +++ b/gcc/testsuite/g++.old-deja/g++.other/null3.C @@ -2,5 +2,5 @@ void x() { - int* p = 1==0; + int* p = 1==0; // { dg-warning "converting 'false' to pointer" } } diff --git a/gcc/testsuite/gcc.c-torture/compile/20000804-1.c b/gcc/testsuite/gcc.c-torture/compile/20000804-1.c index 0a63a32dfb7..6916951bb72 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20000804-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20000804-1.c @@ -1,10 +1,10 @@ -/* This does not work on m68hc11 or h8300 due to the use of an asm +/* This does not work on h8300 due to the use of an asm statement to force a 'long long' (64-bits) to go in a register. */ /* { dg-do assemble } */ /* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && { ilp32 && { ! nonpic } } } { "*" } { "" } } */ /* { dg-skip-if "No 64-bit registers" { m32c-*-* } { "*" } { "" } } */ /* { dg-skip-if "Not enough 64-bit registers" { pdp11-*-* } { "-O0" } { "" } } */ -/* { dg-xfail-if "" { m6811-*-* m6812-*-* h8300-*-* } { "*" } { "" } } */ +/* { dg-xfail-if "" { h8300-*-* } { "*" } { "" } } */ /* Copyright (C) 2000, 2003 Free Software Foundation */ __complex__ long long f () diff --git a/gcc/testsuite/gcc.c-torture/compile/20001205-1.c b/gcc/testsuite/gcc.c-torture/compile/20001205-1.c index bab7b69ca2b..d25d2f0f102 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20001205-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20001205-1.c @@ -1,7 +1,4 @@ -/* This does not work on m68hc11 due to the asm statement which forces - two 'long' (32-bits) variables to go in registers. */ /* { dg-do assemble } */ -/* { dg-xfail-if "" { m6811-*-* m6812-*-* } { "*" } { "" } } */ static inline unsigned long rdfpcr(void) { diff --git a/gcc/testsuite/gcc.c-torture/compile/20001226-1.c b/gcc/testsuite/gcc.c-torture/compile/20001226-1.c index 8c93baccda9..127c4daec45 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20001226-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20001226-1.c @@ -1,7 +1,4 @@ -/* This does not assemble on m68hc11 because the function is larger - than 64K. */ /* { dg-do assemble } */ -/* { dg-xfail-if "function larger than 64K" { m6811-*-* } { "*" } { "" } } */ /* { dg-skip-if "too much code for avr" { "avr-*-*" } { "*" } { "" } } */ /* { dg-skip-if "too much code for pdp11" { "pdp11-*-*" } { "*" } { "" } } */ /* { dg-xfail-if "jump beyond 128K not supported" { xtensa*-*-* } { "-O0" } { "" } } */ diff --git a/gcc/testsuite/gcc.c-torture/compile/20010518-2.c b/gcc/testsuite/gcc.c-torture/compile/20010518-2.c index f35d7c6b96d..9ff50474223 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20010518-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/20010518-2.c @@ -1,10 +1,5 @@ /* { dg-do compile } */ -/* This test fails on HC11/HC12 when it is compiled without -mshort because - the array is too large (INT_MAX/2 > 64K). Force to use 16-bit ints - for it. */ -/* { dg-options "-w -mshort" { target m6811-*-* m6812-*-* } } */ - /* Large static storage. */ #include <limits.h> diff --git a/gcc/testsuite/gcc.c-torture/compile/20011106-2.c b/gcc/testsuite/gcc.c-torture/compile/20011106-2.c index 358f9d2ed49..7f80554faae 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20011106-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/20011106-2.c @@ -1,4 +1,4 @@ -/* Test the the type of a component of a conditional expression between +/* Test the type of a component of a conditional expression between two structures is correct. */ /* Origin: Joseph Myers <jsm28@cam.ac.uk>. */ diff --git a/gcc/testsuite/gcc.c-torture/compile/20020312-1.c b/gcc/testsuite/gcc.c-torture/compile/20020312-1.c index bb950ff31fa..bac5c6a53c1 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20020312-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20020312-1.c @@ -1,7 +1,4 @@ -/* This does not compile on HC11/HC12 due to the asm which requires - two 32-bit registers. */ /* { dg-do assemble } */ -/* { dg-xfail-if "" { m6811-*-* m6812-*-* } { "*" } { "" } } */ /* { dg-skip-if "" { pdp11-*-* } { "-O0" } { "" } } */ /* PR optimization/5892 */ diff --git a/gcc/testsuite/gcc.c-torture/compile/20020604-1.c b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c index 8b958040e3c..9486583e973 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20020604-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c @@ -1,5 +1,4 @@ /* { dg-do assemble } */ -/* { dg-xfail-if "The array is too big" { "m6811-*-* m6812-*-*" } { "*" } { "" } } */ /* { dg-skip-if "The array is too big" { "avr-*-*" "pdp11-*-*" } { "*" } { "" } } */ /* { dg-xfail-if "The array too big" { "h8300-*-*" } { "-mno-h" "-mn" } { "" } } */ /* { dg-skip-if "" { m32c-*-* } { } { } } */ diff --git a/gcc/testsuite/gcc.c-torture/compile/20110401-1.c b/gcc/testsuite/gcc.c-torture/compile/20110401-1.c new file mode 100644 index 00000000000..ee83a413674 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20110401-1.c @@ -0,0 +1,22 @@ +void asn1_length_der (unsigned long int len, unsigned char *ans, int *ans_len) +{ + int k; + unsigned char temp[4]; + if (len < 128) { + if (ans != ((void *) 0)) + ans[0] = (unsigned char) len; + *ans_len = 1; + } else { + k = 0; + while (len) { + temp[k++] = len & 0xFF; + len = len >> 8; + } + *ans_len = k + 1; + if (ans != ((void *) 0)) { + ans[0] = ((unsigned char) k & 0x7F) + 128; + while (k--) + ans[*ans_len - 1 - k] = temp[k]; + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-12.c b/gcc/testsuite/gcc.c-torture/compile/920501-12.c index 7eac9724677..383c7182df2 100644 --- a/gcc/testsuite/gcc.c-torture/compile/920501-12.c +++ b/gcc/testsuite/gcc.c-torture/compile/920501-12.c @@ -1,7 +1,4 @@ -/* This test fails on HC11/HC12 when it is compiled without -mshort because - the stack arrays are too large. Force to use 16-bit ints for it. */ /* { dg-do assemble } */ -/* { dg-xfail-if "" { m6811-*-* m6812-*-* } { "*" } { "-mshort" } } */ x(x){ return 3 + x;} a(x){int y[994]; return 3 + x;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-4.c b/gcc/testsuite/gcc.c-torture/compile/920501-4.c index 3481deefedb..48314cc7898 100644 --- a/gcc/testsuite/gcc.c-torture/compile/920501-4.c +++ b/gcc/testsuite/gcc.c-torture/compile/920501-4.c @@ -1,7 +1,4 @@ -/* This test fails on HC11/HC12 when it is compiled without -mshort because - the 'r0' array is too large. Force to use 16-bit ints for it. */ /* { dg-do assemble } */ -/* { dg-xfail-if "" { m6811-*-* m6812-*-* } { "*" } { "-mshort" } } */ foo () { diff --git a/gcc/testsuite/gcc.c-torture/compile/920520-1.c b/gcc/testsuite/gcc.c-torture/compile/920520-1.c index e090b32d15b..7dce4118519 100644 --- a/gcc/testsuite/gcc.c-torture/compile/920520-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/920520-1.c @@ -1,5 +1,4 @@ /* { dg-do compile } */ -/* { dg-xfail-if "" { m6811-*-* m6812-*-* } { "*" } { "" } } */ /* { dg-skip-if "" { pdp11-*-* } { "*" } { "" } } */ f(){asm("%0"::"r"(1.5F));}g(){asm("%0"::"r"(1.5));} diff --git a/gcc/testsuite/gcc.c-torture/compile/980506-1.c b/gcc/testsuite/gcc.c-torture/compile/980506-1.c index 5c22e7e508f..0f46e17e5cb 100644 --- a/gcc/testsuite/gcc.c-torture/compile/980506-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/980506-1.c @@ -1,7 +1,6 @@ /* The arrays are too large for the xstormy16 - won't fit in 16 bits. */ /* { dg-do assemble } */ /* { dg-require-effective-target size32plus } */ -/* { dg-xfail-if "The array too big" { m6811-*-* m6812-*-* } { "*" } { "" } } /* /* { dg-skip-if "Array too big" { "avr-*-*" } { "*" } { "" } } */ /* { dg-xfail-if "The array too big" { h8300-*-* } { "-mno-h" "-mn" } { "" } } */ diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43191.c b/gcc/testsuite/gcc.c-torture/compile/pr43191.c index f4ec0b4770d..42a429a2672 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr43191.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr43191.c @@ -1,4 +1,5 @@ -/* { dg-skip-if "Ints are 16 bits" { "pdp11-*-*" } { "*" } { "" } } */ +/* { dg-require-effective-target int32plus } */ + struct S0 { }; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44686.c b/gcc/testsuite/gcc.c-torture/compile/pr44686.c index eacd83d3130..62c57d75e6f 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr44686.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr44686.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fipa-pta -fprofile-generate" } */ +/* { dg-options "-fipa-pta -fprofile-generate" } */ void * memcpy (void *a, const void *b, __SIZE_TYPE__ len) { diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48136.c b/gcc/testsuite/gcc.c-torture/compile/pr48136.c new file mode 100644 index 00000000000..77581ac7285 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48136.c @@ -0,0 +1,7 @@ +/* PR middle-end/48136 */ + +int +foo (int x, int y) +{ + return (x ^ 5U) == (y ^ 1); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48161.c b/gcc/testsuite/gcc.c-torture/compile/pr48161.c new file mode 100644 index 00000000000..c454efcd073 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48161.c @@ -0,0 +1,24 @@ +/* PR bootstrap/48161 */ + +struct T { int u; }; +struct G { int l; int t; int r; }; +struct V { struct G v[10]; }; +struct { struct V b; } *h; +void bar (void); + +struct G * +baz (struct V *x, unsigned y) +{ + return &x->v[y]; +} + +int +foo (struct T *x, struct T *y) +{ + if ((baz (&h->b, y->u)->t ? baz (&h->b, y->u)->t : 0) + - baz (h ? &h->b : 0, x->u)->r + - (baz (h ? &h->b : 0, x->u)->t > 0 ? 5 : 0)) + return 1; + bar (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48305.c b/gcc/testsuite/gcc.c-torture/compile/pr48305.c new file mode 100644 index 00000000000..aaec71c52a3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48305.c @@ -0,0 +1,7 @@ +/* PR c/48305 */ + +int +foo (int x) +{ + return (x ^ 1) == (x ^ 1U); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48335-1.c b/gcc/testsuite/gcc.c-torture/compile/pr48335-1.c new file mode 100644 index 00000000000..6f813382c70 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48335-1.c @@ -0,0 +1,41 @@ +/* PR middle-end/48335 */ + +struct S { float d; }; + +void bar (struct S); + +void +f0 (int x) +{ + struct S s = {.d = 0.0f }; + ((char *) &s.d)[0] = x; + s.d *= 7.0; + bar (s); +} + +void +f1 (int x) +{ + struct S s = {.d = 0.0f }; + ((char *) &s.d)[1] = x; + s.d *= 7.0; + bar (s); +} + +void +f2 (int x) +{ + struct S s = {.d = 0.0f }; + ((char *) &s.d)[2] = x; + s.d *= 7.0; + bar (s); +} + +void +f3 (int x) +{ + struct S s = {.d = 0.0f }; + ((char *) &s.d)[3] = x; + s.d *= 7.0; + bar (s); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48381.c b/gcc/testsuite/gcc.c-torture/compile/pr48381.c new file mode 100644 index 00000000000..eeb9c847f33 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48381.c @@ -0,0 +1,25 @@ +/* PR rtl-optimization/48381 */ + +struct S { int s; } t; + +int baz (void); +void fn (int, unsigned, int, unsigned, char); + +static char +foo (signed x, unsigned y) +{ + return x < 0 || y >= 32 ? 1 : x >> y; +} + +long long +bar (long long x, long y) +{ + return y < 0 ? 1LL : x - y; +} + +void +test (int x, unsigned y, unsigned z, char w) +{ + unsigned v[2]; + fn (w || baz (), y, t.s, y, foo (bar (z, w) <= v[0], x)); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48517.c b/gcc/testsuite/gcc.c-torture/compile/pr48517.c new file mode 100644 index 00000000000..30b3ecbb354 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48517.c @@ -0,0 +1,13 @@ +/* PR c/48517 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void bar (const unsigned short *); + +void +foo (void) +{ + static const unsigned short array[] = (const unsigned short []) { 0x0D2B }; + const unsigned short *ptr = array; + bar (ptr); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48734.c b/gcc/testsuite/gcc.c-torture/compile/pr48734.c new file mode 100644 index 00000000000..b20ea80fb3f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48734.c @@ -0,0 +1,11 @@ +/* PR tree-optimization/48734 */ + +unsigned int +foo (int x, unsigned int y, unsigned int z) +{ + z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; + z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; + z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; + z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; + return z; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48742.c b/gcc/testsuite/gcc.c-torture/compile/pr48742.c new file mode 100644 index 00000000000..0a670f3c990 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48742.c @@ -0,0 +1,15 @@ +/* PR c/48742 */ + +void baz (int); + +int +foo (void) +{ + return 1 / 0 > 0; +} + +void +bar (void) +{ + baz (1 <= 2 % (3 >> 1 > 5 / 6 == 3)); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48767.c b/gcc/testsuite/gcc.c-torture/compile/pr48767.c new file mode 100644 index 00000000000..66cb34885d0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48767.c @@ -0,0 +1,7 @@ +/* PR target/48767 */ + +void +foo (__builtin_va_list ap) +{ + __builtin_va_arg (ap, void); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-8.x b/gcc/testsuite/gcc.c-torture/execute/920501-8.x deleted file mode 100644 index f675fb66d13..00000000000 --- a/gcc/testsuite/gcc.c-torture/execute/920501-8.x +++ /dev/null @@ -1,5 +0,0 @@ -# sprintf() does not support %f on m6811/m6812 target. -if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"]} { - return 1 -} -return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/930513-1.x b/gcc/testsuite/gcc.c-torture/execute/930513-1.x deleted file mode 100644 index f675fb66d13..00000000000 --- a/gcc/testsuite/gcc.c-torture/execute/930513-1.x +++ /dev/null @@ -1,5 +0,0 @@ -# sprintf() does not support %f on m6811/m6812 target. -if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"]} { - return 1 -} -return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/960312-1.x b/gcc/testsuite/gcc.c-torture/execute/960312-1.x deleted file mode 100644 index ed4bac41066..00000000000 --- a/gcc/testsuite/gcc.c-torture/execute/960312-1.x +++ /dev/null @@ -1,7 +0,0 @@ -# This test fails on HC11/HC12 when it is compiled without -mshort because -# is uses an asm that requires two 32-bit registers (int). It passes -# when using -mshort because there are enough registers; force -mshort. -if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"] } { - set options "-mshort" -} -return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/980709-1.x b/gcc/testsuite/gcc.c-torture/execute/980709-1.x index f64f5588620..307f568859c 100644 --- a/gcc/testsuite/gcc.c-torture/execute/980709-1.x +++ b/gcc/testsuite/gcc.c-torture/execute/980709-1.x @@ -1,11 +1,7 @@ -# pow() is not available on m6811/m6812 target, this test will not link. -if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"]} { - return 1 -} # XFAIL this test for AIX using -msoft-float. # This test calls the system libm.a function pow. # A false failure is reported if -msoft-float is used. -# AIX expects the the parameters to be passed in fp regs. +# AIX expects the parameters to be passed in fp regs. if { [istarget powerpc-*-aix*] || [istarget rs6000-*-aix*] } { set torture_eval_before_execute { global compiler_conditional_xfail_data diff --git a/gcc/testsuite/gcc.c-torture/execute/990826-0.x b/gcc/testsuite/gcc.c-torture/execute/990826-0.x index 689aebfe366..477c10bba5b 100644 --- a/gcc/testsuite/gcc.c-torture/execute/990826-0.x +++ b/gcc/testsuite/gcc.c-torture/execute/990826-0.x @@ -1,11 +1,7 @@ -# floor() is not available on m6811/m6812 target, this test will not link. -if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"]} { - return 1 -} # XFAIL this test for AIX using -msoft-float. # This test calls the system libm.a function floor. # A false failure is reported if -msoft-float is used. -# AIX expects the the parameters to be passed in fp regs. +# AIX expects the parameters to be passed in fp regs. if { [istarget powerpc-*-aix*] || [istarget rs6000-*-aix*] } { set torture_eval_before_execute { global compiler_conditional_xfail_data diff --git a/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c b/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c index 62832a9bffc..4378b719e83 100644 --- a/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c +++ b/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target int32plus } */ + #define F 140 #define T 13 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42544.c b/gcc/testsuite/gcc.c-torture/execute/pr42544.c new file mode 100644 index 00000000000..c5951b06a17 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr42544.c @@ -0,0 +1,14 @@ +/* PR c/42544 */ + +extern void abort (void); + +int +main () +{ + signed short s = -1; + if (sizeof (long long) == sizeof (unsigned int)) + return 0; + if ((unsigned int) s >= 0x100000000ULL) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr45262.c b/gcc/testsuite/gcc.c-torture/execute/pr45262.c index 72e186bf287..e94f4ff29ec 100644 --- a/gcc/testsuite/gcc.c-torture/execute/pr45262.c +++ b/gcc/testsuite/gcc.c-torture/execute/pr45262.c @@ -1,4 +1,5 @@ /* PR middle-end/45262 */ +/* { dg-require-effective-target int32plus } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.c-torture/execute/pr48197.c b/gcc/testsuite/gcc.c-torture/execute/pr48197.c new file mode 100644 index 00000000000..37812c07b0c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr48197.c @@ -0,0 +1,25 @@ +/* PR c/48197 */ + +extern void abort (void); +static int y = 0x8000; + +int +main () +{ + unsigned int x = (short)y; + if (sizeof (0LL) == sizeof (0U)) + return 0; + if (0LL > (0U ^ (short)-0x8000)) + abort (); + if (0LL > (0U ^ x)) + abort (); + if (0LL > (0U ^ (short)y)) + abort (); + if ((0U ^ (short)-0x8000) < 0LL) + abort (); + if ((0U ^ x) < 0LL) + abort (); + if ((0U ^ (short)y) < 0LL) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr48717.c b/gcc/testsuite/gcc.c-torture/execute/pr48717.c new file mode 100644 index 00000000000..a746374a26d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr48717.c @@ -0,0 +1,26 @@ +/* PR tree-optimization/48717 */ + +extern void abort (void); + +int v = 1, w; + +unsigned short +foo (unsigned short x, unsigned short y) +{ + return x + y; +} + +void +bar (void) +{ + v = foo (~w, w); +} + +int +main () +{ + bar (); + if (v != (unsigned short) -1) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr48809.c b/gcc/testsuite/gcc.c-torture/execute/pr48809.c new file mode 100644 index 00000000000..80de5bc8a3e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr48809.c @@ -0,0 +1,60 @@ +/* PR tree-optimization/48809 */ + +extern void abort (void); + +int +foo (signed char x) +{ + int y = 0; + switch (x) + { + case 0: y = 1; break; + case 1: y = 7; break; + case 2: y = 2; break; + case 3: y = 19; break; + case 4: y = 5; break; + case 5: y = 17; break; + case 6: y = 31; break; + case 7: y = 8; break; + case 8: y = 28; break; + case 9: y = 16; break; + case 10: y = 31; break; + case 11: y = 12; break; + case 12: y = 15; break; + case 13: y = 111; break; + case 14: y = 17; break; + case 15: y = 10; break; + case 16: y = 31; break; + case 17: y = 7; break; + case 18: y = 2; break; + case 19: y = 19; break; + case 20: y = 5; break; + case 21: y = 107; break; + case 22: y = 31; break; + case 23: y = 8; break; + case 24: y = 28; break; + case 25: y = 106; break; + case 26: y = 31; break; + case 27: y = 102; break; + case 28: y = 105; break; + case 29: y = 111; break; + case 30: y = 17; break; + case 31: y = 10; break; + case 32: y = 31; break; + case 98: y = 18; break; + case -62: y = 19; break; + } + return y; +} + +int +main () +{ + if (foo (98) != 18 || foo (97) != 0 || foo (99) != 0) + abort (); + if (foo (-62) != 19 || foo (-63) != 0 || foo (-61) != 0) + abort (); + if (foo (28) != 105 || foo (27) != 102 || foo (29) != 111) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/20020312-2.c b/gcc/testsuite/gcc.dg/20020312-2.c index bf8225a1a6b..0689636b2da 100644 --- a/gcc/testsuite/gcc.dg/20020312-2.c +++ b/gcc/testsuite/gcc.dg/20020312-2.c @@ -58,6 +58,8 @@ extern void abort (void); # else # define PIC_REG "30" # endif +#elif defined(__RX__) +/* No pic register. */ #elif defined(__s390__) # define PIC_REG "12" #elif defined(__sparc__) diff --git a/gcc/testsuite/gcc.dg/Waddress.c b/gcc/testsuite/gcc.dg/Waddress.c new file mode 100644 index 00000000000..146b1a932df --- /dev/null +++ b/gcc/testsuite/gcc.dg/Waddress.c @@ -0,0 +1,10 @@ +/* PR c/36299 */ +/* { dg-do compile } */ +/* { dg-options "-Waddress" } */ + +int +foo(void) +{ + char a[1]; + return a == 0; +} diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-asm.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-asm.c new file mode 100644 index 00000000000..45373bc1a98 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-asm.c @@ -0,0 +1,47 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c89 -pedantic" } */ + +#define TEN " " +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +__asm__ (HUN HUN HUN HUN HUN TEN); + +/* C99's minimum-maximum is 4095. */ +__asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"); + +void +f (void) +{ + /* C89's minimum-maximum is 509. */ + __asm__ (HUN HUN HUN HUN HUN TEN); + __asm__ (HUN HUN HUN HUN HUN TEN : : ); + __asm__ goto (HUN HUN HUN HUN HUN TEN : : : : label); + + /* C99's minimum-maximum is 4095. */ + __asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"); + __asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456" : : ); + __asm__ goto ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456" : : : : label); + + label: ; +} diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-ext.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-ext.c new file mode 100644 index 00000000000..09b8079d553 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-ext.c @@ -0,0 +1,19 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c89 -pedantic" } */ + +#define TEN "xxxxxxxxxx" +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +const char x510[] = __extension__ HUN HUN HUN HUN HUN TEN; + +/* C99's minimum-maximum is 4095. */ +const char x4096[] = __extension__ + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"; diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-asm.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-asm.c new file mode 100644 index 00000000000..b5523bc8906 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-asm.c @@ -0,0 +1,48 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c90 -pedantic" } */ + +#define TEN " " +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +__asm__ (HUN HUN HUN HUN HUN TEN); + +/* C99's minimum-maximum is 4095. */ +__asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"); + +void +f (void) +{ + /* C89's minimum-maximum is 509. */ + __asm__ (HUN HUN HUN HUN HUN TEN); + __asm__ (HUN HUN HUN HUN HUN TEN : :); + __asm__ goto (HUN HUN HUN HUN HUN TEN : : : : label); + + /* C99's minimum-maximum is 4095. */ + __asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"); + __asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456" : :); + __asm__ goto ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456" : : : : label); + + label: ; +} + diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-ext.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-ext.c new file mode 100644 index 00000000000..6fbaebef341 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-ext.c @@ -0,0 +1,19 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c90 -pedantic" } */ + +#define TEN "xxxxxxxxxx" +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +const char x510[] = __extension__ HUN HUN HUN HUN HUN TEN; + +/* C99's minimum-maximum is 4095. */ +const char x4096[] = __extension__ + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"; diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-asm.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-asm.c new file mode 100644 index 00000000000..8840e38bdc4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-asm.c @@ -0,0 +1,48 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c99 -pedantic" } */ + +#define TEN " " +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +__asm__ (HUN HUN HUN HUN HUN TEN); + +/* C99's minimum-maximum is 4095. */ +__asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"); + +void +f (void) +{ + /* C89's minimum-maximum is 509. */ + __asm__ (HUN HUN HUN HUN HUN TEN); + __asm__ (HUN HUN HUN HUN HUN TEN : :); + __asm__ goto (HUN HUN HUN HUN HUN TEN : : : : label); + + /* C99's minimum-maximum is 4095. */ + __asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"); + __asm__ ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456" : :); + __asm__ goto ( + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456" : : : : label); + + label: ; +} + diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-ext.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-ext.c new file mode 100644 index 00000000000..93d5e4600fc --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-ext.c @@ -0,0 +1,19 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c99 -pedantic" } */ + +#define TEN "xxxxxxxxxx" +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +const char x510[] = HUN HUN HUN HUN HUN TEN; + +/* C99's minimum-maximum is 4095. */ +const char x4096[] = __extension__ + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"; diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c new file mode 100644 index 00000000000..16014bb15c5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wstrict-overflow" } */ + +unsigned int +do_scrolling (unsigned int window_size, unsigned int writecost) +{ + unsigned int i = window_size; + + int terminal_window_p = 0; + unsigned int queue = 0; + + for (i = window_size; i; i--) + { + if (writecost < i) + ++queue; + else if (writecost & 1) + terminal_window_p = 1; + } + + if (queue > 0) + { + if (!terminal_window_p) + { + terminal_window_p = 1; + } + } + + if (terminal_window_p) + return 100; + return 0; +} diff --git a/gcc/testsuite/gcc.dg/anon-struct-11.c b/gcc/testsuite/gcc.dg/anon-struct-11.c index 1084e5bded6..c2f85fc24e4 100644 --- a/gcc/testsuite/gcc.dg/anon-struct-11.c +++ b/gcc/testsuite/gcc.dg/anon-struct-11.c @@ -50,7 +50,7 @@ struct E { struct F { char f; }; /* { dg-warning "does not declare anything" } */ char c; union { - D; + D; /* { dg-warning "does not declare anything" } */ }; char e; }; @@ -85,7 +85,7 @@ test2 (void) e.e = 5; f2 (&e); /* { dg-warning "incompatible pointer type" } */ f3 (&e); /* { dg-warning "incompatible pointer type" } */ - if (e.d != 4) + if (e.d != 4) /* { dg-error "no member" } */ abort (); if (e.f != 6) /* { dg-error "no member" } */ abort (); diff --git a/gcc/testsuite/gcc.dg/binop-xor1.c b/gcc/testsuite/gcc.dg/binop-xor1.c new file mode 100644 index 00000000000..53a2ce23ab3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/binop-xor1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int +foo (int a, int b, int c) +{ + return ((a && !b && c) || (!a && b && c)); +} + +/* We expect to see "<bb N>"; confirm that, so that we know to count + it in the real test. */ +/* { dg-final { scan-tree-dump-times "<bb\[^>\]*>" 5 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\\\^" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/binop-xor2.c b/gcc/testsuite/gcc.dg/binop-xor2.c new file mode 100644 index 00000000000..51b41dd7ff6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/binop-xor2.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int +foo (int a, int b) +{ + return ((a & ~b) | (~a & b)); +} + +/* We expect to see "<bb N>"; confirm that, so that we know to count + it in the real test. */ +/* { dg-final { scan-tree-dump-times "<bb\[^>\]*>" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\\\^" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/binop-xor3.c b/gcc/testsuite/gcc.dg/binop-xor3.c new file mode 100644 index 00000000000..97c7888189a --- /dev/null +++ b/gcc/testsuite/gcc.dg/binop-xor3.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int +foo (int a, int b) +{ + return ((a && !b) || (!a && b)); +} + +/* We expect to see "<bb N>"; confirm that, so that we know to count + it in the real test. */ +/* { dg-final { scan-tree-dump-times "<bb\[^>\]*>" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\\\^" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/binop-xor4.c b/gcc/testsuite/gcc.dg/binop-xor4.c new file mode 100644 index 00000000000..f87950a3335 --- /dev/null +++ b/gcc/testsuite/gcc.dg/binop-xor4.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int +foo (int a, int b, int c) +{ + return ((a & ~b) | (~a & b)) & c; +} + +/* We expect to see "<bb N>"; confirm that, so that we know to count + it in the real test. */ +/* { dg-final { scan-tree-dump-times "<bb\[^>\]*>" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\\\^" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/binop-xor5.c b/gcc/testsuite/gcc.dg/binop-xor5.c new file mode 100644 index 00000000000..256c4bfa82a --- /dev/null +++ b/gcc/testsuite/gcc.dg/binop-xor5.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int +foo (int a, int b, int c) +{ + return ((a & ~b & c) | (~a & b & c)); +} + +/* We expect to see "<bb N>"; confirm that, so that we know to count + it in the real test. */ +/* { dg-final { scan-tree-dump-times "<bb\[^>\]*>" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\\\^" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\&" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/bitfld-15.c b/gcc/testsuite/gcc.dg/bitfld-15.c index 44d53b34ae2..03f43f2de8c 100644 --- a/gcc/testsuite/gcc.dg/bitfld-15.c +++ b/gcc/testsuite/gcc.dg/bitfld-15.c @@ -2,6 +2,7 @@ /* Remove pedantic. Allow the GCC extension to use char for bitfields. */ /* { dg-options "" } */ /* { dg-options "-mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-mno-ms-bitfields -Wno-packed-bitfield-compat" { target { i?86-*-mingw* x86_64-*-mingw* } } } */ struct t { diff --git a/gcc/testsuite/gcc.dg/bitfld-16.c b/gcc/testsuite/gcc.dg/bitfld-16.c index 0a89bdab1ff..5ed30f74392 100644 --- a/gcc/testsuite/gcc.dg/bitfld-16.c +++ b/gcc/testsuite/gcc.dg/bitfld-16.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-Wno-packed-bitfield-compat" } */ /* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target { i?86-*-mingw* x86_64-*-mingw* } } } */ struct t { diff --git a/gcc/testsuite/gcc.dg/bitfld-17.c b/gcc/testsuite/gcc.dg/bitfld-17.c index 80099c6c9a2..9512f5fdf2a 100644 --- a/gcc/testsuite/gcc.dg/bitfld-17.c +++ b/gcc/testsuite/gcc.dg/bitfld-17.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "" } */ /* { dg-options "-mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-mno-ms-bitfields -Wno-packed-bitfield-compat" { target { i?86-*-mingw* x86_64-*-mingw* } } } */ struct t { diff --git a/gcc/testsuite/gcc.dg/bitfld-18.c b/gcc/testsuite/gcc.dg/bitfld-18.c index cb24c65d723..067d9ae3851 100644 --- a/gcc/testsuite/gcc.dg/bitfld-18.c +++ b/gcc/testsuite/gcc.dg/bitfld-18.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-Wno-packed-bitfield-compat" } */ /* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target i?86-*-netware } } */ +/* { dg-options "-Wno-packed-bitfield-compat -mno-ms-bitfields" { target { i?86-*-mingw* x86_64-*-mingw* } } } */ struct t { diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-10.c b/gcc/testsuite/gcc.dg/builtin-object-size-10.c new file mode 100644 index 00000000000..6c7ed45b6e0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-object-size-10.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-objsz-details" } */ + +typedef struct { + char sentinel[4]; + char data[0]; +} drone_packet; +typedef struct { + char type_str[16]; + char channel_hop; +} drone_source_packet; +drone_packet * +foo(char *x) +{ + drone_packet *dpkt = __builtin_malloc(sizeof(drone_packet) + + sizeof(drone_source_packet)); + drone_source_packet *spkt = (drone_source_packet *) dpkt->data; + __builtin___snprintf_chk (spkt->type_str, 16, + 1, __builtin_object_size (spkt->type_str, 1), + "%s", x); + return dpkt; +} + +/* { dg-final { scan-tree-dump "maximum object size 21" "objsz" } } */ +/* { dg-final { scan-tree-dump "maximum subobject size 16" "objsz" } } */ +/* { dg-final { cleanup-tree-dump "objsz" } } */ diff --git a/gcc/testsuite/gcc.dg/c1x-anon-struct-1.c b/gcc/testsuite/gcc.dg/c1x-anon-struct-1.c index 711fe65df3d..6d4b433d733 100644 --- a/gcc/testsuite/gcc.dg/c1x-anon-struct-1.c +++ b/gcc/testsuite/gcc.dg/c1x-anon-struct-1.c @@ -4,20 +4,13 @@ #include <stddef.h> -typedef struct -{ - int i; -} s0; - -typedef union -{ - int i; -} u0; - struct s1 { int a; - u0; + union + { + int i; + }; struct { int b; @@ -27,7 +20,10 @@ struct s1 union u1 { int b; - s0; + struct + { + int i; + }; union { int c; @@ -44,7 +40,10 @@ struct s2 struct s3 { - u0; + union + { + int i; + }; }; struct s4 diff --git a/gcc/testsuite/gcc.dg/c1x-anon-struct-3.c b/gcc/testsuite/gcc.dg/c1x-anon-struct-3.c new file mode 100644 index 00000000000..1841eddd0a1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c1x-anon-struct-3.c @@ -0,0 +1,34 @@ +/* Test for anonymous structures and unions in C1X. Test for invalid + cases: typedefs disallowed by N1549. */ +/* { dg-do compile } */ +/* { dg-options "-std=c1x -pedantic-errors" } */ + +typedef struct +{ + int i; +} s0; + +typedef union +{ + int i; +} u0; + +struct s1 +{ + int a; + u0; /* { dg-error "declaration does not declare anything" } */ + struct + { + int b; + }; +}; + +union u1 +{ + int b; + s0; /* { dg-error "declaration does not declare anything" } */ + union + { + int c; + }; +}; diff --git a/gcc/testsuite/gcc.dg/c1x-typedef-1.c b/gcc/testsuite/gcc.dg/c1x-typedef-1.c index 2b0bc74208a..a68b23ff5e6 100644 --- a/gcc/testsuite/gcc.dg/c1x-typedef-1.c +++ b/gcc/testsuite/gcc.dg/c1x-typedef-1.c @@ -3,7 +3,8 @@ /* { dg-options "-std=c1x -pedantic-errors" } */ /* C1X permits typedefs to be redeclared to the same type, but not to - different-but-compatible types. */ + different-but-compatible types, and not when the type is variably + modified. */ #include <limits.h> @@ -60,9 +61,10 @@ f (void) typedef void FN2(int (*p)[*]); /* { dg-message "previous declaration" } */ typedef void FN2(int (*p)[]); /* { dg-error "with different type" } */ typedef int AV[a]; /* { dg-message "previous declaration" } */ - typedef int AV[b-1]; /* { dg-warning "may be a constraint violation at runtime" } */ - typedef int AAa[a]; + typedef int AV[b-1]; /* { dg-error "redefinition" } */ + typedef int AAa[a]; /* { dg-message "previous declaration" } */ typedef int AAb[b-1]; typedef AAa *VF(void); /* { dg-message "previous declaration" } */ - typedef AAb *VF(void); /* { dg-warning "may be a constraint violation at runtime" } */ + typedef AAb *VF(void); /* { dg-error "redefinition" } */ + typedef AAa AAa; /* { dg-error "redefinition" } */ } diff --git a/gcc/testsuite/gcc.dg/c1x-typedef-2.c b/gcc/testsuite/gcc.dg/c1x-typedef-2.c deleted file mode 100644 index fb5d918a5d3..00000000000 --- a/gcc/testsuite/gcc.dg/c1x-typedef-2.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Test typedef redeclaration in C1X. Side effects from duplicate - declarations still apply. */ -/* { dg-do run } */ -/* { dg-options "-std=c1x -pedantic-errors" } */ - -extern void exit (int); -extern void abort (void); - -int -main (void) -{ - int a = 1, b = 1; - typedef int T[++a]; /* { dg-message "previous declaration" } */ - typedef int T[++b]; /* { dg-warning "may be a constraint violation at runtime" } */ - if (a != 2 || b != 2) - abort (); - exit (0); -} diff --git a/gcc/testsuite/gcc.dg/cast-qual-3.c b/gcc/testsuite/gcc.dg/cast-qual-3.c deleted file mode 100644 index 88fdcfb38f5..00000000000 --- a/gcc/testsuite/gcc.dg/cast-qual-3.c +++ /dev/null @@ -1,167 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Wcast-qual" } */ - -/* The files gcc.dg/cast-qual-3.c and g++.dg/warn/Wcast-qual2.c are - duals. they are intended to show that gcc -Wcast-qual and g++ - -Wcast-qual emit warnings in the same cases. If you change this - file, please also change the other one. */ - -void -f1 (void *bar) -{ - const void *p1 = (const void *) bar; - const char *p2 = (const char *) bar; - const void **p3 = (const void **) bar; - const char **p4 = (const char **) bar; - const void * const *p5 = (const void * const *) bar; - const char * const *p6 = (const char * const *) bar; - void * const *p7 = (void * const *) bar; - char * const *p8 = (char * const *) bar; - const void ***p9 = (const void ***) bar; - const char ***p10 = (const char ***) bar; - void * const **p11 = (void * const **) bar; - char * const **p12 = (char * const **) bar; - void ** const *p13 = (void ** const *) bar; - char ** const *p14 = (char ** const *) bar; - const void * const **p15 = (const void * const **) bar; - const char * const **p16 = (const char * const **) bar; - const void ** const *p17 = (const void ** const *) bar; - const char ** const *p18 = (const char ** const *) bar; - void * const * const * p19 = (void * const * const *) bar; - char * const * const * p20 = (char * const * const *) bar; - const void * const * const *p21 = (const void * const * const *) bar; - const char * const * const *p22 = (const char * const * const *) bar; -} - -void -f2 (void **bar) -{ - const void *p1 = (const void *) bar; - const char *p2 = (const char *) bar; - const void **p3 = (const void **) bar; /* { dg-warning "cast" } */ - const char **p4 = (const char **) bar; - const void * const *p5 = (const void * const *) bar; - const char * const *p6 = (const char * const *) bar; - void * const *p7 = (void * const *) bar; - char * const *p8 = (char * const *) bar; - const void ***p9 = (const void ***) bar; - const char ***p10 = (const char ***) bar; - void * const **p11 = (void * const **) bar; - char * const **p12 = (char * const **) bar; - void ** const *p13 = (void ** const *) bar; - char ** const *p14 = (char ** const *) bar; - const void * const **p15 = (const void * const **) bar; - const char * const **p16 = (const char * const **) bar; - const void ** const *p17 = (const void ** const *) bar; - const char ** const *p18 = (const char ** const *) bar; - void * const * const * p19 = (void * const * const *) bar; - char * const * const * p20 = (char * const * const *) bar; - const void * const * const *p21 = (const void * const * const *) bar; - const char * const * const *p22 = (const char * const * const *) bar; -} - -void -f3 (void ***bar) -{ - const void *p1 = (const void *) bar; - const char *p2 = (const char *) bar; - const void **p3 = (const void **) bar; - const char **p4 = (const char **) bar; - const void * const *p5 = (const void * const *) bar; - const char * const *p6 = (const char * const *) bar; - void * const *p7 = (void * const *) bar; - char * const *p8 = (char * const *) bar; - const void ***p9 = (const void ***) bar; /* { dg-warning "cast" } */ - const char ***p10 = (const char ***) bar; - void * const **p11 = (void * const **) bar; /* { dg-warning "cast" } */ - char * const **p12 = (char * const **) bar; - void ** const *p13 = (void ** const *) bar; - char ** const *p14 = (char ** const *) bar; - const void * const **p15 = (const void * const **) bar; /* { dg-warning "cast" } */ - const char * const **p16 = (const char * const **) bar; - const void ** const *p17 = (const void ** const *) bar; /* { dg-warning "cast" } */ - const char ** const *p18 = (const char ** const *) bar; - void * const * const * p19 = (void * const * const *) bar; - char * const * const * p20 = (char * const * const *) bar; - const void * const * const *p21 = (const void * const * const *) bar; - const char * const * const *p22 = (const char * const * const *) bar; -} - -void -f4 (void * const **bar) -{ - const void ***p9 = (const void ***) bar; /* { dg-warning "cast" } */ - void * const **p11 = (void * const **) bar; - void ** const *p13 = (void ** const *) bar; /* { dg-warning "cast" } */ - const void * const **p15 = (const void * const **) bar; /* { dg-warning "cast" } */ - const void ** const *p17 = (const void ** const *) bar; /* { dg-warning "cast" } */ - void * const * const * p19 = (void * const * const *) bar; - const void * const * const *p21 = (const void * const * const *) bar; -} - -void -f5 (char ***bar) -{ - volatile const char ***p9 = (volatile const char ***) bar; /* { dg-warning "cast" } */ - volatile char * const **p11 = (volatile char * const **) bar; /* { dg-warning "cast" } */ - volatile char ** const *p13 = (volatile char ** const *) bar; /* { dg-warning "cast" } */ - volatile const char * const **p15 = (volatile const char * const **) bar; /* { dg-warning "cast" } */ - volatile const char ** const *p17 = (volatile const char ** const *) bar; /* { dg-warning "cast" } */ - volatile char * const * const * p19 = (volatile char * const * const *) bar; - volatile const char * const * const *p21 = (volatile const char * const * const *) bar; -} - -void -f6 (char ***bar) -{ - const char * volatile **p9 = (const char * volatile **) bar; /* { dg-warning "cast" } */ - char * volatile const **p11 = (char * volatile const **) bar; /* { dg-warning "cast" } */ - char * volatile * const *p13 = (char * volatile * const *) bar; - const char * volatile const **p15 = (const char * volatile const **) bar; /* { dg-warning "cast" } */ - const char * volatile * const *p17 = (const char * volatile * const *) bar; /* { dg-warning "cast" } */ - char * volatile const * const * p19 = (char * volatile const * const *) bar; - const char * volatile const * const *p21 = (const char * volatile const * const *) bar; -} - -void -f7 (char ***bar) -{ - const char ** volatile *p9 = (const char ** volatile *) bar; /* { dg-warning "cast" } */ - char * const * volatile *p11 = (char * const * volatile *) bar; /* { dg-warning "cast" } */ - char ** volatile const *p13 = (char ** volatile const *) bar; - const char * const * volatile *p15 = (const char * const * volatile *) bar; /* { dg-warning "cast" } */ - const char ** volatile const *p17 = (const char ** volatile const *) bar; /* { dg-warning "cast" } */ - char * const * volatile const * p19 = (char * const * volatile const *) bar; - const char * const * volatile const *p21 = (const char * const * volatile const *) bar; -} - -typedef int (intfn) (int); -typedef intfn *pintfn; -typedef const intfn *constfn; - -void -f8 (constfn ***bar) -{ - const constfn *p1 = (const constfn *) bar; - const pintfn *p2 = (const pintfn *) bar; - const constfn **p3 = (const constfn **) bar; - const pintfn **p4 = (const pintfn **) bar; - const constfn * const *p5 = (const constfn * const *) bar; - const pintfn * const *p6 = (const pintfn * const *) bar; - constfn * const *p7 = (constfn * const *) bar; - pintfn * const *p8 = (pintfn * const *) bar; - const constfn ***p9 = (const constfn ***) bar; /* { dg-warning "cast" } */ - const pintfn ***p10 = (const pintfn ***) bar; /* { dg-warning "cast" } */ - constfn * const **p11 = (constfn * const **) bar; /* { dg-warning "cast" } */ - pintfn * const **p12 = (pintfn * const **) bar; /* { dg-warning "cast" } */ - constfn ** const *p13 = (constfn ** const *) bar; - pintfn ** const *p14 = (pintfn ** const *) bar; - const constfn * const **p15 = (const constfn * const **) bar; /* { dg-warning "cast" } */ - const pintfn * const **p16 = (const pintfn * const **) bar; /* { dg-warning "cast" } */ - const constfn ** const *p17 = (const constfn ** const *) bar; /* { dg-warning "cast" } */ - const pintfn ** const *p18 = (const pintfn ** const *) bar; /* { dg-warning "cast" } */ - constfn * const * const * p19 = (constfn * const * const *) bar; - pintfn * const * const * p20 = (pintfn * const * const *) bar; - const constfn * const * const *p21 = (const constfn * const * const *) bar; - const pintfn * const * const *p22 = (const pintfn * const * const *) bar; -} diff --git a/gcc/testsuite/gcc.dg/cpp/assert4.c b/gcc/testsuite/gcc.dg/cpp/assert4.c index 0bd88ce0681..ff53946c6ce 100644 --- a/gcc/testsuite/gcc.dg/cpp/assert4.c +++ b/gcc/testsuite/gcc.dg/cpp/assert4.c @@ -139,14 +139,6 @@ /* Check for #cpu and #machine assertions. */ -#if defined __arc__ -# if !#cpu(arc) || !#machine(arc) -# error -# endif -#elif #cpu(arc) || #machine(arc) -# error -#endif - #if defined __alpha__ # if !#cpu(alpha) || !#machine(alpha) \ || (defined __alpha_cix__ && !#cpu(cix)) \ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c new file mode 100644 index 00000000000..2e4c3cda86c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -dA" } */ + +typedef struct _Harry { int dummy; } Harry_t; +Harry_t harry; + +/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c new file mode 100644 index 00000000000..13856d7aa0d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -dA" } */ + +typedef const struct _Harry { int dummy; } Harry_t; +Harry_t harry; + +/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c new file mode 100644 index 00000000000..f1e463e45dc --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -dA" } */ + +typedef struct _Harry { int dummy; } Harry_t; +const Harry_t harry[5]; + +/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c new file mode 100644 index 00000000000..cf0a2af6ced --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -dA" } */ + +typedef const struct _Harry { int dummy; } Harry_t; +Harry_t harry[10]; + +/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/dfp/pr48204.c b/gcc/testsuite/gcc.dg/dfp/pr48204.c new file mode 100644 index 00000000000..7b421581e6e --- /dev/null +++ b/gcc/testsuite/gcc.dg/dfp/pr48204.c @@ -0,0 +1,10 @@ +/* PR debug/48204 */ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre -g" } */ + +void +foo (void) +{ + float cf = 3.0f; + _Decimal64 d64 = cf; +} diff --git a/gcc/testsuite/gcc.dg/dfp/pr48928.c b/gcc/testsuite/gcc.dg/dfp/pr48928.c new file mode 100644 index 00000000000..1fd36356594 --- /dev/null +++ b/gcc/testsuite/gcc.dg/dfp/pr48928.c @@ -0,0 +1,10 @@ +/* PR debug/48928 */ +/* { dg-do compile } */ +/* { dg-options "-g -O2" } */ + +_Decimal32 +foo (_Decimal32 x) +{ + _Decimal32 y = (x + x) / (9.DF * x); + return y; +} diff --git a/gcc/testsuite/gcc.dg/fold-complex-1.c b/gcc/testsuite/gcc.dg/fold-complex-1.c new file mode 100644 index 00000000000..a9ba0fd59c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fold-complex-1.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ffast-math -fdump-tree-original" } */ + +_Complex float +foo (_Complex float x) +{ + return __real x + 1.0iF * __imag x; +} + +/* { dg-final { scan-tree-dump-times "COMPLEX_EXPR" 0 "original" } } */ +/* { dg-final { cleanup-tree-dump "original" } } */ diff --git a/gcc/testsuite/gcc.dg/gomp/pr48591.c b/gcc/testsuite/gcc.dg/gomp/pr48591.c new file mode 100644 index 00000000000..e6cb106d845 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr48591.c @@ -0,0 +1,22 @@ +/* PR middle-end/48591 */ +/* { dg-do compile { target i?86-*-* x86_64-*-* ia64-*-* } } */ +/* { dg-options "-fopenmp" } */ + +extern void abort (void); + +int +main () +{ + __float128 f = 0.0; + int i; + #pragma omp parallel for reduction(+:f) + for (i = 0; i < 128; i++) + f += 0.5Q; + if (f != 64.0Q) + abort (); + #pragma omp atomic + f += 8.5Q; + if (f != 72.5Q) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/gomp/pr48716.c b/gcc/testsuite/gcc.dg/gomp/pr48716.c new file mode 100644 index 00000000000..3496e2f0227 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr48716.c @@ -0,0 +1,24 @@ +/* PR c/48716 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +int +main (void) +{ + #pragma omp parallel default(none) + { + static int s; + int t = 0; + #pragma omp atomic + s++; + t++; + } + #pragma omp task default(none) + { + static int s; + int t = 0; + #pragma omp atomic + s++; + t++; + } +} diff --git a/gcc/testsuite/gcc.dg/graphite/block-3.c b/gcc/testsuite/gcc.dg/graphite/block-3.c index 322ed8d7f89..3b9db31fa79 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-3.c +++ b/gcc/testsuite/gcc.dg/graphite/block-3.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target size32plus } */ +/* { dg-require-effective-target run_expensive_tests } PR testsuite/48283 */ /* { dg-timeout-factor 4.0 } */ #define DEBUG 0 diff --git a/gcc/testsuite/gcc.dg/graphite/block-4.c b/gcc/testsuite/gcc.dg/graphite/block-4.c index eb98f0447aa..c206bf824b8 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-4.c +++ b/gcc/testsuite/gcc.dg/graphite/block-4.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target size32plus } */ +/* { dg-require-effective-target run_expensive_tests } PR testsuite/48283 */ #define DEBUG 0 #if DEBUG diff --git a/gcc/testsuite/gcc.dg/graphite/block-7.c b/gcc/testsuite/gcc.dg/graphite/block-7.c index fbbe1f3ad51..bf9c60f415c 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-7.c +++ b/gcc/testsuite/gcc.dg/graphite/block-7.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target size32plus } */ +/* { dg-require-effective-target run_expensive_tests } PR testsuite/48283 */ #define DEBUG 0 #if DEBUG diff --git a/gcc/testsuite/gcc.dg/graphite/block-8.c b/gcc/testsuite/gcc.dg/graphite/block-8.c index 9c1c9cebe83..4e2f358fca7 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-8.c +++ b/gcc/testsuite/gcc.dg/graphite/block-8.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target size32plus } */ +/* { dg-require-effective-target run_expensive_tests } PR testsuite/48283 */ #define DEBUG 0 #if DEBUG diff --git a/gcc/testsuite/gcc.dg/guality/guality.exp b/gcc/testsuite/gcc.dg/guality/guality.exp index 49e2ac5a550..5e3284d5d11 100644 --- a/gcc/testsuite/gcc.dg/guality/guality.exp +++ b/gcc/testsuite/gcc.dg/guality/guality.exp @@ -4,7 +4,8 @@ load_lib gcc-dg.exp load_lib gcc-gdb-test.exp # Disable on darwin until radr://7264615 is resolved. -if { [istarget *-*-darwin*] } { +# Disable on Tru64 UNIX (PR testsuite/48251). +if { [istarget *-*-darwin*] || [istarget alpha*-dec-osf*] } { return } diff --git a/gcc/testsuite/gcc.dg/guality/pr36977.c b/gcc/testsuite/gcc.dg/guality/pr36977.c new file mode 100644 index 00000000000..3689fae8c43 --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr36977.c @@ -0,0 +1,32 @@ +/* PR debug/36977 */ +/* { dg-do run } */ +/* { dg-options "-g" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + +void +foo () +{ +} + +int +main () +{ + struct { char c[100]; } cbig; + struct { int i[800]; } ibig; + struct { long l[900]; } lbig; + struct { float f[200]; } fbig; + struct { double d[300]; } dbig; + struct { short s[400]; } sbig; + + ibig.i[0] = 55; /* { dg-final { gdb-test 30 "ibig.i\[0\]" "55" } } */ + ibig.i[100] = 5; /* { dg-final { gdb-test 30 "ibig.i\[100\]" "5" } } */ + cbig.c[0] = '\0'; /* { dg-final { gdb-test 30 "cbig.c\[0\]" "'\\0'" } } */ + cbig.c[99] = 'A'; /* { dg-final { gdb-test 30 "cbig.c\[99\]" "'A'" } } */ + fbig.f[100] = 11.0; /* { dg-final { gdb-test 30 "fbig.f\[100\]" "11" } } */ + dbig.d[202] = 9.0; /* { dg-final { gdb-test 30 "dbig.d\[202\]" "9" } } */ + sbig.s[90] = 255; /* { dg-final { gdb-test 30 "sbig.s\[90\]" "255" } } */ + lbig.l[333] = 999; /* { dg-final { gdb-test 30 "lbig.l\[333\]" "999" } } */ + + foo (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/guality/pr45882.c b/gcc/testsuite/gcc.dg/guality/pr45882.c new file mode 100644 index 00000000000..5ca22d4f4ad --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr45882.c @@ -0,0 +1,30 @@ +/* PR debug/45882 */ +/* { dg-do run } */ +/* { dg-options "-g" } */ + +extern void abort (void); +int a[1024]; +volatile short int v; + +__attribute__((noinline,noclone,used)) int +foo (int i, int j) +{ + int b = i; /* { dg-final { gdb-test 16 "b" "7" } } */ + int c = i + 4; /* { dg-final { gdb-test 16 "c" "11" } } */ + int d = a[i]; /* { dg-final { gdb-test 16 "d" "112" } } */ + int e = a[i + 6]; /* { dg-final { gdb-test 16 "e" "142" } } */ + ++v; + return ++j; +} + +int +main (void) +{ + int l; + asm ("" : "=r" (l) : "0" (7)); + a[7] = 112; + a[7 + 6] = 142; + if (foo (l, 7) != 8) + abort (); + return l - 7; +} diff --git a/gcc/testsuite/gcc.dg/guality/pr48466.c b/gcc/testsuite/gcc.dg/guality/pr48466.c new file mode 100644 index 00000000000..8d5426a9989 --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr48466.c @@ -0,0 +1,41 @@ +/* PR debug/48466 */ +/* { dg-do run } */ +/* { dg-options "-g" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + +struct S { unsigned int a; unsigned int *b; }; +struct T { struct S a; struct S b; }; +struct U { const char *u; }; +int n[10]; +volatile int v; + +struct U +foo (const char *s) +{ + struct U r; + r.u = s; + return r; +} + +void +bar (struct T *s, int a, int b) +{ + s->a.a = a; + s->a.b = &s->a.a; + s->b.a = b; + s->b.b = &s->b.a; +} + +int +main () +{ + struct T t; + struct U x = foo ("this is x"); + struct S y, z; + y.b = n; /* { dg-final { gdb-test 38 "t.a.a" "17" } } */ + y.a = 0; /* { dg-final { gdb-test 38 "*t.a.b" "17" } } */ + bar (&t, 17, 21); /* { dg-final { gdb-test 38 "t.b.a" "21" } } */ + v++; /* { dg-final { gdb-test 38 "*t.b.b" "21" } } */ + z = y; + return 0; +} diff --git a/gcc/testsuite/gcc.dg/guality/vla-1.c b/gcc/testsuite/gcc.dg/guality/vla-1.c index 2db1c29caa6..651465428ac 100644 --- a/gcc/testsuite/gcc.dg/guality/vla-1.c +++ b/gcc/testsuite/gcc.dg/guality/vla-1.c @@ -28,9 +28,10 @@ f2 (int i) int main () { + volatile int j; int i = 5; asm volatile ("" : "=r" (i) : "0" (i)); - f1 (i); + j = f1 (i); f2 (i); return 0; } diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-pta-13.c b/gcc/testsuite/gcc.dg/ipa/ipa-pta-13.c index 1e04bfc2118..0f46e984bce 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-pta-13.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-pta-13.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-details -fdump-tree-fre" } */ +/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-details -fdump-tree-fre2" } */ static int x, y; @@ -54,9 +54,9 @@ int main() local_address_taken (&y); /* As we are computing flow- and context-insensitive we may not CSE the load of x here. */ - /* { dg-final { scan-tree-dump " = x;" "fre" } } */ + /* { dg-final { scan-tree-dump " = x;" "fre2" } } */ return x; } /* { dg-final { cleanup-ipa-dump "pta" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre2" } } */ diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-pta-14.c b/gcc/testsuite/gcc.dg/ipa/ipa-pta-14.c index 074f44a6d68..e8abc3244a0 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-pta-14.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-pta-14.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O2 -fipa-pta -fno-tree-sra -fdump-ipa-pta-details" } */ +/* { dg-options "-O2 -fipa-pta -fno-tree-fre -fno-tree-sra -fdump-ipa-pta-details" } */ struct X { int i; diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-pta-3.c b/gcc/testsuite/gcc.dg/ipa/ipa-pta-3.c index e73db1c95ac..ce9393cb072 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-pta-3.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-pta-3.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-details -fdump-tree-fre-details" } */ +/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-details -fdump-tree-fre2-details" } */ static int __attribute__((noinline,noclone)) foo (int *p, int *q) @@ -23,6 +23,6 @@ int main() /* { dg-final { scan-ipa-dump "foo.arg0 = &a" "pta" } } */ /* { dg-final { scan-ipa-dump "foo.arg1 = &b" "pta" } } */ -/* { dg-final { scan-tree-dump "Replaced \\\*p_1\\\(D\\\) with 1" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\*p_1\\\(D\\\) with 1" "fre2" } } */ +/* { dg-final { cleanup-tree-dump "fre2" } } */ /* { dg-final { cleanup-ipa-dump "pta" } } */ diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-pta-4.c b/gcc/testsuite/gcc.dg/ipa/ipa-pta-4.c index d2b901cf910..32e1e4fbc49 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-pta-4.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-pta-4.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-details -fdump-tree-fre-details" } */ +/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-details -fdump-tree-fre2-details" } */ int a, b; @@ -28,6 +28,6 @@ int main() /* { dg-final { scan-ipa-dump "foo.arg0 = &a" "pta" } } */ /* { dg-final { scan-ipa-dump "foo.arg1 = &b" "pta" } } */ -/* { dg-final { scan-tree-dump "Replaced \\\*p_1\\\(D\\\) with 1" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\*p_1\\\(D\\\) with 1" "fre2" } } */ +/* { dg-final { cleanup-tree-dump "fre2" } } */ /* { dg-final { cleanup-ipa-dump "pta" } } */ diff --git a/gcc/testsuite/gcc.dg/ipa/pr45644.c b/gcc/testsuite/gcc.dg/ipa/pr45644.c index 3f61b8b4127..3741020d93c 100644 --- a/gcc/testsuite/gcc.dg/ipa/pr45644.c +++ b/gcc/testsuite/gcc.dg/ipa/pr45644.c @@ -1,6 +1,7 @@ /* Verify that we do not IPA-SRA bitfields. */ /* { dg-do run } */ /* { dg-options "-O2" } */ +/* { dg-require-effective-target int32plus } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/ipa/pr48195.c b/gcc/testsuite/gcc.dg/ipa/pr48195.c new file mode 100644 index 00000000000..2e38452d598 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr48195.c @@ -0,0 +1,25 @@ +/* { dg-do link } */ +/* { dg-options "-O2 -flto --param partial-inlining-entry-probability=101" } */ +/* { dg-require-effective-target lto } */ + +extern void abort(void); + +int i; + +void __attribute__ ((constructor)) +c2 () +{ + if (i) + abort (); +} + +void __attribute__ ((destructor)) +d1 () +{ + if (i) + abort (); +} + +void main () +{ +} diff --git a/gcc/testsuite/gcc.dg/large-size-array-5.c b/gcc/testsuite/gcc.dg/large-size-array-5.c new file mode 100644 index 00000000000..71ac47374f4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/large-size-array-5.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-Wno-overflow" } */ + +typedef __SIZE_TYPE__ size_t; + +extern char a[((size_t)-1 >> 1) + 1]; /* { dg-error "too large" } */ +extern char b[((size_t)-1 >> 1)]; +extern int c[(((size_t)-1 >> 1) + 1) / sizeof(int)]; /* { dg-error "too large" } */ +extern int d[((size_t)-1 >> 1) / sizeof(int)]; diff --git a/gcc/testsuite/gcc.dg/lto/20081204-1_0.c b/gcc/testsuite/gcc.dg/lto/20081204-1_0.c index a4b25ff82fb..0c3849f6182 100644 --- a/gcc/testsuite/gcc.dg/lto/20081204-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081204-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */ /* Tests for the absence during linking of: diff --git a/gcc/testsuite/gcc.dg/lto/20081224_0.c b/gcc/testsuite/gcc.dg/lto/20081224_0.c index d050e231238..9f9afdf85c7 100644 --- a/gcc/testsuite/gcc.dg/lto/20081224_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081224_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib -fPIC}} } */ #include "20081224_0.h" diff --git a/gcc/testsuite/gcc.dg/lto/20090116_0.c b/gcc/testsuite/gcc.dg/lto/20090116_0.c index 5bb3a919a59..4a865969901 100644 --- a/gcc/testsuite/gcc.dg/lto/20090116_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090116_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-O1 -flto -flto-partition=1to1 -fPIC}} } */ /* { dg-extra-ld-options {-r -nostdlib -O0} } */ diff --git a/gcc/testsuite/gcc.dg/lto/20090126-2_0.c b/gcc/testsuite/gcc.dg/lto/20090126-2_0.c index 2239412d1af..f75a05fec62 100644 --- a/gcc/testsuite/gcc.dg/lto/20090126-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090126-2_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -O2 -flto -flto-partition=1to1}} } */ /* { dg-extra-ld-options {-fno-PIC -r -nostdlib -O2 -flto -flto-partition=1to1} } */ diff --git a/gcc/testsuite/gcc.dg/lto/20090206-2_0.c b/gcc/testsuite/gcc.dg/lto/20090206-2_0.c index 4ca80ea4810..2f4020a011c 100644 --- a/gcc/testsuite/gcc.dg/lto/20090206-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090206-2_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC}} } */ /* { dg-suppress-ld-options {-fPIC} } */ diff --git a/gcc/testsuite/gcc.dg/lto/20090210_0.c b/gcc/testsuite/gcc.dg/lto/20090210_0.c index 2c858a67d32..794c18fe04d 100644 --- a/gcc/testsuite/gcc.dg/lto/20090210_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090210_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do run } */ +/* { dg-require-effective-target fpic } */ /* { dg-suppress-ld-options {-fPIC} } */ -/* { dg-require-effective-target tls } */ +/* { dg-require-effective-target tls_runtime } */ /* { dg-extra-ld-options "-pthread" { target *-*-solaris2.[89] } } */ int foo (int x) { diff --git a/gcc/testsuite/gcc.dg/lto/20090219_0.c b/gcc/testsuite/gcc.dg/lto/20090219_0.c index 81a93e6da53..985c884cecd 100644 --- a/gcc/testsuite/gcc.dg/lto/20090219_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090219_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-O3 -flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */ struct Foo { int f1, f2, f3, f4, f5; }; diff --git a/gcc/testsuite/gcc.dg/lto/20091013-1_0.c b/gcc/testsuite/gcc.dg/lto/20091013-1_0.c index 0fecce04f09..83de8d3223b 100644 --- a/gcc/testsuite/gcc.dg/lto/20091013-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091013-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto} {-fPIC -r -nostdlib -O2 -flto}} } */ void * HeapAlloc(void*,unsigned int,unsigned long); diff --git a/gcc/testsuite/gcc.dg/lto/20091014-1_0.c b/gcc/testsuite/gcc.dg/lto/20091014-1_0.c index 975214e0430..be327aaff90 100644 --- a/gcc/testsuite/gcc.dg/lto/20091014-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091014-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto}} } */ /* Empty file. See PR41173. */ diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_0.c b/gcc/testsuite/gcc.dg/lto/20091015-1_0.c index 1cc4b78b31b..1c11f644888 100644 --- a/gcc/testsuite/gcc.dg/lto/20091015-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -O2 -flto} {-fPIC -r -nostdlib -O2 -flto -flto-partition=1to1}} } */ #include "20091015-1_b.h" diff --git a/gcc/testsuite/gcc.dg/lto/20091016-1_0.c b/gcc/testsuite/gcc.dg/lto/20091016-1_0.c index 39a04b950bf..b44c75a97c4 100644 --- a/gcc/testsuite/gcc.dg/lto/20091016-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091016-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -O2 -flto}} } */ typedef struct VEC_constructor_elt_gc { } VEC_constructor_elt_gc; diff --git a/gcc/testsuite/gcc.dg/lto/20091020-1_0.c b/gcc/testsuite/gcc.dg/lto/20091020-1_0.c index c9bcb565d96..f9d8bf87de6 100644 --- a/gcc/testsuite/gcc.dg/lto/20091020-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091020-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto}} } */ typedef struct { diff --git a/gcc/testsuite/gcc.dg/lto/20091020-2_0.c b/gcc/testsuite/gcc.dg/lto/20091020-2_0.c index fb1a82bb8c6..21e59678732 100644 --- a/gcc/testsuite/gcc.dg/lto/20091020-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091020-2_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ +/* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto}} } */ typedef struct { diff --git a/gcc/testsuite/gcc.dg/lto/pr48622_0.c b/gcc/testsuite/gcc.dg/lto/pr48622_0.c new file mode 100644 index 00000000000..ffb5f62d6a0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr48622_0.c @@ -0,0 +1,93 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-O -flto -finline-small-functions -fno-early-inlining}} } */ + +void abort(void); +void exit(int); + +typedef unsigned int u8 __attribute__ ((mode (QI))); + +u8 +ashift_qi_0 (u8 n) +{ +} + +u8 +ashift_qi_2 (u8 n) +{ +} + +u8 +ashift_qi_3 (u8 n) +{ +} + +u8 +ashift_qi_4 (u8 n) +{ +} + +u8 +ashift_qi_5 (u8 n) +{ +} + +u8 +ashift_qi_6 (u8 n) +{ +} + +u8 +ashift_qi_7 (u8 n) +{ +} + +u8 +lshiftrt_qi_0 (u8 n) +{ +} + +u8 +lshiftrt_qi_4 (u8 n) +{ +} + +u8 +lshiftrt_qi_5 (u8 n) +{ +} + +u8 +lshiftrt_qi_7 (u8 n) +{ +} + +int +main () +{ + if (ashift_qi_0 (0xff) != (u8) ((u8) 0xff << 0)) + abort (); + if (ashift_qi_1 (0xff) != (u8) ((u8) 0xff << 1)) + abort (); + if (ashift_qi_2 (0xff) != (u8) ((u8) 0xff << 2)) + abort (); + if (ashift_qi_3 (0xff) != (u8) ((u8) 0xff << 3)) + abort (); + if (ashift_qi_4 (0xff) != (u8) ((u8) 0xff << 4)) + abort (); + if (ashift_qi_5 (0xff) != (u8) ((u8) 0xff << 5)) + abort (); + if (ashift_qi_6 (0xff) != (u8) ((u8) 0xff << 6)) + abort (); + if (ashift_qi_7 (0xff) != (u8) ((u8) 0xff << 7)) + abort (); + if (lshiftrt_qi_0 (0xff) != (u8) ((u8) 0xff >> 0)) + abort (); + if (lshiftrt_qi_4 (0xff) != (u8) ((u8) 0xff >> 4)) + abort (); + if (lshiftrt_qi_5 (0xff) != (u8) ((u8) 0xff >> 5)) + abort (); + if (lshiftrt_qi_7 (0xff) != (u8) ((u8) 0xff >> 7)) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.dg/matrix/matrix.exp b/gcc/testsuite/gcc.dg/matrix/matrix.exp index 961e0255e33..aae19883143 100644 --- a/gcc/testsuite/gcc.dg/matrix/matrix.exp +++ b/gcc/testsuite/gcc.dg/matrix/matrix.exp @@ -20,7 +20,7 @@ load_lib gcc-dg.exp load_lib target-supports.exp -set DEFAULT_MATCFLAGS "-O3 -fipa-matrix-reorg -fdump-ipa-matrix-reorg -fwhole-program" +set DEFAULT_MATCFLAGS "-O3 -fipa-matrix-reorg -fdump-ipa-matrix-reorg -fwhole-program -fno-tree-fre" # Initialize `dg'. dg-init @@ -52,8 +52,8 @@ load_lib profopt.exp # These are globals used by profopt-execute. The first is options # needed to generate profile data, the second is options to use the # profile data. -set profile_option "-fprofile-generate -O3" -set feedback_option "-fprofile-use -fipa-matrix-reorg -fdump-ipa-matrix-reorg -O3 -fwhole-program" +set profile_option "-fprofile-generate -O3 -fno-tree-fre" +set feedback_option "-fprofile-use -fipa-matrix-reorg -fdump-ipa-matrix-reorg -O3 -fwhole-program -fno-tree-fre" foreach src [lsort [glob -nocomplain $srcdir/$subdir/transpose-*.c]] { # If we're only testing specific files and this isn't one of them, skip it. diff --git a/gcc/testsuite/gcc.dg/missing-field-init-2.c b/gcc/testsuite/gcc.dg/missing-field-init-2.c index 581eb30d89b..c5a3f490387 100644 --- a/gcc/testsuite/gcc.dg/missing-field-init-2.c +++ b/gcc/testsuite/gcc.dg/missing-field-init-2.c @@ -9,3 +9,6 @@ struct s s4[] = { 1, 2, 3, 4, 5 }; /* { dg-warning "(missing initializer)|(near struct s s5[] = { 1, 2, 3, 4, 5, 6 }; /* Designated initializers produce no warning. */ struct s s6 = { .a = 1 }; /* { dg-bogus "missing initializer" } */ +/* Allow zero-initializing with "= { 0 }". */ +struct s s7 = { 0 }; /* { dg-bogus "missing initializer" } */ +struct s s8 = { 1 }; /* { dg-warning "(missing initializer)|(near initialization)" } */ diff --git a/gcc/testsuite/gcc.dg/mtune.c b/gcc/testsuite/gcc.dg/mtune.c index 992cb09ff01..88c5db8dda7 100644 --- a/gcc/testsuite/gcc.dg/mtune.c +++ b/gcc/testsuite/gcc.dg/mtune.c @@ -4,4 +4,5 @@ /* { dg-error "mtune" "" { target *-*-* } 0 } */ /* { dg-bogus "march" "" { target *-*-* } 0 } */ /* { dg-bogus "mcpu" "" { target *-*-* } 0 } */ +/* { dg-prune-output "note: valid arguments.*" } */ int i; diff --git a/gcc/testsuite/gcc.dg/pr15347.c b/gcc/testsuite/gcc.dg/pr15347.c new file mode 100644 index 00000000000..b95b0ea2a5e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr15347.c @@ -0,0 +1,10 @@ +/* { dg-do link } */ + +extern void link_error (void); +int +main () +{ + if ("<12ers" + 1 == 0) + link_error (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr35445.c b/gcc/testsuite/gcc.dg/pr35445.c new file mode 100644 index 00000000000..cef309f41ce --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr35445.c @@ -0,0 +1,6 @@ +/* PR c/35445 */ +/* { dg-do "compile" } */ + +extern int i; +extern int i; /* { dg-message "was here" } */ +int i[] = { 0 }; /* { dg-error "conflicting types" } */ diff --git a/gcc/testsuite/gcc.dg/pr42629.c b/gcc/testsuite/gcc.dg/pr42629.c index e95d29b544e..4d80068ff39 100644 --- a/gcc/testsuite/gcc.dg/pr42629.c +++ b/gcc/testsuite/gcc.dg/pr42629.c @@ -2,6 +2,7 @@ took debug insns into account. */ /* { dg-do compile } */ /* { dg-options "-O1 -fsched-pressure -fschedule-insns -fcompare-debug" } */ +/* { dg-require-effective-target int32plus } */ int lzo_adler32(int adler, char *buf) { diff --git a/gcc/testsuite/gcc.dg/pr47917.c b/gcc/testsuite/gcc.dg/pr47917.c new file mode 100644 index 00000000000..92bcf79662b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr47917.c @@ -0,0 +1,38 @@ +/* PR middle-end/47917 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +extern int snprintf (char *, __SIZE_TYPE__, const char *, ...); +extern int memcmp (const void *, const void *, __SIZE_TYPE__); +extern void abort (void); + +char buf1[6], buf2[6], buf3[4], buf4[4]; +int i; + +int +foo (void) +{ + int ret = snprintf (buf1, sizeof buf1, "abcde"); + ret += snprintf (buf2, sizeof buf2, "abcdef") * 16; + ret += snprintf (buf3, sizeof buf3, "%s", i++ < 6 ? "abc" : "def") * 256; + ret += snprintf (buf4, sizeof buf4, "%s", i++ > 10 ? "abcde" : "defgh") * 4096; + return ret; +} + +int +main (void) +{ + if (foo () != 5 + 6 * 16 + 3 * 256 + 5 * 4096) + abort (); + if (memcmp (buf1, "abcde", 6) != 0 + || memcmp (buf2, "abcde", 6) != 0 + || memcmp (buf3, "abc", 4) != 0 + || memcmp (buf4, "def", 4) != 0 + || i != 2) + abort (); + return 0; +} + +/* { dg-final { scan-tree-dump-times "snprintf" 2 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "sprintf" 0 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/pr48134.c b/gcc/testsuite/gcc.dg/pr48134.c new file mode 100644 index 00000000000..8dc5a6d0d41 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48134.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fstack-check=specific -fno-tree-dse -fno-tree-fre -fno-tree-loop-optimize -g" } */ + +struct S +{ + int w, z; +}; +struct T +{ + struct S s; +}; + +int i; + +static inline struct S +bar (struct S x) +{ + i++; + return x; +} + +int +foo (struct T t, struct S s) +{ + struct S *c = &s; + if (i) + c = &t.s; + t.s.w = 3; + s = bar (*c); + return t.s.w; +} diff --git a/gcc/testsuite/gcc.dg/pr48141.c b/gcc/testsuite/gcc.dg/pr48141.c new file mode 100644 index 00000000000..006f5cb1440 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48141.c @@ -0,0 +1,17 @@ +/* PR rtl-optimization/48141 */ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +#define A i = 0; +#define B A A A A A A A A A A +#define C B B B B B B B B B B +#define D C C C C C C C C C C +#define E D D D D D D D D D D + +int +foo (void) +{ + volatile int i = 0; + E E E E E E E E E E E + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr48144.c b/gcc/testsuite/gcc.dg/pr48144.c new file mode 100644 index 00000000000..030202d064b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48144.c @@ -0,0 +1,16 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O -frerun-cse-after-loop -fschedule-insns2 -fselective-scheduling2 -fno-tree-ch -funroll-loops --param=max-sched-extend-regions-iters=2 --param=max-sched-region-blocks=15" } */ +extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n); + +void bar (void *, void *, void *); + +void foo + (void *p, char *data, unsigned data_len) +{ + int buffer[8]; + int buf2[8]; + unsigned i; + for (i = 0; i + 8 <= data_len; i += 8) + bar (p, buffer, data + i); + memcpy (buf2, data + i, data_len); +} diff --git a/gcc/testsuite/gcc.dg/pr48156.c b/gcc/testsuite/gcc.dg/pr48156.c new file mode 100644 index 00000000000..7b4d529c41b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48156.c @@ -0,0 +1,45 @@ +/* PR rtl-optimization/48156 */ +/* { dg-do run } */ +/* { dg-options "-O -fcrossjumping --param min-crossjump-insns=1" } */ + +extern void abort (void); + +static int __attribute__ ((noinline, noclone)) +equals (int s1, int s2) +{ + return s1 == s2; +} + +static int __attribute__ ((noinline, noclone)) +bar (void) +{ + return 1; +} + +static void __attribute__ ((noinline, noclone)) +baz (int f, int j) +{ + if (f != 4 || j != 2) + abort (); +} + +void +foo (int x) +{ + int i = 0, j = bar (); + + if (x == 1) + i = 2; + + if (j && equals (i, j)) + baz (8, i); + else + baz (4, i); +} + +int +main () +{ + foo (1); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr48203.c b/gcc/testsuite/gcc.dg/pr48203.c new file mode 100644 index 00000000000..b4b2b084ddb --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48203.c @@ -0,0 +1,51 @@ +/* PR debug/48203 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -g" } */ + +volatile int v; + +void +foo (long a, long b, long c, long d, long e, long f, long g, long h, + long i, long j, long k, long l, long m, long n, long o, long p) +{ + long a2 = a; + long b2 = b; + long c2 = c; + long d2 = d; + long e2 = e; + long f2 = f; + long g2 = g; + long h2 = h; + long i2 = i; + long j2 = j; + long k2 = k; + long l2 = l; + long m2 = m; + long n2 = n; + long o2 = o; + long p2 = p; + v++; +} + +void +bar (int a, int b, int c, int d, int e, int f, int g, int h, + int i, int j, int k, int l, int m, int n, int o, int p) +{ + int a2 = a; + int b2 = b; + int c2 = c; + int d2 = d; + int e2 = e; + int f2 = f; + int g2 = g; + int h2 = h; + int i2 = i; + int j2 = j; + int k2 = k; + int l2 = l; + int m2 = m; + int n2 = n; + int o2 = o; + int p2 = p; + v++; +} diff --git a/gcc/testsuite/gcc.dg/pr48213.c b/gcc/testsuite/gcc.dg/pr48213.c new file mode 100644 index 00000000000..cf7d76fa0ea --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48213.c @@ -0,0 +1,14 @@ +/* PR target/48213 */ +/* { dg-do compile } */ +/* { dg-options "-g -O2" } */ +/* { dg-options "-g -O2 -fpic" { target fpic } } */ + +struct S { int (*s) (void); }; +int bar (void); + +void +foo (struct S *x) +{ + if (x->s != bar) + bar (); +} diff --git a/gcc/testsuite/gcc.dg/pr48235.c b/gcc/testsuite/gcc.dg/pr48235.c new file mode 100644 index 00000000000..401624ec629 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48235.c @@ -0,0 +1,58 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-require-effective-target freorder } */ +/* { dg-options "-O -fno-guess-branch-probability -fpeel-loops -freorder-blocks-and-partition -fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2" } */ +struct intC +{ + short x; + short y; +}; + +int size_x; + +static inline int +TileDiffXY (int x, int y) +{ + return (y * size_x) + x; +} + +struct HangarTileTable +{ + struct intC ti; + int hangar_num; +}; + +struct AirportSpec +{ + struct HangarTileTable *depot_table; + int size; +}; + +void Get (); +struct AirportSpec dummy; + +static inline int +GetRotatedTileFromOffset (int *a, struct intC tidc) +{ + if (!*a) + Get (); + switch (*a) + { + case 0: + return (tidc.y << size_x) + tidc.x; + case 1: + return TileDiffXY (tidc.y, dummy.size - tidc.x); + case 2: + return TileDiffXY (tidc.x, dummy.size - tidc.y); + case 3: + return TileDiffXY (dummy.size - 1, tidc.x); + } +} + +int +GetHangarNum (int *a) +{ + int i; + for (i = 0; i < dummy.size; i++) + if (GetRotatedTileFromOffset (a, dummy.depot_table[i].ti)) + return dummy.depot_table[i].hangar_num; +} diff --git a/gcc/testsuite/gcc.dg/pr48335-1.c b/gcc/testsuite/gcc.dg/pr48335-1.c new file mode 100644 index 00000000000..7a022eac835 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-1.c @@ -0,0 +1,48 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef long long T __attribute__((may_alias)); + +struct S +{ + _Complex float d __attribute__((aligned (8))); +}; + +void bar (struct S); + +void +f1 (T x) +{ + struct S s; + *(T *) &s.d = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f2 (int x) +{ + struct S s = { .d = 0.0f }; + *(char *) &s.d = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f3 (int x) +{ + struct S s = { .d = 0.0f }; + ((char *) &s.d)[2] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f4 (int x, int y) +{ + struct S s = { .d = 0.0f }; + ((char *) &s.d)[y] = x; + __real__ s.d *= 7.0; + bar (s); +} diff --git a/gcc/testsuite/gcc.dg/pr48335-2.c b/gcc/testsuite/gcc.dg/pr48335-2.c new file mode 100644 index 00000000000..a37c0797c3b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-2.c @@ -0,0 +1,58 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef long long T __attribute__((may_alias, aligned (1))); +typedef short U __attribute__((may_alias, aligned (1))); + +struct S +{ + _Complex float d __attribute__((aligned (8))); +}; + +void bar (struct S); + +void +f1 (T x) +{ + struct S s; + *(T *) ((char *) &s.d + 1) = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f2 (int x) +{ + struct S s = { .d = 0.0f }; + ((U *)((char *) &s.d + 1))[0] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f3 (int x) +{ + struct S s = { .d = 0.0f }; + ((U *)((char *) &s.d + 1))[1] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f4 (int x) +{ + struct S s = { .d = 0.0f }; + ((U *)((char *) &s.d + 1))[2] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f5 (int x) +{ + struct S s = { .d = 0.0f }; + ((U *)((char *) &s.d + 1))[3] = x; + __real__ s.d *= 7.0; + bar (s); +} diff --git a/gcc/testsuite/gcc.dg/pr48335-3.c b/gcc/testsuite/gcc.dg/pr48335-3.c new file mode 100644 index 00000000000..9041f591fff --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-3.c @@ -0,0 +1,48 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef short U __attribute__((may_alias, aligned (1))); + +struct S +{ + double d; +}; + +void bar (struct S); + +void +f1 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[0] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f2 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[1] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f3 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[2] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f4 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[3] = x; + __real__ s.d *= 7.0; + bar (s); +} diff --git a/gcc/testsuite/gcc.dg/pr48335-4.c b/gcc/testsuite/gcc.dg/pr48335-4.c new file mode 100644 index 00000000000..98e9e1eec73 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-4.c @@ -0,0 +1,39 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef short U __attribute__((may_alias, aligned (1))); + +struct S +{ + double d; +}; + +void bar (struct S); + +void +f1 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[-1] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f2 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[-2] = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f3 (int x) +{ + struct S s = { .d = 0.0 }; + ((U *)((char *) &s.d + 1))[5] = x; + __real__ s.d *= 7.0; + bar (s); +} diff --git a/gcc/testsuite/gcc.dg/pr48335-5.c b/gcc/testsuite/gcc.dg/pr48335-5.c new file mode 100644 index 00000000000..b1895484dc9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-5.c @@ -0,0 +1,38 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef long long T __attribute__((may_alias)); + +struct S +{ + _Complex float d __attribute__((aligned (8))); +}; + +int +f1 (struct S x) +{ + struct S s = x; + return *(T *) &s.d; +} + +int +f2 (struct S x) +{ + struct S s = x; + return *(char *) &s.d; +} + +int +f3 (struct S x) +{ + struct S s = x; + return ((char *) &s.d)[2]; +} + +int +f4 (struct S x, int y) +{ + struct S s = x; + return ((char *) &s.d)[y]; +} diff --git a/gcc/testsuite/gcc.dg/pr48335-6.c b/gcc/testsuite/gcc.dg/pr48335-6.c new file mode 100644 index 00000000000..769130cc4e3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-6.c @@ -0,0 +1,46 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef long long T __attribute__((may_alias, aligned (1))); +typedef short U __attribute__((may_alias, aligned (1))); + +struct S +{ + _Complex float d __attribute__((aligned (8))); +}; + +T +f1 (struct S x) +{ + struct S s = x; + return *(T *) ((char *) &s.d + 1); +} + +int +f2 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[0]; +} + +int +f3 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[1]; +} + +int +f4 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[2]; +} + +int +f5 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[3]; +} diff --git a/gcc/testsuite/gcc.dg/pr48335-7.c b/gcc/testsuite/gcc.dg/pr48335-7.c new file mode 100644 index 00000000000..ddb15ee6ab9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-7.c @@ -0,0 +1,38 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef short U __attribute__((may_alias, aligned (1))); + +struct S +{ + double d; +}; + +int +f1 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[0]; +} + +int +f2 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[1]; +} + +int +f3 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[2]; +} + +int +f4 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[3]; +} diff --git a/gcc/testsuite/gcc.dg/pr48335-8.c b/gcc/testsuite/gcc.dg/pr48335-8.c new file mode 100644 index 00000000000..bb06c157f83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48335-8.c @@ -0,0 +1,31 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra" } */ + +typedef short U __attribute__((may_alias, aligned (1))); + +struct S +{ + double d; +}; + +int +f1 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[-1]; +} + +int +f2 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[-2]; +} + +int +f3 (struct S x) +{ + struct S s = x; + return ((U *)((char *) &s.d + 1))[5]; +} diff --git a/gcc/testsuite/gcc.dg/pr48442.c b/gcc/testsuite/gcc.dg/pr48442.c new file mode 100644 index 00000000000..88e3497b11d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48442.c @@ -0,0 +1,27 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-options "-Os -fselective-scheduling2 --param max-sched-extend-regions-iters=100" } */ +void f (void) +{ + unsigned *a2; + int vertex2; + int c, x2, dx2, dy2, s2; + long m, b; + do + { + if (dx2) + dx2 = dx2 % dy2; + s2 = (dx2 / dy2); + } + while (vertex2); + for (;;) + { + c = x2; + a2 = 0; + if (c) + { + m = b << (c); + *a2 = (*a2 & ~m); + } + x2 += s2; + } +} diff --git a/gcc/testsuite/gcc.dg/pr48552-1.c b/gcc/testsuite/gcc.dg/pr48552-1.c new file mode 100644 index 00000000000..5590549a7ce --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48552-1.c @@ -0,0 +1,53 @@ +/* PR c/48552 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +struct S; + +void +f1 (void *x) +{ + __asm volatile ("" : : "r" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 10 } */ + +void +f2 (void *x) +{ + __asm volatile ("" : "=r" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 16 } */ + /* { dg-error "invalid lvalue in asm output 0" "" { target *-*-* } 16 } */ +void +f3 (void *x) +{ + __asm volatile ("" : : "m" (*x)); /* { dg-warning "dereferencing" } */ +} + +void +f4 (void *x) +{ + __asm volatile ("" : "=m" (*x)); /* { dg-warning "dereferencing" } */ +} + +void +f5 (void *x) +{ + __asm volatile ("" : : "g" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 34 } */ + +void +f6 (void *x) +{ + __asm volatile ("" : "=g" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 40 } */ + /* { dg-error "invalid lvalue in asm output 0" "" { target *-*-* } 40 } */ +void +f7 (struct S *x) +{ + __asm volatile ("" : : "r" (*x)); /* { dg-error "dereferencing pointer to incomplete type" } */ +} + +void +f8 (struct S *x) +{ + __asm volatile ("" : "=r" (*x)); /* { dg-error "dereferencing pointer to incomplete type" } */ +} /* { dg-error "invalid lvalue in asm output 0" "" { target *-*-* } 52 } */ diff --git a/gcc/testsuite/gcc.dg/pr48552-2.c b/gcc/testsuite/gcc.dg/pr48552-2.c new file mode 100644 index 00000000000..4408279f8ac --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48552-2.c @@ -0,0 +1,53 @@ +/* PR c/48552 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +struct S; + +void +f1 (void *x) +{ + __asm ("" : : "r" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 10 } */ + +void +f2 (void *x) +{ + __asm ("" : "=r" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 16 } */ + /* { dg-error "invalid lvalue in asm output 0" "" { target *-*-* } 16 } */ +void +f3 (void *x) +{ + __asm ("" : : "m" (*x)); /* { dg-warning "dereferencing" } */ +} + +void +f4 (void *x) +{ + __asm ("" : "=m" (*x)); /* { dg-warning "dereferencing" } */ +} + +void +f5 (void *x) +{ + __asm ("" : : "g" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 34 } */ + +void +f6 (void *x) +{ + __asm ("" : "=g" (*x)); /* { dg-warning "dereferencing" } */ +} /* { dg-error "invalid use of void expression" "" { target *-*-* } 40 } */ + /* { dg-error "invalid lvalue in asm output 0" "" { target *-*-* } 40 } */ +void +f7 (struct S *x) +{ + __asm ("" : : "r" (*x)); /* { dg-error "dereferencing pointer to incomplete type" } */ +} + +void +f8 (struct S *x) +{ + __asm ("" : "=r" (*x)); /* { dg-error "dereferencing pointer to incomplete type" } */ +} /* { dg-error "invalid lvalue in asm output 0" "" { target *-*-* } 52 } */ diff --git a/gcc/testsuite/gcc.dg/pr48616.c b/gcc/testsuite/gcc.dg/pr48616.c new file mode 100644 index 00000000000..6cad235c4b4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48616.c @@ -0,0 +1,135 @@ +/* PR tree-optimization/48616 */ +/* { dg-do run } */ +/* { dg-options "-O2 -ftree-vectorize" } */ +/* { dg-options "-O2 -ftree-vectorize -fno-common" { target alpha*-dec-osf* hppa*-*-hpux* } } */ + +extern void abort (void); +int a[4] __attribute__((aligned (32))); +int b[4] __attribute__((aligned (32))); +int c[4] __attribute__((aligned (32))); +int d[4] __attribute__((aligned (32))); +int e[4] __attribute__((aligned (32))); + +__attribute__((noinline, noclone)) +int +foo (int x) +{ + asm ("" : "+r" (x)); + return x; +} + +__attribute__((noinline, noclone)) +void +fn1 (int i) +{ + a[0] = b[0] << c[0]; + a[1] = b[1] << c[1]; + a[2] = b[2] << c[2]; + a[3] = b[3] << c[3]; + if (i) + { + d[0] = e[0] >> c[0]; + d[1] = e[1] >> c[1]; + d[2] = e[2] >> c[2]; + d[3] = e[3] >> c[3]; + } +} + +__attribute__((noinline, noclone)) +void +fn2 (int i) +{ + a[0] = b[0] << 1; + a[1] = b[1] << 2; + a[2] = b[2] << 3; + a[3] = b[3] << 4; + if (i) + { + d[0] = e[0] >> 1; + d[1] = e[1] >> 2; + d[2] = e[2] >> 3; + d[3] = e[3] >> 4; + } +} + +__attribute__((noinline, noclone)) +void +fn3 (int i, int j) +{ + int x = foo (j); + a[0] = b[0] << x; + a[1] = b[1] << x; + a[2] = b[2] << x; + a[3] = b[3] << x; + if (i) + { + d[0] = e[0] >> x; + d[1] = e[1] >> x; + d[2] = e[2] >> x; + d[3] = e[3] >> x; + } +} + +__attribute__((noinline, noclone)) +void +fn4 (int i) +{ + a[0] = b[0] << 1; + a[1] = b[1] << 1; + a[2] = b[2] << 1; + a[3] = b[3] << 1; + if (i) + { + d[0] = e[0] >> 1; + d[1] = e[1] >> 1; + d[2] = e[2] >> 1; + d[3] = e[3] >> 1; + } +} + +int +main () +{ + int i; + int *t; + for (i = 0; i < 4; i++) + { + b[i] = 32; + c[i] = i + 1; + e[i] = 32; + } + asm volatile ("" : : "r" (b) : "memory"); + asm volatile ("" : : "r" (c) : "memory"); + asm volatile ("" : "=r" (t) : "0" (d) : "memory"); + fn1 (t != 0); + for (i = 0; i < 4; i++) + { + if (a[i] != (32 << (i + 1)) || d[i] != (32 >> (i + 1))) + abort (); + a[i] = 0; + d[i] = 0; + } + fn2 (t != 0); + for (i = 0; i < 4; i++) + { + if (a[i] != (32 << (i + 1)) || d[i] != (32 >> (i + 1))) + abort (); + a[i] = 0; + d[i] = 0; + } + fn3 (t != 0, t != 0); + for (i = 0; i < 4; i++) + { + if (a[i] != (32 << 1) || d[i] != (32 >> 1)) + abort (); + a[i] = 0; + d[i] = 0; + } + fn4 (t != 0); + for (i = 0; i < 4; i++) + { + if (a[i] != (32 << 1) || d[i] != (32 >> 1)) + abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr48685.c b/gcc/testsuite/gcc.dg/pr48685.c new file mode 100644 index 00000000000..36df0cc5f31 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48685.c @@ -0,0 +1,11 @@ +/* PR c/48685 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int +main () +{ + int v = 1; + (void) (1 == 2 ? (void) 0 : (v = 0)); + return v; +} diff --git a/gcc/testsuite/gcc.dg/pr48768.c b/gcc/testsuite/gcc.dg/pr48768.c new file mode 100644 index 00000000000..7d0383e83bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48768.c @@ -0,0 +1,38 @@ +/* PR debug/48768 */ +/* { dg-do compile } */ +/* { dg-options "-O -fcompare-debug" } */ + +int a, b; + +int +bar (void) +{ + int i, j = 1; + for (i = 0; i != 10; i++) + { + lab: + if (i) + { + int *k = &j; + } + else if (j) + goto lab; + } + return 1; +} + +inline int +foo (int x) +{ + unsigned int c = x; + int d = x; + if (bar ()) + for (; c; c++) + while (x >= 0) + if (foo (d) >= 0) + { + d = bar (); + a = b ? b : 1; + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr48774.c b/gcc/testsuite/gcc.dg/pr48774.c new file mode 100644 index 00000000000..91ce361ccb3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48774.c @@ -0,0 +1,38 @@ +/* PR target/48774 */ +/* { dg-do run } */ +/* { dg-options "-O2 -funroll-loops" } */ + +extern void abort (void); +unsigned long int s[24] + = { 12, ~1, 12, ~2, 12, ~4, 12, ~8, 12, ~16, 12, ~32, + 12, ~64, 12, ~128, 12, ~256, 12, ~512, 12, ~1024, 12, ~2048 }; +struct { int n; unsigned long *e[12]; } g + = { 12, { &s[0], &s[2], &s[4], &s[6], &s[8], &s[10], &s[12], &s[14], + &s[16], &s[18], &s[20], &s[22] } }; +int c[12]; + +__attribute__((noinline, noclone)) void +foo (void) +{ + int i, j; + for (i = 0; i < g.n; i++) + for (j = 0; j < g.n; j++) + { + if (i == j && j < g.e[0][0] && (g.e[i][1] & (1UL << j))) + abort (); + if (j < g.e[0][0] && (g.e[i][1] & (1UL << j))) + c[i]++; + } +} + +int +main () +{ + int i; + asm volatile ("" : "+m" (s), "+m" (g), "+m" (c)); + foo (); + for (i = 0; i < 12; i++) + if (c[i] != 11) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr48837.c b/gcc/testsuite/gcc.dg/pr48837.c new file mode 100644 index 00000000000..ffc65b9dc8c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48837.c @@ -0,0 +1,30 @@ +/* PR tree-optimization/48837 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +void abort (void); + +__attribute__((noinline)) +int baz(void) +{ + return 1; +} + +inline const int *bar(const int *a, const int *b) +{ + return *a ? a : b; +} + +int foo(int a, int b) +{ + return a || b ? baz() : foo(*bar(&a, &b), 1) + foo(1, 0); +} + +int main(void) +{ + if (foo(0, 0) != 2) + abort(); + + return 0; +} + diff --git a/gcc/testsuite/gcc.dg/sibcall-3.c b/gcc/testsuite/gcc.dg/sibcall-3.c index e8798cc599f..c4460e2e522 100644 --- a/gcc/testsuite/gcc.dg/sibcall-3.c +++ b/gcc/testsuite/gcc.dg/sibcall-3.c @@ -5,7 +5,7 @@ Copyright (C) 2002 Free Software Foundation Inc. Contributed by Hans-Peter Nilsson <hp@bitrange.com> */ -/* { dg-do run { xfail { { arc-*-* avr-*-* cris-*-* crisv32-*-* h8300-*-* hppa*64*-*-* m32r-*-* m68hc1?-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa*-*-* } || { arm*-*-* && { ! arm32 } } } } } */ +/* { dg-do run { xfail { { cris-*-* crisv32-*-* h8300-*-* hppa*64*-*-* m32r-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa*-*-* } || { arm*-*-* && { ! arm32 } } } } } */ /* -mlongcall disables sibcall patterns. */ /* { dg-skip-if "" { powerpc*-*-* } { "-mlongcall" } { "" } } */ /* { dg-options "-O2 -foptimize-sibling-calls" } */ diff --git a/gcc/testsuite/gcc.dg/sibcall-4.c b/gcc/testsuite/gcc.dg/sibcall-4.c index 223c03c1218..4f468f6595e 100644 --- a/gcc/testsuite/gcc.dg/sibcall-4.c +++ b/gcc/testsuite/gcc.dg/sibcall-4.c @@ -5,7 +5,7 @@ Copyright (C) 2002 Free Software Foundation Inc. Contributed by Hans-Peter Nilsson <hp@bitrange.com> */ -/* { dg-do run { xfail { { arc-*-* avr-*-* cris-*-* crisv32-*-* h8300-*-* hppa*64*-*-* m32r-*-* m68hc1?-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa*-*-* } || { arm*-*-* && { ! arm32 } } } } } */ +/* { dg-do run { xfail { { cris-*-* crisv32-*-* h8300-*-* hppa*64*-*-* m32r-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa*-*-* } || { arm*-*-* && { ! arm32 } } } } } */ /* -mlongcall disables sibcall patterns. */ /* { dg-skip-if "" { powerpc*-*-* } { "-mlongcall" } { "" } } */ /* { dg-options "-O2 -foptimize-sibling-calls" } */ diff --git a/gcc/testsuite/gcc.dg/slp-1.c b/gcc/testsuite/gcc.dg/slp-1.c new file mode 100644 index 00000000000..bb352020f97 --- /dev/null +++ b/gcc/testsuite/gcc.dg/slp-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model" } */ + +struct R { + double d1; + double d2; +}; + +struct R foo (struct R arg) +{ + struct R ret; + ret.d1 = arg.d2 * (0.0 - arg.d1); + ret.d2 = ret.d1; + return ret; +} diff --git a/gcc/testsuite/gcc.dg/stack-layout-1.c b/gcc/testsuite/gcc.dg/stack-layout-1.c new file mode 100644 index 00000000000..389a4eb051e --- /dev/null +++ b/gcc/testsuite/gcc.dg/stack-layout-1.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-strict-aliasing -fdump-rtl-expand" } */ +union U { + int a; + float b; +}; +struct A { + union U u1; + char a[100]; +}; +void bar (struct A *); +void foo () + { + { + struct A a; + bar (&a); + } + { + struct A a; + bar (&a); + } + } + +/* { dg-final { scan-rtl-dump-times "Partition" 1 "expand" } } */ +/* { dg-final { cleanup-rtl-dump "expand" } } */ diff --git a/gcc/testsuite/gcc.dg/stack-layout-2.c b/gcc/testsuite/gcc.dg/stack-layout-2.c new file mode 100644 index 00000000000..5d5b385f675 --- /dev/null +++ b/gcc/testsuite/gcc.dg/stack-layout-2.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-rtl-expand" } */ +void bar( char *); +int foo() +{ + int i=0; + { + char a[8000]; + bar(a); + i += a[0]; + } + { + char a[8192]; + char b[32]; + bar(a); + i += a[0]; + bar(b); + i += a[0]; + } + return i; +} +/* { dg-final { scan-rtl-dump "size 8192" "expand" } } */ +/* { dg-final { scan-rtl-dump "size 32" "expand" } } */ diff --git a/gcc/testsuite/gcc.dg/stack-usage-1.c b/gcc/testsuite/gcc.dg/stack-usage-1.c index 1d03a8dc994..321fec74d3a 100644 --- a/gcc/testsuite/gcc.dg/stack-usage-1.c +++ b/gcc/testsuite/gcc.dg/stack-usage-1.c @@ -30,9 +30,20 @@ # else # define SIZE 248 # endif +#elif defined (__powerpc64__) || defined (__ppc64__) || defined (__POWERPC64__) \ + || defined (__PPC64__) +# define SIZE 180 #elif defined (__powerpc__) || defined (__PPC__) || defined (__ppc__) \ || defined (__POWERPC__) || defined (PPC) || defined (_IBMR2) -# define SIZE 240 +# if defined (__ALTIVEC__) +# if defined (__APPLE__) +# define SIZE 204 +# else +# define SIZE 220 +# endif +# else +# define SIZE 240 +# endif #elif defined (__AVR__) # define SIZE 254 #elif defined (__s390x__) diff --git a/gcc/testsuite/gcc.dg/struct/struct-reorg.exp b/gcc/testsuite/gcc.dg/struct/struct-reorg.exp deleted file mode 100644 index a18b11d1580..00000000000 --- a/gcc/testsuite/gcc.dg/struct/struct-reorg.exp +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (C) 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING3. If not see -# <http://www.gnu.org/licenses/>. - -# Test the functionality of programs compiled with profile-directed structure -# rearrangement using -fprofile-generate followed by -fprofile-use. - -load_lib gcc-dg.exp -load_lib target-supports.exp - -set STRUCT_REORG_CFLAGS "-O3 -fipa-struct-reorg -fdump-ipa-all -fwhole-program" - -# Initialize `dg'. -dg-init - -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/wo_prof_*.c]] "" $STRUCT_REORG_CFLAGS - -dg-final - -# Some targets don't support tree profiling. -if { ![check_profiling_available ""] } { - return -} - -# The procedures in profopt.exp need these parameters. -set tool gcc -set prof_ext "gcda" - -# Override the list defined in profopt.exp. -set PROFOPT_OPTIONS [list {}] - -if $tracelevel then { - strace $tracelevel -} - -# Load support procs. -load_lib profopt.exp - -# These are globals used by profopt-execute. The first is options -# needed to generate profile data, the second is options to use the -# profile data. -set common "-O3 -fwhole-program" -set profile_option [concat $common " -fprofile-generate"] -set feedback_option [concat $common " -fprofile-use -fipa-struct-reorg -fdump-ipa-all"] - -foreach src [lsort [glob -nocomplain $srcdir/$subdir/w_prof_*.c]] { - # If we're only testing specific files and this isn't one of them, skip it. - if ![runtest_file_p $runtests $src] then { - continue - } - profopt-execute $src -} - -set feedback_option [concat $feedback_option " --param struct-reorg-cold-struct-ratio=30"] - -foreach src [lsort [glob -nocomplain $srcdir/$subdir/w_ratio_*.c]] { - # If we're only testing specific files and this isn't one of them, skip it. - if ![runtest_file_p $runtests $src] then { - continue - } - profopt-execute $src -} diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c b/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c deleted file mode 100644 index ca3643e43de..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c +++ /dev/null @@ -1,30 +0,0 @@ -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#define N 1000 -str_t A[N]; - -int -main () -{ - int i; - - for (i = 0; i < N; i++) - { - A[i].a = 0; - } - - for (i = 0; i < N; i++) - if (A[i].a != 0) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c b/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c deleted file mode 100644 index baff45d917d..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c +++ /dev/null @@ -1,43 +0,0 @@ -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -str_t *p; - -int -main () -{ - int i, sum; - - p = malloc (N * sizeof (str_t)); - if (p == NULL) - return 0; - for (i = 0; i < N; i++) - p[i].b = i; - - for (i = 0; i < N; i++) - p[i].a = p[i].b + 1; - - for (i = 0; i < N; i++) - if (p[i].a != p[i].b + 1) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c b/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c deleted file mode 100644 index 8953264fea1..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c +++ /dev/null @@ -1,38 +0,0 @@ -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -main () -{ - int i; - str_t A[N]; - - for (i = 0; i < N; i++) - { - A[i].a = 0; - } - - for (i = 0; i < N; i++) - if (A[i].a != 0) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c b/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c deleted file mode 100644 index 9a23f8d53a8..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -main () -{ - int i, sum; - - str_t * p = malloc (N * sizeof (str_t)); - if (p == NULL) - return 0; - for (i = 0; i < N; i++) - p[i].b = i; - - for (i = 0; i < N; i++) - p[i].a = p[i].b + 1; - - for (i = 0; i < N; i++) - if (p[i].a != p[i].b + 1) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c b/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c deleted file mode 100644 index b0202399104..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c +++ /dev/null @@ -1,33 +0,0 @@ -#include <stdlib.h> -typedef struct -{ - int a; - int b; -}str_t; - -#define N 3 - -str_t str; - -int -main () -{ - int i; - int res = 1<<(1<<N); - str.a = 2; - - for (i = 0; i < N; i++) - str.a = str.a * str.a; - - if (str.a != res) - abort (); - - /* POSIX ignores all but the 8 low-order bits, but other - environments may not. */ - return (str.a & 255); -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ - diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c b/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c deleted file mode 100644 index e9de98c3b8a..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c +++ /dev/null @@ -1,66 +0,0 @@ -#include <stdlib.h> - -typedef struct -{ - int a; - float b; -}str_t1; - -typedef struct -{ - int c; - float d; -}str_t2; - -#ifdef STACK_SIZE -#if STACK_SIZE > 16000 -#define N 1000 -#else -#define N (STACK_SIZE/16) -#endif -#else -#define N 1000 -#endif - -str_t1 *p1; -str_t2 *p2; -int num; - -void -foo (void) -{ - int i; - - for (i=0; i < num; i++) - p2[i].c = 2; -} - -int -main () -{ - int i, r; - - r = rand (); - num = r > N ? N : r; - p1 = malloc (num * sizeof (str_t1)); - p2 = malloc (num * sizeof (str_t2)); - - if (p1 == NULL || p2 == NULL) - return 0; - - for (i = 0; i < num; i++) - p1[i].a = 1; - - foo (); - - for (i = 0; i < num; i++) - if (p1[i].a != 1 || p2[i].c != 2) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 2" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ - diff --git a/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c b/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c deleted file mode 100644 index 3c26e3be7b6..00000000000 --- a/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c +++ /dev/null @@ -1,43 +0,0 @@ -#include <stdlib.h> -typedef struct -{ - int a; - int b; -}str_t1; - -typedef struct -{ - float a; - float b; -}str_t2; - -#define N1 1000 -#define N2 100 -str_t1 A1[N1]; -str_t2 A2[N2]; - -int -main () -{ - int i; - - for (i = 0; i < N1; i++) - A1[i].a = 0; - - for (i = 0; i < N2; i++) - A2[i].a = 0; - - for (i = 0; i < N1; i++) - if (A1[i].a != 0) - abort (); - - for (i = 0; i < N2; i++) - if (A2[i].a != 0) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c b/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c deleted file mode 100644 index 5d5e37b4f0e..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c +++ /dev/null @@ -1,27 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct basic -{ - int a; - int b[10]; -} type_struct; - -type_struct *str1; - -int main() -{ - int i; - - str1 = malloc (10 * sizeof (type_struct)); - - for (i=0; i<=9; i++) - str1[i].a = str1[i].b[0]; - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c b/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c deleted file mode 100644 index efb68be8bdd..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c +++ /dev/null @@ -1,39 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -main () -{ - int i; - str_t A[N]; - str_t *p = A; - - for (i = 0; i < N; i++) - p[i].a = 0; - - for (i = 0; i < N; i++) - if (p[i].a != 0) - abort (); - - return 0; -} - -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c b/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c deleted file mode 100644 index 77226b449c5..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c +++ /dev/null @@ -1,30 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> - -typedef struct test_struct -{ - int a; - int b; -} type_struct; - -typedef type_struct **struct_pointer2; - -struct_pointer2 str1; - -int main() -{ - int i, j; - - str1 = malloc (2 * sizeof (type_struct *)); - - for (i = 0; i <= 1; i++) - str1[i] = malloc (2 * sizeof (type_struct)); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c b/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c deleted file mode 100644 index 09668face34..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c +++ /dev/null @@ -1,45 +0,0 @@ -/* { dg-do run } */ - -#include <stdlib.h> - -struct S { int a; struct V *b; }; -typedef struct { int c; } T; -typedef struct { int d; int e; } U; - -void * -fn (void *x) -{ - return x; -} - -int -foo (struct S *s) -{ - T x; - - T y = *(T *)fn (&x); - return y.c; -} - -int -bar (struct S *s) -{ - U x; - - U y = *(U *)fn (&x); - return y.d + s->a; -} - -int -main () -{ - struct S s; - - foo(&s) + bar (&s); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "No structures to transform" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c deleted file mode 100644 index 0116d819800..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c +++ /dev/null @@ -1,44 +0,0 @@ -/* { dg-do run } */ - -#include <stdlib.h> -struct str -{ - int a; - float b; -}; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -foo (struct str * p_str) -{ - static int sum = 0; - - sum = sum + p_str->a; - return sum; -} - -int -main () -{ - int i, sum; - struct str * p = malloc (N * sizeof (struct str)); - if (p == NULL) - return 0; - for (i = 0; i < N; i++) - sum = foo (p+i); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is passed to local function...Excluded." "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c deleted file mode 100644 index 21a6a7f3a2e..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c +++ /dev/null @@ -1,31 +0,0 @@ -/* { dg-do run } */ - -#include <stdlib.h> - -struct A { - int d; -}; - -struct A a; - -struct A foo () -{ - a.d = 5; - return a; -} - -int -main () -{ - a.d = 0; - foo (); - - if (a.d != 5) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is return type of function...Excluded" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c deleted file mode 100644 index 6da3420f6e8..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c +++ /dev/null @@ -1,33 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - int b; -}str_t; - -#define N 2 - -str_t A[2] = {{1,1},{2,2}}; - -int -main () -{ - int i; - - for (i = 0; i < N; i++) - A[i].b = A[i].a; - - for (i = 0; i < N; i++) - if (A[i].b != A[i].a) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is initialized...Excluded" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ - diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c deleted file mode 100644 index bd03ec42f05..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c +++ /dev/null @@ -1,34 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#define N 1000 - -typedef struct -{ - str_t A[N]; - int c; -}str_with_substr_t; - -str_with_substr_t a; - -int -main () -{ - int i; - - for (i = 0; i < N; i++) - a.A[i].b = 0; - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c deleted file mode 100644 index 59e0e48321a..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c +++ /dev/null @@ -1,49 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 16000 -#define N 1000 -#else -#define N (STACK_SIZE/16) -#endif -#else -#define N 1000 -#endif - -typedef struct -{ - str_t * sub_str; - int c; -}str_with_substr_t; - -int foo; - -int -main (void) -{ - int i; - str_with_substr_t A[N]; - str_t a[N]; - - for (i=0; i < N; i++) - A[i].sub_str = &(a[i]); - - for (i=0; i < N; i++) - A[i].sub_str->a = 5; - - foo = A[56].sub_str->a; - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c deleted file mode 100644 index a6b32ddd688..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c +++ /dev/null @@ -1,46 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - - -typedef struct -{ - str_t sub_str; - int c; -}str_with_substr_t; - -int -main () -{ - int i; - str_with_substr_t A[N]; - - for (i = 0; i < N; i++) - A[i].sub_str.a = 5; - - for (i = 0; i < N; i++) - if (A[i].sub_str.a != 5) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c b/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c deleted file mode 100644 index b61e26b1248..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c +++ /dev/null @@ -1,33 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#define N 1000 -str_t A[N]; - -int -main () -{ - int i; - - for (i = 0; i < N; i++) - { - A[i].a = 0; - } - - for (i = 0; i < N; i++) - if (A[i].a != 0) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c b/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c deleted file mode 100644 index 39351e072e2..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c +++ /dev/null @@ -1,46 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -str_t *p; - -int -main () -{ - int i, sum; - - p = malloc (N * sizeof (str_t)); - if (p == NULL) - return 0; - for (i = 0; i < N; i++) - p[i].b = i; - - for (i = 0; i < N; i++) - p[i].b = p[i].a + 1; - - for (i = 0; i < N; i++) - if (p[i].b != p[i].a + 1) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c b/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c deleted file mode 100644 index 18d5a734740..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c +++ /dev/null @@ -1,41 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -main () -{ - int i; - str_t A[N]; - - for (i = 0; i < N; i++) - { - A[i].a = 0; - } - - for (i = 0; i < N; i++) - if (A[i].a != 0) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c b/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c deleted file mode 100644 index 26a9dbd7314..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c +++ /dev/null @@ -1,44 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -main () -{ - int i, sum; - - str_t * p = malloc (N * sizeof (str_t)); - if (p == NULL) - return 0; - for (i = 0; i < N; i++) - p[i].b = i; - - for (i = 0; i < N; i++) - p[i].b = p[i].a + 1; - - for (i = 0; i < N; i++) - if (p[i].b != p[i].a + 1) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c b/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c deleted file mode 100644 index 6caadcf1230..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c +++ /dev/null @@ -1,48 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 8000 -#define N 1000 -#else -#define N (STACK_SIZE/8) -#endif -#else -#define N 1000 -#endif - -int -main () -{ - int i, num; - - num = rand(); - num = num > N ? N : num; - str_t * p = malloc (num * sizeof (str_t)); - - if (p == 0) - return 0; - - for (i = 0; i < num; i++) - p[i].b = i; - - for (i = 0; i < num; i++) - p[i].a = p[i].b + 1; - - for (i = 0; i < num; i++) - if (p[i].a != p[i].b + 1) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_mult_field_peeling.c b/gcc/testsuite/gcc.dg/struct/wo_prof_mult_field_peeling.c deleted file mode 100644 index 8f116df4d01..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_mult_field_peeling.c +++ /dev/null @@ -1,43 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - float b; - int c; - float d; -}str_t; - -#ifdef STACK_SIZE -#if STACK_SIZE > 1600 -#define N 100 -#else -#define N (STACK_SIZE/16) -#endif -#else -#define N 100 -#endif - -int -main () -{ - int i; - str_t *p = malloc (N * sizeof (str_t)); - if (p == NULL) - return 0; - for (i = 0; i < N; i++) - p[i].a = 5; - - for (i = 0; i < N; i++) - if (p[i].a != 5) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* The structure str_t is erroneously peeled into 4 structures instead of 2. */ -/* { dg-final { scan-ipa-dump "the number of new types is 2" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c deleted file mode 100644 index 812763d53ff..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c +++ /dev/null @@ -1,35 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - int b; -}str_t; - -#define N 3 - -str_t str; - -int -main () -{ - int i; - int res = 1<<(1<<N); - str.a = 2; - - for (i = 0; i < N; i++) - str.a = str.a * str.a; - - if (str.a != res) - abort (); - - /* POSIX ignores all but the 8 low-order bits, but other - environments may not. */ - return (str.a & 255); -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c deleted file mode 100644 index 313af1080c1..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c +++ /dev/null @@ -1,35 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - int b; -}str_t; - -#define N 3 - -int -main () -{ - int i; - int res = 1<<(1<<N); - str_t str; - - str.a = 2; - - for (i = 0; i < N; i++) - str.a = str.a * str.a; - - if (str.a != res) - abort (); - - /* POSIX ignores all but the 8 low-order bits, but other - environments may not. */ - return (str.a & 255); -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "No structures to transform" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_pointer.c b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_pointer.c deleted file mode 100644 index bd70dfb6375..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_pointer.c +++ /dev/null @@ -1,40 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> -typedef struct -{ - int a; - int *b; -}str_t; - -#define N 3 - -str_t *p; - -int -main () -{ - str_t str; - int i; - int res = 1 << (1 << N); - p = &str; - str.a = 2; - - p->b = &(p->a); - - for (i=0; i < N; i++) - p->a = *(p->b)*(*(p->b)); - - if (p->a != res) - abort (); - - /* POSIX ignores all but the 8 low-order bits, but other - environments may not. */ - return (p->a & 255); -} - -/*--------------------------------------------------------------------------*/ -/* The access &(p->a) is handled incorrectly in ipa-struct-reorg.c. */ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c b/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c deleted file mode 100644 index 92da94d2923..00000000000 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c +++ /dev/null @@ -1,68 +0,0 @@ -/* { dg-do compile } */ -/* { dg-do run } */ - -#include <stdlib.h> - -typedef struct -{ - int a; - float b; -}str_t1; - -typedef struct -{ - int c; - float d; -}str_t2; - -#ifdef STACK_SIZE -#if STACK_SIZE > 16000 -#define N 1000 -#else -#define N (STACK_SIZE/16) -#endif -#else -#define N 1000 -#endif - -str_t1 *p1; -str_t2 *p2; -int num; - -void -foo (void) -{ - int i; - - for (i=0; i < num; i++) - p2[i].c = 2; -} - -int -main () -{ - int i, r; - - r = rand (); - num = r > N ? N : r; - p1 = malloc (num * sizeof (str_t1)); - p2 = malloc (num * sizeof (str_t2)); - - if (p1 == NULL || p2 == NULL) - return 0; - - for (i = 0; i < num; i++) - p1[i].a = 1; - - foo (); - - for (i = 0; i < num; i++) - if (p1[i].a != 1 || p2[i].c != 2) - abort (); - - return 0; -} - -/*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "ipa_struct_reorg" { xfail *-*-* } } } */ -/* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/torture/20090618-1.c b/gcc/testsuite/gcc.dg/torture/20090618-1.c index 8b601d62c79..60eb900785e 100644 --- a/gcc/testsuite/gcc.dg/torture/20090618-1.c +++ b/gcc/testsuite/gcc.dg/torture/20090618-1.c @@ -1,5 +1,6 @@ /* { dg-do run } */ /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ +/* { dg-skip-if "PR middle-end/47405" { mips-sgi-irix* } } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/torture/pr37868.c b/gcc/testsuite/gcc.dg/torture/pr37868.c index 1f89dff2fff..c5df71b5aa5 100644 --- a/gcc/testsuite/gcc.dg/torture/pr37868.c +++ b/gcc/testsuite/gcc.dg/torture/pr37868.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-options "-fno-strict-aliasing" } */ -/* { dg-skip-if "unaligned access" { sparc*-*-* } "*" "" } */ +/* { dg-skip-if "unaligned access" { sparc*-*-* sh*-*-* } "*" "" } */ extern void abort (void); #if (__SIZEOF_INT__ <= 2) diff --git a/gcc/testsuite/gcc.dg/torture/pr43165.c b/gcc/testsuite/gcc.dg/torture/pr43165.c index 637fb464625..991c3d118b9 100644 --- a/gcc/testsuite/gcc.dg/torture/pr43165.c +++ b/gcc/testsuite/gcc.dg/torture/pr43165.c @@ -1,5 +1,6 @@ /* PR debug/43165 */ /* { dg-options "-g" } */ +/* { dg-require-effective-target int32plus } */ struct __attribute__((packed)) S { diff --git a/gcc/testsuite/gcc.dg/torture/pr47228.c b/gcc/testsuite/gcc.dg/torture/pr47228.c index 5bc9f0ad511..4ee7cab4dcd 100644 --- a/gcc/testsuite/gcc.dg/torture/pr47228.c +++ b/gcc/testsuite/gcc.dg/torture/pr47228.c @@ -1,4 +1,5 @@ /* { dg-do run } */ +/* { dg-require-effective-target int32plus } */ struct S4 { diff --git a/gcc/testsuite/gcc.dg/torture/pr47725.c b/gcc/testsuite/gcc.dg/torture/pr47725.c new file mode 100644 index 00000000000..03d5d36c321 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr47725.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +struct _Unwind_Context +{ + void *reg[17]; + void *ra; +}; +extern void bar (struct _Unwind_Context *); +void +__frame_state_for (void *pc_target) +{ + struct _Unwind_Context context; + __builtin_memset (&context, 0, sizeof (struct _Unwind_Context)); + context.ra = pc_target; + bar (&context); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr47917.c b/gcc/testsuite/gcc.dg/torture/pr47917.c new file mode 100644 index 00000000000..831305d601a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr47917.c @@ -0,0 +1,40 @@ +/* { dg-do run } */ +/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -D_ISO_C_SOURCE=19990L" { target alpha*-dec-osf5* } } */ +/* { dg-options "-std=c99 -D_XOPEN_SOURCE=500" { target mips-sgi-irix6.5 *-*-solaris2.[89] } } */ +/* { dg-options "-std=gnu99" { target *-*-hpux* } } */ +/* { dg-xfail-if "no C99 snprintf function" { *-*-hpux10* } } */ +/* { dg-xfail-run-if "non-conforming C99 snprintf" { *-*-hpux11.[012]* } } */ + +/* PR middle-end/47917 */ + +#include <stdio.h> +extern int memcmp (const void *, const void *, __SIZE_TYPE__); +extern void abort (void); + +char buf1[6], buf2[6], buf3[4], buf4[4]; +int i; + +int +foo (void) +{ + int ret = snprintf (buf1, sizeof buf1, "abcde"); + ret += snprintf (buf2, sizeof buf2, "abcdef") * 16; + ret += snprintf (buf3, sizeof buf3, "%s", i++ < 6 ? "abc" : "def") * 256; + ret += snprintf (buf4, sizeof buf4, "%s", i++ > 10 ? "abcde" : "defgh") * 4096; + return ret; +} + +int +main (void) +{ + if (foo () != 5 + 6 * 16 + 3 * 256 + 5 * 4096) + abort (); + if (memcmp (buf1, "abcde", 6) != 0 + || memcmp (buf2, "abcde", 6) != 0 + || memcmp (buf3, "abc", 4) != 0 + || memcmp (buf4, "def", 4) != 0 + || i != 2) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr48146.c b/gcc/testsuite/gcc.dg/torture/pr48146.c new file mode 100644 index 00000000000..c208325311c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48146.c @@ -0,0 +1,35 @@ +/* { dg-do compile } */ + +static unsigned char +safe_sub_func_int_s_s (int si1, unsigned char si2) +{ + return si1 ^ si2 & -si2 ^ si2 ? : si1 - si2; +} + +int g_2[10] = { + 0x90AC204EL +}; + +volatile unsigned char g_39; + +unsigned char +func_67 (unsigned short p_68) +{ + unsigned char l_92; + unsigned char l_74; + int *l = &g_2[6]; +lbl_90:*l ^= 1; + if (p_68) + goto lbl_93; + for (l_74 = 0;; l_74 = safe_sub_func_int_s_s (l_74, 1)) + { + if (l_74) + goto lbl_90; +lbl_93:l_92 ^= 0 != &g_39; + if (0) + { + } + else + *l = 1; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr48343.c b/gcc/testsuite/gcc.dg/torture/pr48343.c new file mode 100644 index 00000000000..e56b3a3dae3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48343.c @@ -0,0 +1,19 @@ +/* PR debug/48343 */ +/* { dg-do compile } */ +/* { dg-options "-fcompare-debug" } */ + +void foo (unsigned char *, unsigned char *); + +void +test (unsigned int x, int y) +{ + unsigned int i, j = 0, k; + unsigned char s[256], t[64]; + foo (s, t); + t[0] = y; + for (i = 0; i < 256; i++) + { + j = (j + s[i] + t[i % x]) & 0xff; + k = i; i = j; j = k; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr48694-1.c b/gcc/testsuite/gcc.dg/torture/pr48694-1.c new file mode 100644 index 00000000000..810366bc8b4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48694-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ + +extern volatile int g_89[5][9]; +extern int g, *gp; +void func_64() +{ + int i; + for (i = 0; i < 1; ) + { + for (g = 0; g < 1; ) + return; + gp = (int *)&g_89[g][0]; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr48694-2.c b/gcc/testsuite/gcc.dg/torture/pr48694-2.c new file mode 100644 index 00000000000..4791ac3f70c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48694-2.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +extern volatile int g_4[1][4]; +extern int g_7; +void modify(int *); +void func_2() +{ + int l_46 = 4; + if (g_7) + modify(&l_46); + else + { + int i; + for (i = 0; i != 5; i += 1) + { + volatile int *vp = &g_4[0][l_46]; + *vp = 0; + } + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr48731.c b/gcc/testsuite/gcc.dg/torture/pr48731.c new file mode 100644 index 00000000000..74b77f67c52 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48731.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ + +#include <stdarg.h> + +int blah(int a, ...) +{ + va_list va; + va_start(va,a); + if (a == 0) + return -1; + else + { + int i; + for (i = 0; i < a; i++) + va_arg(va,int); + return va_arg(va,int); + } +} + +__attribute((flatten)) +int blah2(int b, int c) +{ + return blah(2, b, c); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr48822.c b/gcc/testsuite/gcc.dg/torture/pr48822.c new file mode 100644 index 00000000000..b619f369b4f --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48822.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +void foo (int *, int *); +int bar () +{ + int a = 0; + int b = 0; + if (b != 0) + { + int ax = a; + int bx = b; + while (bx != 0) + { + int tem = ax % bx; + ax = bx; + bx = tem; + } + } + foo (&a, &b); +} diff --git a/gcc/testsuite/gcc.dg/torture/pta-structcopy-1.c b/gcc/testsuite/gcc.dg/torture/pta-structcopy-1.c index bdb2acb0464..5dc041b0edd 100644 --- a/gcc/testsuite/gcc.dg/torture/pta-structcopy-1.c +++ b/gcc/testsuite/gcc.dg/torture/pta-structcopy-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-fno-tree-sra -fdump-tree-alias" } */ +/* { dg-options "-fdump-tree-ealias" } */ /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ struct X @@ -12,10 +12,11 @@ struct X } y; }; int i; -static int +static int __attribute__((always_inline)) foo (struct X *x) { struct Y y = x->y; + /* In the inlined instance the dereferenced pointer needs to point to i. */ *y.p = 0; i = 1; return *y.p; @@ -30,5 +31,5 @@ int main() return 0; } -/* { dg-final { scan-tree-dump "points-to vars: { i }" "alias" } } */ -/* { dg-final { cleanup-tree-dump "alias" } } */ +/* { dg-final { scan-tree-dump "points-to vars: { i }" "ealias" } } */ +/* { dg-final { cleanup-tree-dump "ealias" } } */ diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/non-local-goto-5.c b/gcc/testsuite/gcc.dg/torture/stackalign/non-local-goto-5.c index 08ca95d765c..d198c9a97f9 100644 --- a/gcc/testsuite/gcc.dg/torture/stackalign/non-local-goto-5.c +++ b/gcc/testsuite/gcc.dg/torture/stackalign/non-local-goto-5.c @@ -1,8 +1,8 @@ /* { dg-do run } */ +extern void exit (int); #if !defined (NO_LABEL_VALUES) && !defined (NO_TRAMPOLINES) extern void abort (void); -extern void exit (int); int s(i){if(i>0){__label__ l1;int f(int i){if(i==2)goto l1;return 0;}return f(i);l1:;}return 1;} int x(){return s(0)==1&&s(1)==0&&s(2)==1;} int main(){if(x()!=1)abort();exit(0);} diff --git a/gcc/testsuite/gcc.dg/torture/va-arg-25.c b/gcc/testsuite/gcc.dg/torture/va-arg-25.c index 8496460d28c..8c0da549d08 100644 --- a/gcc/testsuite/gcc.dg/torture/va-arg-25.c +++ b/gcc/testsuite/gcc.dg/torture/va-arg-25.c @@ -3,6 +3,8 @@ /* { dg-do run } */ /* { dg-options "-msse" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-require-effective-target sse_runtime { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mabi=altivec -maltivec" { target { powerpc-*-* powerpc64-*-* } } } */ +/* { dg-require-effective-target vmx_hw { target { powerpc-*-* powerpc64--*-* } } } */ #include <stdarg.h> #include <stdlib.h> diff --git a/gcc/testsuite/gcc.dg/torture/vector-1.c b/gcc/testsuite/gcc.dg/torture/vector-1.c index 9ab78aaf53e..205fee6d6de 100644 --- a/gcc/testsuite/gcc.dg/torture/vector-1.c +++ b/gcc/testsuite/gcc.dg/torture/vector-1.c @@ -3,6 +3,8 @@ /* { dg-do run } */ /* { dg-options "-msse" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-require-effective-target sse_runtime { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mabi=altivec" { target { powerpc-*-* powerpc64-*-* } } } */ +/* { dg-require-effective-target vmx_hw { target { powerpc-*-* powerpc64--*-* } } } */ #define vector __attribute__((vector_size(16) )) diff --git a/gcc/testsuite/gcc.dg/torture/vector-2.c b/gcc/testsuite/gcc.dg/torture/vector-2.c index bff9f82cdad..6cc56cfae78 100644 --- a/gcc/testsuite/gcc.dg/torture/vector-2.c +++ b/gcc/testsuite/gcc.dg/torture/vector-2.c @@ -3,6 +3,8 @@ /* { dg-do run } */ /* { dg-options "-msse" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-require-effective-target sse_runtime { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mabi=altivec" { target { powerpc-*-* powerpc64-*-* } } } */ +/* { dg-require-effective-target vmx_hw { target { powerpc-*-* powerpc64--*-* } } } */ #define vector __attribute__((vector_size(16) )) diff --git a/gcc/testsuite/gcc.dg/tree-prof/prof-robust-1.c b/gcc/testsuite/gcc.dg/tree-prof/prof-robust-1.c new file mode 100644 index 00000000000..316cfc75734 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-prof/prof-robust-1.c @@ -0,0 +1,25 @@ +/* { dg-options "-O2 -w" } */ + +#include <stdio.h> +#include <stdlib.h> + +#ifdef _PROFILE_USE +int foo(int x) { + return 3 * x; +} +#else +int foo(int x) { + return 3 * x; +} +#endif + +int x = 1000; + +int main(int argc, char *argv[]) { + int i; + int sum = 0; + for (i = 0; i < x; i++) + sum += i; + printf("%d\n", sum); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c index f96255d0c19..97c91de8d61 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c @@ -26,7 +26,7 @@ main () /* { dg-final-use { scan-ipa-dump "Mod power of 2 transformation on insn" "tree_profile_ipa" } } */ /* This is part of code checking that n is power of 2, so we are sure that the transformation didn't get optimized out. */ -/* { dg-final-use { scan-tree-dump "n_\[0-9\]* \\+ 0xffff" "optimized"} } */ +/* { dg-final-use { scan-tree-dump "n_\[0-9\]* \\+ (4294967295|0x0*ffffffff)" "optimized"} } */ /* { dg-final-use { scan-tree-dump-not "Invalid sum" "optimized"} } */ /* { dg-final-use { cleanup-tree-dump "optimized" } } */ /* { dg-final-use { cleanup-ipa-dump "tree_profile_ipa" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c index 6007949546e..5e6828b6f4f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fstrict-aliasing -fdump-tree-fre" } */ +/* { dg-options "-O1 -fstrict-aliasing -fdump-tree-fre1" } */ __extension__ typedef __SIZE_TYPE__ size_t; extern void *xmalloc (size_t) __attribute__ ((__malloc__)); @@ -34,5 +34,5 @@ find_unreachable_blocks (void) able to determine that modifying e->dest->flags does not modify e or e->dest if we can assert strict-aliasing rules. The net result is that we only need one load of e->dest. */ -/* { dg-final { scan-tree-dump-times "->dest" 1 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "->dest" 1 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias-18.c b/gcc/testsuite/gcc.dg/tree-ssa/alias-18.c index e86acbc1900..69c2e23c915 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/alias-18.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/alias-18.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-details -fdump-tree-optimized" } */ +/* { dg-options "-O2 -fdump-tree-fre1-details -fdump-tree-optimized" } */ struct A { int i; @@ -76,15 +76,15 @@ int test8 (struct A *p, int *q) return *q; } -/* { dg-final { scan-tree-dump "with 0" "fre" } } */ -/* { dg-final { scan-tree-dump "with 1" "fre" } } */ -/* { dg-final { scan-tree-dump "with 3" "fre" } } */ -/* { dg-final { scan-tree-dump "with 4" "fre" } } */ -/* { dg-final { scan-tree-dump "with 5" "fre" } } */ -/* { dg-final { scan-tree-dump "with 8" "fre" } } */ +/* { dg-final { scan-tree-dump "with 0" "fre1" } } */ +/* { dg-final { scan-tree-dump "with 1" "fre1" } } */ +/* { dg-final { scan-tree-dump "with 3" "fre1" } } */ +/* { dg-final { scan-tree-dump "with 4" "fre1" } } */ +/* { dg-final { scan-tree-dump "with 5" "fre1" } } */ +/* { dg-final { scan-tree-dump "with 8" "fre1" } } */ /* { dg-final { scan-tree-dump-not "return 2;" "optimized" } } */ /* { dg-final { scan-tree-dump-not "return 6;" "optimized" } } */ /* { dg-final { scan-tree-dump-not "return 7;" "optimized" } } */ /* { dg-final { scan-tree-dump-not "return -1;" "optimized" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias_bug.c b/gcc/testsuite/gcc.dg/tree-ssa/alias_bug.c new file mode 100644 index 00000000000..64fef27874a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/alias_bug.c @@ -0,0 +1,61 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-optimized" } */ + +typedef unsigned u32; +typedef unsigned short u16; +typedef unsigned char u8; +struct biosregs { + union { + struct { + u32 edi; + u32 esi; + u32 ebp; + u32 _esp; + u32 ebx; + u32 edx; + u32 ecx; + u32 eax; + u32 _fsgs; + u32 _dses; + u32 eflags; + }; + struct { + u16 di, hdi; + u16 si, hsi; + u16 bp, hbp; + u16 _sp, _hsp; + u16 bx, hbx; + u16 dx, hdx; + u16 cx, hcx; + u16 ax, hax; + u16 gs, fs; + u16 es, ds; + u16 flags, hflags; + }; + struct { + u8 dil, dih, edi2, edi3; + u8 sil, sih, esi2, esi3; + u8 bpl, bph, ebp2, ebp3; + u8 _spl, _sph, _esp2, _esp3; + u8 bl, bh, ebx2, ebx3; + u8 dl, dh, edx2, edx3; + u8 cl, ch, ecx2, ecx3; + u8 al, ah, eax2, eax3; + }; + }; +}; +void initregs(struct biosregs *regs); +void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); +static u32 *const gp = (u32*) 0x32; +void keyboard_set_repeat(void) +{ + struct biosregs ireg; + *gp = 10; + initregs(&ireg); + ireg.ax = 0x0305; + intcall(0x16, &ireg, ((void *)0)); +} + +/* { dg-final { scan-tree-dump-times "ireg.*ax" 1 "optimized"} } */ + +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/complex-6.c b/gcc/testsuite/gcc.dg/tree-ssa/complex-6.c new file mode 100644 index 00000000000..01d1fd1195d --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/complex-6.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-optimized" } */ + +float +quantum_real(float _Complex a) +{ + float *p = (float *) &a; + return p[0]; +} +float +quantum_imag(float _Complex a) +{ + float *p = (float *) &a; + return p[1]; +} +float +quantum_foo(float _Complex a) +{ + float *p = (float *) &a; + return p[2]; +} + +/* { dg-final { scan-tree-dump-times "REALPART_EXPR" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "IMAGPART_EXPR" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-1.c b/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-1.c index a3c6a2ece88..d74022e4b52 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-1.c @@ -11,6 +11,6 @@ int foo(char *b) /* Folding should have determined that the two addresses were not identical and thus collapsed the function into a trivial "return 0". */ -/* { dg-final { scan-tree-dump-times "return 0" 1 "original" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "return 0" 1 "original" } } */ /* { dg-final { cleanup-tree-dump "original" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/foldstring-1.c b/gcc/testsuite/gcc.dg/tree-ssa/foldstring-1.c index fa64ae14cc4..3cfe44d1bd2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/foldstring-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/foldstring-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-fre" } */ +/* { dg-options "-O1 -fdump-tree-fre1" } */ void arf () @@ -7,5 +7,5 @@ arf () if (""[0] == 0) blah (); } -/* { dg-final { scan-tree-dump-times "= 0;" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "= 0;" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c index b46b8ece816..5ca8060c8b3 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ int b; unsigned a; @@ -18,5 +18,5 @@ void test2(void) conversion to int. FRE should then be able to replace the rhs of the store to b by 1. */ -/* { dg-final { scan-tree-dump "Replaced\[^\\n\]*with 1" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced\[^\\n\]*with 1" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c index cc583e293f8..d02a62d3d34 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-optimized -fdump-tree-fre -W -Wall -fno-early-inlining" } */ +/* { dg-options "-O1 -fdump-tree-optimized -fdump-tree-fre1 -W -Wall -fno-early-inlining" } */ int b; unsigned a; @@ -16,6 +16,6 @@ void f(void) /* We should have converted the assignments to two = 1. FRE does this. */ /* { dg-final { scan-tree-dump-times " = 1" 2 "optimized"} } */ -/* { dg-final { scan-tree-dump-not " = a;" "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-not " = a;" "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/fre-vce-1.c b/gcc/testsuite/gcc.dg/tree-ssa/fre-vce-1.c index 599d1f1efd5..c6c142b4eaf 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/fre-vce-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/fre-vce-1.c @@ -1,5 +1,5 @@ -/* { dg-options "-O2 -fdump-tree-fre -w" } */ -/* { dg-options "-O2 -fdump-tree-fre -w -msse" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-O2 -fdump-tree-fre1 -w" } */ +/* { dg-options "-O2 -fdump-tree-fre1 -w -msse" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-do compile } */ #define vector __attribute__((vector_size(sizeof(int)*4) )) struct s { vector int i; }; @@ -32,6 +32,6 @@ void a2 (struct s1 sv, int i) g(&sv, *(float*)&sv.i); } -/* { dg-final { scan-tree-dump-times "sv_\[0-9\]\\\(D\\\)->i" 2 "fre" } } */ -/* { dg-final { scan-tree-dump-times "sv.i" 2 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "sv_\[0-9\]\\\(D\\\)->i" 2 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "sv.i" 2 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/inline-10.c b/gcc/testsuite/gcc.dg/tree-ssa/inline-10.c new file mode 100644 index 00000000000..1d7aeef2aa0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/inline-10.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -fdump-tree-optimized -fno-partial-inlining" } */ +void do_something1(void); +void do_something2(void); +void do_something3(void); +void do_something4(void); +void do_something5(void); +void do_something_big(int); + +int do_something (int size) +{ + if (__builtin_constant_p (size)) + switch (size) + { + case 1:do_something1 (); break; + case 2:do_something2 (); break; + case 5:do_something1 (); do_something1 (); + case 3:do_something3 (); break; + case 4:do_something4 (); break; + } + else + do_something_big (size); +} +extern int n; +main() +{ + do_something (2); + do_something (3); + do_something (5); + do_something (70); +} +/* All calls should be inlined, except for do_something (5). */ +/* { dg-final { scan-tree-dump-not "do_something1" "optimized" } } */ +/* { dg-final { scan-tree-dump-times "do_something2" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "do_something3" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "do_something \\(5\\)" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-not "do_something \\(70\\)" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/inline-8.c b/gcc/testsuite/gcc.dg/tree-ssa/inline-8.c new file mode 100644 index 00000000000..3215473ec1a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/inline-8.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O -finline-small-functions --param early-inlining-insns=0 -fdump-tree-einline" } */ + +int foo0(); +void bar0() { foo0(); } +void foobar0() { bar0(); } + +void foo1(); +void bar1() { foo1(); } +void foobar1() { bar1(); } + +#if 0 +int foo2(); +int bar2() { return foo2(); } +/* The size estimate fails to see that inlining the call statement in bar2 + will make its lhs dead. */ +void foobar2() { bar2(); } +#endif + +int foo3(); +int bar3() { return foo3(); } +int foobar3() { return bar3(); } + +int bar4() { return 0; } +void foobar4() { bar4(); } + +int bar5() { return 0; } +int foobar5() { return bar5(); } + +/* { dg-final { scan-tree-dump-times "Inlining" 5 "einline" } } */ +/* { dg-final { cleanup-tree-dump "einline" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/inline-9.c b/gcc/testsuite/gcc.dg/tree-ssa/inline-9.c new file mode 100644 index 00000000000..678dd852db6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/inline-9.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -fdump-tree-optimized -fno-partial-inlining" } */ + +/* When optimizing for size, t should be inlined when it expands to one call only. */ +extern int q(int); +int t(int a) +{ + if (a > 12) + { + q(a+5); + q(a+5); + } + else + q(a+10); +} + +main() +{ + t(5); + t(20); +} +/* { dg-final { scan-tree-dump-times "q \\(15\\)" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "t \\(20\\)" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c b/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c new file mode 100644 index 00000000000..b102a7a52e7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/integer-addr.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized -fno-strict-aliasing" } */ +/* Test with fixed address */ +static int *foo = (int *) (unsigned long) 0x7800000; + +int func(void) __attribute__ ((noinline)); + +extern int bar(void); + +int func(void) +{ + if (*foo) { + return 1; + } + return 0; + +} + +int foobar(void) +{ + + if (func()) { + *foo = 1; + } + return func(); +} + +/* { dg-final { scan-tree-dump-times "= func" 2 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c index e6130bbe7bd..6fc2a57a9f2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-pre-stats -fdump-tree-fre" } */ +/* { dg-options "-O2 -fdump-tree-pre-stats -fdump-tree-fre1" } */ #include <stddef.h> union tree_node; @@ -73,8 +73,8 @@ main (void) return 0; } -/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre" } } */ +/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre1" } } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */ /* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ /* { dg-final { cleanup-tree-dump "pre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr14814.c b/gcc/testsuite/gcc.dg/tree-ssa/pr14814.c index eb360551561..20608156f3c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr14814.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr14814.c @@ -18,5 +18,5 @@ int foo(const struct XX* r) { return 1; } -/* { dg-final { scan-tree-dump-times "&" 0 "forwprop2" } } */ +/* { dg-final { scan-tree-dump-times "= &" 0 "forwprop2" } } */ /* { dg-final { cleanup-tree-dump "forwprop2" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21574.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21574.c index fc33d74e9ff..dcfa131510c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21574.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21574.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ int foo (int *p) @@ -9,5 +9,5 @@ foo (int *p) } /* The store to *p should be propagated to the load statement. */ -/* { dg-final { scan-tree-dump "Replaced \\\*p_.\\\(D\\\) with 0" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\*p_.\\\(D\\\) with 0" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23382.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23382.c deleted file mode 100644 index fd74af8d6a1..00000000000 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr23382.c +++ /dev/null @@ -1,17 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-pre-details" } */ -struct a -{ - int length; - int a1[256]; -}; - -void *malloc(__SIZE_TYPE__ size) __attribute__((malloc)); - -int f(void) -{ - struct a *a = malloc(sizeof(struct a)); - return a->length; -} -/* { dg-final { scan-tree-dump-times "Variable: HEAP" 1 "pre"} } */ -/* { dg-final { cleanup-tree-dump "pre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr38699.c b/gcc/testsuite/gcc.dg/tree-ssa/pr38699.c index 6845324e41a..21b33513061 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr38699.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr38699.c @@ -17,6 +17,7 @@ #define PORTC _SFR_IO8(0x15) #define PORTD _SFR_IO8(0x12) + static void delay_wait_us( unsigned char timeout ) { __asm__ __volatile__ ("wdr"); @@ -27,8 +28,12 @@ static void delay_wait_us( unsigned char timeout ) { while(!(TIFR & (1 << (TOV0)))); } +/* The original testcase was multiplying by 1000. Gcc is now smart enough + to work out that actual parameter is 5000 that is not what testcase was + about. Obstructate the code somewhat then. */ +int a; static void delay_wait_us_ms( unsigned char timeout ) { - delay_wait_us( timeout * 1000 ); + delay_wait_us( timeout * a ); } diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr45144.c b/gcc/testsuite/gcc.dg/tree-ssa/pr45144.c index 1e0dabdee8b..85b2b159766 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr45144.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr45144.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-optimized" } */ +/* { dg-require-effective-target int32plus } */ void baz (unsigned); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr46076.c b/gcc/testsuite/gcc.dg/tree-ssa/pr46076.c index e9dc434ece0..a2777a604b9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr46076.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr46076.c @@ -1,7 +1,7 @@ /* { dg-do link } */ /* { dg-options "-O2" } */ -extern void link_error (void) { /* XFAIL */ } +extern void link_error (void); typedef unsigned char(*Calculable)(void); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c index 2cf245460ee..8120dad7fe9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c @@ -3,24 +3,26 @@ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-O2 -fdump-tree-optimized" } */ -void blas (char xxx); +void blas (signed char xxx); void blau (unsigned char xxx); void tst(void) { unsigned i; - for (i = 0; i < 128; i++) /* This cast to char has to be preserved. */ - blas ((char) i); - for (i = 0; i < 127; i++) /* And this one does not. */ - blas ((char) i); - for (i = 0; i < 255; i++) /* This cast is not necessary. */ + for (i = 0; i < 129; i++) /* This truncation to char has to be preserved. */ + blas ((signed char) i); + for (i = 0; i < 128; i++) /* This one is not necessary, but nothing eliminates it. */ + blas ((signed char) i); + for (i = 0; i < 127; i++) /* This one is not necessary, IVOPTS eliminates it. */ + blas ((signed char) i); + for (i = 0; i < 256; i++) /* This one is not necessary, VRP eliminates it. */ + blau ((unsigned char) i); + for (i = 0; i < 257; i++) /* This one is necessary. */ blau ((unsigned char) i); - for (i = 0; i < 256; i++) - blau ((unsigned char) i); /* This one is necessary. */ } -/* { dg-final { scan-tree-dump-times "= \\(unsigned char\\)" 1 "optimized" } } */ -/* { dg-final { scan-tree-dump-times "= \\(char\\)" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "& 255" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "= \\(signed char\\)" 2 "optimized" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c index 7d769ae176a..aece3c7cdc7 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c @@ -18,7 +18,7 @@ int bar(void) return ((struct Foo *)p)->i; } -const struct Foo g; +extern const struct Foo g; int foobar(void) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-19.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-19.c index ab4182246a3..c67373f017e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-19.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-19.c @@ -12,5 +12,5 @@ int g() return *i; /* This should be turned into a.i */ } -/* { dg-final { scan-tree-dump "= a.i;" "ccp1" } } */ +/* { dg-final { scan-tree-dump "= MEM\\\[\\\(int \\\*\\\)&a\\\];" "ccp1" } } */ /* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-4.c index 89118a62621..261880cc240 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-cddce1" } */ +/* { dg-options "-O -fno-tree-fre -fdump-tree-cddce1" } */ int foo(int b) { @@ -14,5 +14,7 @@ int foo(int b) return a[2] + b; } +/* Verify DCE removes all accesses to a but the last store and the + read from a[2]. */ /* { dg-final { scan-tree-dump-times "a\\\[\[^\n\]\\\]" 2 "cddce1" } } */ /* { dg-final { cleanup-tree-dump "cddce1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c index 5bbfd3d17fb..70a905819cd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-details" } */ +/* { dg-options "-O2 -fdump-tree-fre1-details" } */ int t(int a) __attribute__ ((const)); void q (void); void @@ -12,5 +12,5 @@ threading(int a,int b) } } /* We should thread the jump twice and eliminate it. */ -/* { dg-final { scan-tree-dump-times "Replaced.* t " 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Replaced.* t " 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-3.c new file mode 100644 index 00000000000..d851bf23fe8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-3.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-dom1-details" } */ +extern void abort (void) __attribute__ ((__noreturn__)); +union tree_node; +typedef union tree_node *tree; +enum tree_code +{ + VAR_DECL, + SSA_NAME, + MAX_TREE_CODES +}; +extern unsigned char tree_contains_struct[MAX_TREE_CODES][64]; +struct tree_base +{ + enum tree_code code:16; +}; +enum tree_node_structure_enum +{ + TS_DECL_COMMON +}; +struct tree_ssa_name +{ + tree var; +}; +union tree_node +{ + struct tree_base base; + struct tree_ssa_name ssa_name; +}; +long +expand_one_var (tree var, unsigned char toplevel, unsigned char really_expand) +{ + tree origvar = var; + var = var->ssa_name.var; + if (((enum tree_code) (origvar)->base.code) == SSA_NAME + && !((var->base.code != VAR_DECL))) + abort (); + if ((var->base.code) != VAR_DECL && ((origvar)->base.code) != SSA_NAME) + ; + else if (tree_contains_struct[(var->base.code)][(TS_DECL_COMMON)] != 1) + abort (); +} +/* We should thread the jump, through an intermediate block. */ +/* { dg-final { scan-tree-dump-times "Threaded" 1 "dom1"} } */ +/* { dg-final { scan-tree-dump-times "one or more intermediate" 1 "dom1"} } */ +/* { dg-final { cleanup-tree-dump "dom1" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c new file mode 100644 index 00000000000..e841429f61a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c @@ -0,0 +1,63 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-dom1-details" } */ +struct bitmap_head_def; +typedef struct bitmap_head_def *bitmap; +typedef const struct bitmap_head_def *const_bitmap; +typedef unsigned long BITMAP_WORD; +typedef struct bitmap_element_def +{ + struct bitmap_element_def *next; + unsigned int indx; +} bitmap_element; + + + + + + + + + +unsigned char +bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, + const_bitmap kill) +{ + unsigned char changed = 0; + + bitmap_element *dst_elt; + const bitmap_element *a_elt, *b_elt, *kill_elt, *dst_prev; + + while (a_elt || b_elt) + { + unsigned char new_element = 0; + + if (b_elt) + while (kill_elt && kill_elt->indx < b_elt->indx) + kill_elt = kill_elt->next; + + if (b_elt && kill_elt && kill_elt->indx == b_elt->indx + && (!a_elt || a_elt->indx >= b_elt->indx)) + { + bitmap_element tmp_elt; + unsigned ix; + + BITMAP_WORD ior = 0; + + changed = bitmap_elt_ior (dst, dst_elt, dst_prev, + a_elt, &tmp_elt, changed); + + } + + } + + + return changed; +} +/* The block starting the second conditional has 3 incoming edges, + we should thread all three, but due to a bug in the threading + code we missed the edge when the first conditional is false + (b_elt is zero, which means the second conditional is always + zero. */ +/* { dg-final { scan-tree-dump-times "Threaded" 3 "dom1"} } */ +/* { dg-final { cleanup-tree-dump "dom1" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-14.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-14.c new file mode 100644 index 00000000000..1c74596adba --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-14.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-dse1-details" } */ + +struct A { char c[4]; } a, b; + +void +f1 (void) +{ + a.c[2] = '\0'; + __builtin_memset (&a.c[1], 1, 2); +} + +void +f2 (void) +{ + __builtin_memcpy (&a.c[0], "a", 1); + __builtin_memcpy (&a, &b, 3); +} + +/* { dg-final { scan-tree-dump-times "Deleted dead store" 2 "dse1" } } */ +/* { dg-final { cleanup-tree-dump "dse1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c index b9ec6bc720f..2c859d5e850 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ /* From PR27090. */ @@ -11,5 +11,5 @@ int f(int *a) return *c + t; } -/* { dg-final { scan-tree-dump "Replaced \\\*a_\[^\n\].*with t_" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\*c_\[^\n\].*with t_" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-11.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-11.c index 50bb5d96066..7bef07caff6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-11.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ struct { @@ -22,5 +22,5 @@ foo (int y) return (x); } -/* { dg-final { scan-tree-dump "Replaced S\\\[5\\\].x with 4" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced S\\\[5\\\].x with 4" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-12.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-12.c index 50bb5d96066..7bef07caff6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-12.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ struct { @@ -22,5 +22,5 @@ foo (int y) return (x); } -/* { dg-final { scan-tree-dump "Replaced S\\\[5\\\].x with 4" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced S\\\[5\\\].x with 4" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c index 972e6c69ef9..cfb72b8bcc5 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fstrict-aliasing -fno-tree-sra -fdump-tree-fre-details" } */ +/* { dg-options "-O -fstrict-aliasing -fno-tree-sra -fdump-tree-fre1-details" } */ /* Should be optimized, propagating &a into (*p)[i]. */ @@ -23,5 +23,5 @@ void foo(double (*q)[4], struct Foo *tmp1) } } -/* { dg-final { scan-tree-dump "Replaced tmp1_.\\\(D\\\)->data with &a" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced tmp1_.\\\(D\\\)->data with &a" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c index 9d1b3f2ba92..2b677d5b598 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-details" } */ /* Should be optimized, propagating &a into (*p)[i]. */ @@ -27,5 +27,5 @@ void foo(double (*q)[4]) bar(a); } -/* { dg-final { scan-tree-dump "Replaced tmp1.data with &a" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced tmp1.data with &a" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-15.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-15.c index d24cd1e4c38..f24d0f6ab64 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-15.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-15.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-details" } */ /* Should be optimized, propagating &a into (*p)[i]. */ @@ -26,5 +26,5 @@ void foo(double (*q)[4]) bar(a); } -/* { dg-final { scan-tree-dump "Replaced" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-16.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-16.c index 56d85e58e7f..fa5f3719a25 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-16.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-16.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ /* FRE should be able to combine i and j and perform simplification on the condition. */ @@ -14,5 +14,5 @@ int foo(int b, int c) link_error (); } -/* { dg-final { scan-tree-dump-not "link_error" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-not "link_error" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-17.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-17.c index aced64977ea..01f57ed7e5c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-17.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-17.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details -fno-tree-sra" } */ +/* { dg-options "-O -fdump-tree-fre1-details -fno-tree-sra" } */ struct Bar { int dom; @@ -18,6 +18,6 @@ int foo(int i, int j, int k) return f.doms[0LL].dom; } -/* { dg-final { scan-tree-dump "Replaced f.doms\\\[0\\\].dom with i_" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced f.doms\\\[0\\\].dom with i_" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-18.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-18.c index 392b1f6cf7d..986fe0781ae 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-18.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-18.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ struct a { @@ -24,5 +24,5 @@ int f(struct a *c) /* We should have CSEd the load from c->a. */ -/* { dg-final { scan-tree-dump-times "c_.*\\\.a" 1 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "c_.*\\\.a" 1 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-19.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-19.c index 688fe86403e..c121832de63 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-19.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-19.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ struct a { @@ -27,5 +27,5 @@ int f(struct a *c) /* We should have CSEd the load from c->a. */ -/* { dg-final { scan-tree-dump-times "c_.*\\\.a" 1 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "c_.*\\\.a" 1 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-2.c index d1eabf69bae..f85c06139f2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-forwprop -fdump-tree-fre1-details" } */ /* From PR14287. */ @@ -14,5 +14,5 @@ foo (long a) h = c; } -/* { dg-final { scan-tree-dump "Replaced \\\(short int\\\) c_.*with b_" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\(short int\\\) c_.*with b_" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-21.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-21.c index aadf32e21bd..219c0a926a6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-21.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-21.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ struct f { float a; @@ -22,5 +22,5 @@ void g(void) h(a1, b, c, d); } -/* { dg-final { scan-tree-dump-not "a\\\.? = " "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-not "a\\\.? = " "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-22.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-22.c index ce311b68b9e..3504d1041e9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-22.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-22.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ int i; int foo (void) @@ -11,5 +11,5 @@ int foo (void) /* We should eliminate the redundant load of i. */ -/* { dg-final { scan-tree-dump-not "= i;" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-not "= i;" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-23.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-23.c index 491836d28ef..f21360824cd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-23.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-23.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ int f(int t, int a, int b) { @@ -17,5 +17,5 @@ int f(int t, int a, int b) return c+d; } -/* { dg-final { scan-tree-dump-times "PHI" 1 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "PHI" 1 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-24.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-24.c index 705993a4fb3..c683218799d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-24.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-24.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1" } */ int foo(void) { @@ -30,5 +30,5 @@ int bazzoo (void) return b.i; } -/* { dg-final { scan-tree-dump-times "= 0;" 5 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "= 0;" 5 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-25.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-25.c index f7f99bf74f5..e7723f9bc35 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-25.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-25.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1" } */ struct X { int i; int j; }; void bar (struct X *); @@ -14,5 +14,5 @@ int foo (struct X *p) /* We should optimize this to return 0. */ -/* { dg-final { scan-tree-dump "= 0;" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "= 0;" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-26.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-26.c index 2b8e8e063d4..81d9ea0fa8e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-26.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-26.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-details" } */ union U { float f; @@ -15,5 +15,5 @@ int foo (union U *p) } /* avr has 16 bit int and 32 bit float */ -/* { dg-final { scan-tree-dump "Replaced u.i with 0 in" "fre" {xfail avr-*-* } } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced u.i with 0 in" "fre1" {xfail avr-*-* } } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c index 39368707ce9..ba0710171f2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ int *q; void __attribute__((noinline)) @@ -21,5 +21,5 @@ int foo(int which_p) return x; } -/* { dg-final { scan-tree-dump "Replaced x with 0" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced x with 0" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-3.c index 85e444886d0..6813b432302 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-3.c @@ -6,7 +6,7 @@ When the condition is true, we distribute "(int) (a + b)" as "(int) a + (int) b", otherwise we keep the original. */ /* { dg-do compile { target { { ! mips64 } && { ! spu-*-* } } } } */ -/* { dg-options "-O -fwrapv -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-forwprop -fwrapv -fdump-tree-fre1-details" } */ /* From PR14844. */ @@ -18,5 +18,5 @@ foo (int a, int b) return aa + bb; } -/* { dg-final { scan-tree-dump "Replaced \\\(int\\\) aa_.*with a_" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\(int\\\) aa_.*with a_" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c index ca8d4c96bb7..96738305bbc 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c @@ -1,7 +1,7 @@ /* If the target returns false for TARGET_PROMOTE_PROTOTYPES, then there will be no casts for FRE to eliminate and the test will fail. */ /* { dg-do compile { target i?86-*-* x86_64-*-* hppa*-*-* mips*-*-* m68k*-*-* } } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-forwprop -fdump-tree-fre1-details" } */ /* From PR21608. */ @@ -11,5 +11,5 @@ char bar(char f) return wrap(f); } -/* { dg-final { scan-tree-dump "Replaced \\\(char\\\) .*with " "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\(char\\\) .*with " "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-5.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-5.c index 7ef20c2214d..e6010ca0318 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-5.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-forwprop -fdump-tree-fre1-details" } */ /* From PR19792. */ @@ -10,5 +10,5 @@ bar (unsigned int t) return a == t; } -/* { dg-final { scan-tree-dump "Replaced \\\(unsigned int\\\) a_.*with t_" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\(unsigned int\\\) a_.*with t_" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-6.c index 6963c1ce483..65883cd14bd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-6.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ int i; int foo(void) { i = 2; int j = i * 2; int k = i + 2; return j == k; } -/* { dg-final { scan-tree-dump-times "Replaced " 5 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Replaced " 5 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-7.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-7.c index 895c05fdf91..a758efe5dda 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-7.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre-details -fdump-tree-optimized" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-details -fdump-tree-optimized" } */ #if (__SIZEOF_INT__ == __SIZEOF_FLOAT__) typedef int intflt; #elif (__SIZEOF_LONG__ == __SIZEOF_FLOAT__) @@ -29,10 +29,10 @@ intflt foo(intflt j) return a.u.k; } -/* { dg-final { scan-tree-dump-times "Inserted pretmp" 1 "fre" } } */ -/* { dg-final { scan-tree-dump-times "Replaced a.u.f with pretmp" 3 "fre" } } */ -/* { dg-final { scan-tree-dump-times "Replaced a.u.k with j" 1 "fre" } } */ -/* { dg-final { scan-tree-dump "= VIEW_CONVERT_EXPR<float>\\\(j_" "fre" } } */ +/* { dg-final { scan-tree-dump-times "Inserted pretmp" 1 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Replaced a.u.f with pretmp" 3 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Replaced a.u.k with j" 1 "fre1" } } */ +/* { dg-final { scan-tree-dump "= VIEW_CONVERT_EXPR<float>\\\(j_" "fre1" } } */ /* { dg-final { scan-tree-dump "return j" "optimized" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-8.c index bc9f8e3992e..d6ab2ef247f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-8.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre-details" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-details" } */ #if (__SIZEOF_INT__ == __SIZEOF_FLOAT__) typedef int intflt; #elif (__SIZEOF_LONG__ == __SIZEOF_FLOAT__) @@ -28,6 +28,6 @@ intflt foo(int i, int b) } } -/* { dg-final { scan-tree-dump-times "Replaced u.f with pretmp" 2 "fre" } } */ -/* { dg-final { scan-tree-dump-times "Inserted pretmp" 2 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Replaced u.f with pretmp" 2 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Inserted pretmp" 2 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-9.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-9.c index c8a434a2bba..57c6d4b5be7 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-9.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sra -fdump-tree-fre-stats" } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-stats" } */ union loc { unsigned reg; @@ -23,6 +23,6 @@ void __frame_state_for1 (volatile char *state_in) } } -/* { dg-final { scan-tree-dump-times "Eliminated: 1" 2 "fre" } } */ -/* { dg-final { scan-tree-dump-times "Insertions: 1" 2 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 2 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Insertions: 1" 2 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-10.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-10.c index 41af344989a..8cb1bebde43 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-10.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-10.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre-stats" } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre-stats -fno-finite-math-only" { target sh*-*-* } } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre1-stats" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre1-stats -fno-finite-math-only" { target sh*-*-* } } */ double cos (double); void link_error(); void f(double a) @@ -11,5 +11,5 @@ void f(double a) link_error(); } -/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c index b986bdd92a9..7342c3361a8 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-fre-details" } */ +/* { dg-options "-O -fdump-tree-fre1-details" } */ typedef union { @@ -23,5 +23,5 @@ void foo(SA* pResult, SB* method, SC* self) pResult->data = pResult->data; } -/* { dg-final { scan-tree-dump "Deleted redundant store" "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Deleted redundant store" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c index f87476a3a9f..bc7ca4e68e4 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre1-stats" } */ int foo (int *array) { @@ -8,5 +8,5 @@ foo (int *array) return 0; } /* We should eliminate one load. */ -/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-8.c index ae933bbccec..f08ef7fde60 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-8.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre1-stats" } */ struct s { int *n; }; @@ -19,5 +19,5 @@ foo (__SIZE_TYPE__ i, struct s *array) /* We should eliminate two address calculations, and one load. */ /* We used to eliminate a cast but that was before POINTER_PLUS_EXPR was added. */ -/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-9.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-9.c index 30d968b7c53..4f88624ae19 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-9.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-fre1-stats" } */ int foo (unsigned long a) { @@ -9,5 +9,5 @@ foo (unsigned long a) return 1; return 0; } -/* { dg-final { scan-tree-dump-times "return 0;" 0 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "return 0;" 0 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-1.c index 65cd83d7cde..0cb027222fb 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fdump-tree-fre1-stats" } */ void vnum_test8(int *data) { @@ -17,5 +17,5 @@ void vnum_test8(int *data) } } /* We should eliminate m - n, and set n = n + k into n = m. */ -/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-2.c index cc3661cc6d7..b4c3c14a265 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fdump-tree-fre1-stats" } */ int vnum_test8(int *data) { @@ -21,5 +21,5 @@ int vnum_test8(int *data) } /* We should eliminate m - n, and set n = n + k into n = m, and set p to 0 */ -/* { dg-final { scan-tree-dump-times "Eliminated: 4" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 4" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-3.c index b80a8dc3bba..fb266bb5417 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fdump-tree-fre1-stats" } */ int main(int argc, char **argv) { int *p; @@ -11,5 +11,5 @@ int main(int argc, char **argv) return result; } /* We should eliminate result = *p by saying it has the value 2. */ -/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c index 7caf4eec6f8..7f0a9329737 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-stats" } */ +/* { dg-options "-O2 -fdump-tree-fre1-stats" } */ int vnum_test8(int *data) { @@ -23,5 +23,5 @@ int vnum_test8(int *data) } /* We should eliminate m - n, n + k, set data[5] = 0, eliminate the address arithmetic for data[5], and set p = 0. -/* { dg-final { scan-tree-dump-times "Eliminated: 5" 1 "fre"} } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 5" 1 "fre1"} } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-6.c new file mode 100644 index 00000000000..70e48121ee6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-6.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-sink" } */ + +int foo(int *a, int r) +{ + int ret = 0; + *a = 1; + if (r == 3) + *a = 5; + else + ret = r + 20; + return ret; +} + +/* *a = 1 should be sunk to the else block. */ + +/* { dg-final { scan-tree-dump-times "Sinking" 1 "sink" } } */ +/* { dg-final { cleanup-tree-dump "sink" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-7.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-7.c new file mode 100644 index 00000000000..ffee03368c5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-7.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-sink" } */ + +int foo(int *a, int r, short *b) +{ + int ret = 0; + *a = 1; + if (r == 3) + *a = 5; + else + ret = r + 20; + *b = 9; + return ret; +} + +/* *a = 1 should be sunk to the else block. */ + +/* { dg-final { scan-tree-dump-times "Sinking" 1 "sink" } } */ +/* { dg-final { cleanup-tree-dump "sink" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-8.c new file mode 100644 index 00000000000..4a575a7a485 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-8.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-sink" } */ + +int foo(int *a, int r, short *b) +{ + int ret = 0; + *a = 1; + switch (r) + { + case 3: + *a = 5; + break; + case 4: + case 5: + *a = 9; + ret = r + 25; + break; + default: + ret = r + 20; + } + *b = 9; + return ret; +} + +/* *a = 1 should be sunk into the default case. */ + +/* { dg-final { scan-tree-dump-times "Sinking" 1 "sink" } } */ +/* { dg-final { cleanup-tree-dump "sink" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-9.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-9.c new file mode 100644 index 00000000000..1a6e2b8d974 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-9.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-sink" } */ + +int foo(int *a, int r, int *b) +{ + int ret = 0; + *a = 1; + if (r == 3) + { + *a = 5; + *b = 3; + } + return ret; +} + +/* *a = 1 should be sunk to the else block. */ + +/* { dg-final { scan-tree-dump-times "Sinking" 1 "sink" } } */ +/* { dg-final { cleanup-tree-dump "sink" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c index 87b44b530ec..495b7ba114e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre-details" } */ +/* { dg-options "-O2 -fdump-tree-fre1-details" } */ struct S { float f; }; int __attribute__((noinline)) @@ -11,5 +11,5 @@ foo (float *r, struct S *p) return i + *q; } -/* { dg-final { scan-tree-dump "Replaced\[^\n\]*with i_." "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced\[^\n\]*with i_." "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c index 5acf083c71e..c348bdfe25b 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fre" } */ +/* { dg-options "-O2 -fdump-tree-fre1" } */ struct S { unsigned f; }; @@ -14,6 +14,6 @@ foo ( struct S *p) /* There should only be one load of p->f because fwprop can change *(int *)&p->f into just (int)p->f. */ -/* { dg-final { scan-tree-dump-times "= \[^\n\]*p_.\\\(D\\\)" 1 "fre" } } */ -/* { dg-final { cleanup-tree-dump "fre" } } */ +/* { dg-final { scan-tree-dump-times "= \[^\n\]*p_.\\\(D\\\)" 1 "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp55.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp55.c new file mode 100644 index 00000000000..7adfe62052d --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp55.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-vrp1-blocks-vops-details" } */ + +fu (char *p, int x) +{ + if (x) + *p = 69; + if (p) + arf (); +} + +/* { dg-final { scan-tree-dump-times "Threaded jump" 1 "vrp1" } } */ +/* { dg-final { cleanup-tree-dump "vrp1" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp56.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp56.c new file mode 100644 index 00000000000..912d28e0f64 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp56.c @@ -0,0 +1,42 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-vrp1-details" } */ +typedef struct basic_block_def *basic_block; +struct basic_block_def; +struct edge_def; +typedef struct edge_def *edge; +typedef struct VEC_edge_base +{ + unsigned num; +} VEC_edge_base; +typedef struct VEC_edge_none +{ + VEC_edge_base base; +} VEC_edge_none; +static __inline__ unsigned +VEC_edge_base_length (VEC_edge_base * vec_) +{ + return vec_ ? vec_->num : 0; +} + +typedef struct VEC_edge_gc +{ + VEC_edge_base base; +} VEC_edge_gc; +struct basic_block_def +{ + VEC_edge_gc *succs; +}; + +unsigned char +cleanup_empty_eh (basic_block bb) +{ + edge e_out; + switch (VEC_edge_base_length (&bb->succs->base)) + { + case 1: + foo (); + } +} +/* { dg-final { scan-tree-dump-times "Threaded" 1 "vrp1"} } */ +/* { dg-final { cleanup-tree-dump "vrp1" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp57.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp57.c new file mode 100644 index 00000000000..c736adc9e3e --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp57.c @@ -0,0 +1,17 @@ +/* PR40052 */ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-vrp -fdump-tree-optimized" } */ + +int foo(_Bool b) +{ + return b | 1; +} + +int bar(_Bool b) +{ + return b & -2; +} + +/* { dg-final { scan-tree-dump "return 0;" "optimized" } } */ +/* { dg-final { scan-tree-dump "return 1;" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/uninit-pred-7_d.c b/gcc/testsuite/gcc.dg/uninit-pred-7_d.c new file mode 100644 index 00000000000..06111731a63 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pred-7_d.c @@ -0,0 +1,54 @@ + +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-Wuninitialized -O2 -mbranch-cost=0" } */ + +int g; +void bar(); +void blah(int); + +int foo (int n, int l, int m, int r) +{ + int v; + + if (n || l) + v = r; + + if (m) g++; + else bar(); + + if ( n && l) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + if ( n ) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + if ( l ) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + return 0; +} + +int foo_2 (int n, int l, int m, int r) +{ + int v; + + if (n || l) + v = r; + + if (m) g++; + else bar(); + + if ( n && l) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + if ( n ) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + if (m || l) + blah (v); /* { dg-warning "uninitialized" "warning" } */ + + if ( l ) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/uninit-pred-8_d.c b/gcc/testsuite/gcc.dg/uninit-pred-8_d.c new file mode 100644 index 00000000000..ccdea2967ad --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pred-8_d.c @@ -0,0 +1,45 @@ + +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-Wuninitialized -O2 -mbranch-cost=0" } */ + +int g; +void bar(); +void blah(int); + +int foo (int n, int l, int m, int r) +{ + int v; + + if (n || m || r || l) + v = r; + + if (m) g++; + else bar(); + + if ( n || m || r || l) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + if ( n ) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + if ( l ) + blah(v); /* { dg-bogus "uninitialized" "bogus warning" } */ + + return 0; +} + +int foo_2 (int n, int l, int m, int r) +{ + int v; + + if (n || m || r ) + v = r; + + if (m) g++; + else bar(); + + if ( n || m || r || l) + blah(v); /* { dg-warning "uninitialized" "warning" } */ + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/uninit-suppress.c b/gcc/testsuite/gcc.dg/uninit-suppress.c new file mode 100644 index 00000000000..64038a3a239 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-suppress.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-fno-tree-ccp -O2 -Wuninitialized -Wno-maybe-uninitialized" } */ +void blah(); +int gflag; + +void foo() +{ + int v; + if (gflag) + v = 10; + + blah(); /* *gflag may be killed, but compiler won't know */ + + if (gflag) + bar(v); /* { dg-bogus "uninitialized" "should be suppressed" } */ +} diff --git a/gcc/testsuite/gcc.dg/uninit-suppress_2.c b/gcc/testsuite/gcc.dg/uninit-suppress_2.c new file mode 100644 index 00000000000..a48b182f8cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-suppress_2.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-fno-tree-ccp -O2 -Wuninitialized -Werror=uninitialized -Wno-error=maybe-uninitialized" } */ +void blah(); +int gflag; + +void foo() +{ + int v; + if (gflag) + v = 10; + + blah(); /* *gflag may be killed, but compiler won't know */ + + if (gflag) + bar(v); /* { dg-warning "uninitialized" "should not be promoted to error" } */ +} diff --git a/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c b/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c index 7d6af7b82f3..400ff29164e 100644 --- a/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c +++ b/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c @@ -26,7 +26,7 @@ foo () } } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided_wide } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided_wide } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided4 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c index 4d75d565b98..d9adf6f333c 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c @@ -113,7 +113,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {target { vect_strided && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" {target { vect_strided && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {target { vect_strided8 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" {target { vect_strided8 && vect_int_mult } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-ifcvt-1.c b/gcc/testsuite/gcc.dg/vect/fast-math-ifcvt-1.c new file mode 100644 index 00000000000..ba22d8d7889 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/fast-math-ifcvt-1.c @@ -0,0 +1,18 @@ +/* PR 47892 */ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_float } */ +/* { dg-require-effective-target vect_condition } */ + +void +bestseries9 (float * __restrict__ arr, int len) +{ + int i; + for (i = 0; i < len; ++i) + { + float or = arr[i]; + arr[i] = (or > 0.0f) * (2 - or * or); + } +} + +/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c b/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c index 6a01782bb3d..d8394060bad 100644 --- a/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c +++ b/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c @@ -20,7 +20,7 @@ float method2_int16 (struct mem *mem) return avg; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd_wide } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd_wide } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-slp-27.c b/gcc/testsuite/gcc.dg/vect/fast-math-slp-27.c index 81240023777..4c2c5c510f4 100644 --- a/gcc/testsuite/gcc.dg/vect/fast-math-slp-27.c +++ b/gcc/testsuite/gcc.dg/vect/fast-math-slp-27.c @@ -13,5 +13,5 @@ void foo(void) } } -/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target vect_strided } } } */ +/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-vect-complex-3.c b/gcc/testsuite/gcc.dg/vect/fast-math-vect-complex-3.c index 3fcf77e0c34..db55b30098d 100644 --- a/gcc/testsuite/gcc.dg/vect/fast-math-vect-complex-3.c +++ b/gcc/testsuite/gcc.dg/vect/fast-math-vect-complex-3.c @@ -56,5 +56,5 @@ main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd_wide } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c b/gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c new file mode 100644 index 00000000000..38906a94af2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c @@ -0,0 +1,69 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 50 + +typedef struct { + short a; + short b; +} data; + +data in1[N], in2[N], out[N]; +short result[N*2] = {10,-7,11,-6,12,-5,13,-4,14,-3,15,-2,16,-1,17,0,18,1,19,2,20,3,21,4,22,5,23,6,24,7,25,8,26,9,27,10,28,11,29,12,30,13,31,14,32,15,33,16,34,17,35,18,36,19,37,20,38,21,39,22,40,23,41,24,42,25,43,26,44,27,45,28,46,29,47,30,48,31,49,32,50,33,51,34,52,35,53,36,54,37,55,38,56,39,57,40,58,41,59,42}; +short out1[N], out2[N]; + +__attribute__ ((noinline)) void +foo () +{ + int i; + short c, d; + + for (i = 0; i < N; i++) + { + c = in1[i].b; + d = in2[i].b; + + if (c >= d) + { + out[i].b = in1[i].a; + out[i].a = d + 5; + } + else + { + out[i].b = d - 12; + out[i].a = in2[i].a + d; + } + } +} + +int +main (void) +{ + int i; + + check_vect (); + + for (i = 0; i < N; i++) + { + in1[i].a = i; + in1[i].b = i + 2; + in2[i].a = 5; + in2[i].b = i + 5; + __asm__ volatile (""); + } + + foo (); + + for (i = 0; i < N; i++) + { + if (out[i].a != result[2*i] || out[i].b != result[2*i+1]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || { ! vect_strided2 } } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c index 9a71b498da7..95906baedd6 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c @@ -54,5 +54,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c index b28111c22c8..544b89ae8c6 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c @@ -53,5 +53,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c index 7a6788a0da2..60cb00de485 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c @@ -47,5 +47,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_interleave } } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave || vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c index 18e50874a5c..22b4aa96f60 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c @@ -50,5 +50,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c b/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c index 954474eb925..0bbb8e943ce 100644 --- a/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c +++ b/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c @@ -8,7 +8,7 @@ __attribute__ ((noinline)) void with_restrict(int * __restrict p) { int i; - int *q = p - 2; + int *q = p - 1; for (i = 0; i < 1000; ++i) { p[i] = q[i]; @@ -19,7 +19,7 @@ __attribute__ ((noinline)) void without_restrict(int * p) { int i; - int *q = p - 2; + int *q = p - 1; for (i = 0; i < 1000; ++i) { p[i] = q[i]; @@ -38,8 +38,8 @@ int main(void) a[i] = b[i] = i; } - with_restrict(a + 2); - without_restrict(b + 2); + with_restrict(a + 1); + without_restrict(b + 1); for (i = 0; i < 1002; ++i) { if (a[i] != b[i]) @@ -48,6 +48,6 @@ int main(void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 2 "vect" { xfail vect_no_align } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 2 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr30843.c b/gcc/testsuite/gcc.dg/vect/pr30843.c index 616b618f4d8..2e0855f6cb8 100644 --- a/gcc/testsuite/gcc.dg/vect/pr30843.c +++ b/gcc/testsuite/gcc.dg/vect/pr30843.c @@ -20,6 +20,6 @@ void dacP98FillRGBMap (unsigned char *pBuffer) } } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided4 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr33866.c b/gcc/testsuite/gcc.dg/vect/pr33866.c index 9beaeff5b4b..8adb2e7edc1 100644 --- a/gcc/testsuite/gcc.dg/vect/pr33866.c +++ b/gcc/testsuite/gcc.dg/vect/pr33866.c @@ -27,6 +27,6 @@ void test_select_fill_hyper_simple (long *offset) } /* Needs interleaving support. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr37539.c b/gcc/testsuite/gcc.dg/vect/pr37539.c index 1e73425de9e..560c484636c 100644 --- a/gcc/testsuite/gcc.dg/vect/pr37539.c +++ b/gcc/testsuite/gcc.dg/vect/pr37539.c @@ -40,7 +40,7 @@ int main () return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_strided_wide } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_strided4 && vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr48377.c b/gcc/testsuite/gcc.dg/vect/pr48377.c new file mode 100644 index 00000000000..b9aaf49ee73 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr48377.c @@ -0,0 +1,24 @@ +/* PR tree-optimization/48377 */ + +typedef unsigned int U __attribute__((__aligned__ (1), __may_alias__)); + +__attribute__((noinline, noclone)) unsigned int +foo (const char *s, int len) +{ + const U *p = (const U *) s; + unsigned int f = len / sizeof (unsigned int), hash = len, i; + + for (i = 0; i < f; ++i) + hash += *p++; + return hash; +} + +char buf[64] __attribute__((aligned (32))); + +int +main (void) +{ + return foo (buf + 1, 26) != 26; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr48765.c b/gcc/testsuite/gcc.dg/vect/pr48765.c new file mode 100644 index 00000000000..469c4f423ce --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr48765.c @@ -0,0 +1,82 @@ +/* { dg-do compile { target powerpc*-*-* } } */ +/* { dg-options "-m64 -O3 -mcpu=power6" } */ + +enum reg_class +{ + NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS, XGRF_REGS, ALL_REGS, + LIM_REG_CLASSES +}; +enum machine_mode +{ + VOIDmode, QImode, HImode, PSImode, SImode, PDImode, DImode, TImode, OImode, + QFmode, HFmode, TQFmode, SFmode, DFmode, XFmode, TFmode, SCmode, DCmode, + XCmode, TCmode, CQImode, CHImode, CSImode, CDImode, CTImode, COImode, + BLKmode, CCmode, CCEVENmode, MAX_MACHINE_MODE +}; +typedef struct rtx_def +{ + int mode:8; +} + *rtx; +extern rtx *regno_reg_rtx; +typedef unsigned int HARD_REG_ELT_TYPE; +typedef HARD_REG_ELT_TYPE HARD_REG_SET[((64 + 32 - 1) / 32)]; +extern int reg_alloc_order[64]; +extern int max_regno; +extern int *reg_n_calls_crossed; +extern short *reg_renumber; +static int *reg_where_dead; +static int *reg_where_born; +static int *reg_order; +static char *regs_change_size; +static HARD_REG_SET *after_insn_hard_regs; +static int stupid_find_reg (int, enum reg_class, enum machine_mode, int, int, + int); +void +stupid_life_analysis (f, nregs, file) + rtx f; +{ + register int i; + for (i = (((64)) + 3) + 1; i < max_regno; i++) + { + register int r = reg_order[i]; + if ((int) LIM_REG_CLASSES > 1) + reg_renumber[r] = + stupid_find_reg (reg_n_calls_crossed[r], reg_preferred_class (r), + ((regno_reg_rtx[r])->mode), reg_where_born[r], + reg_where_dead[r], regs_change_size[r]); + } +} + +static int +stupid_find_reg (call_preserved, class, mode, born_insn, dead_insn, + changes_size) + int call_preserved; + enum reg_class class; + enum machine_mode mode; +{ + register int i, ins; + HARD_REG_SET used, this_reg; + for (ins = born_insn; ins < dead_insn; ins++) + do + { + register HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = + (after_insn_hard_regs[ins]); + for (i = 0; i < ((64 + 32 - 1) / 32); i++) + *scan_tp_++ |= *scan_fp_++; + } + while (0); + for (i = 0; i < 64; i++) + { + int regno = reg_alloc_order[i]; + if (((used)[(regno) / ((unsigned) 32)] & + (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) 32))))) + { + register int j; + if (j == regno) + return regno; + } + } +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-11.c b/gcc/testsuite/gcc.dg/vect/slp-11a.c index 9f44e517e93..520bb74df2b 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-11.c +++ b/gcc/testsuite/gcc.dg/vect/slp-11a.c @@ -3,7 +3,7 @@ #include <stdarg.h> #include "tree-vect.h" -#define N 8 +#define N 8 int main1 () @@ -11,7 +11,6 @@ main1 () int i; unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7; unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; - float out2[N*8]; /* Different operations - not SLPable. */ for (i = 0; i < N; i++) @@ -35,7 +34,7 @@ main1 () b7 = a7 * 2; out[i*8] = b0 - 2; - out[i*8 + 1] = b1 - 3; + out[i*8 + 1] = b1 - 3; out[i*8 + 2] = b2 - 2; out[i*8 + 3] = b3 - 1; out[i*8 + 4] = b4 - 8; @@ -58,41 +57,6 @@ main1 () abort (); } - /* Requires permutation - not SLPable. */ - for (i = 0; i < N*2; i++) - { - out[i*4] = (in[i*4] + 2) * 3; - out[i*4 + 1] = (in[i*4 + 2] + 2) * 7; - out[i*4 + 2] = (in[i*4 + 1] + 7) * 3; - out[i*4 + 3] = (in[i*4 + 3] + 3) * 4; - } - - /* check results: */ - for (i = 0; i < N*2; i++) - { - if (out[i*4] != (in[i*4] + 2) * 3 - || out[i*4 + 1] != (in[i*4 + 2] + 2) * 7 - || out[i*4 + 2] != (in[i*4 + 1] + 7) * 3 - || out[i*4 + 3] != (in[i*4 + 3] + 3) * 4) - abort (); - } - - /* Different operations - not SLPable. */ - for (i = 0; i < N*4; i++) - { - out2[i*2] = ((float) in[i*2] * 2 + 6) ; - out2[i*2 + 1] = (float) (in[i*2 + 1] * 3 + 7); - } - - /* check results: */ - for (i = 0; i < N*4; i++) - { - if (out2[i*2] != ((float) in[i*2] * 2 + 6) - || out2[i*2 + 1] != (float) (in[i*2 + 1] * 3 + 7)) - abort (); - } - - return 0; } @@ -105,9 +69,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target { { vect_uintfloat_cvt && vect_strided_wide } && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { { { ! vect_uintfloat_cvt } && vect_strided_wide } && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target { ! { vect_int_mult && vect_strided_wide } } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided8 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided8 && vect_int_mult } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ - diff --git a/gcc/testsuite/gcc.dg/vect/slp-11b.c b/gcc/testsuite/gcc.dg/vect/slp-11b.c new file mode 100644 index 00000000000..6942c578b6f --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/slp-11b.c @@ -0,0 +1,49 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 8 + +int +main1 () +{ + int i; + unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7; + unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; + + /* Requires permutation - not SLPable. */ + for (i = 0; i < N*2; i++) + { + out[i*4] = (in[i*4] + 2) * 3; + out[i*4 + 1] = (in[i*4 + 2] + 2) * 7; + out[i*4 + 2] = (in[i*4 + 1] + 7) * 3; + out[i*4 + 3] = (in[i*4 + 3] + 3) * 4; + } + + /* check results: */ + for (i = 0; i < N*2; i++) + { + if (out[i*4] != (in[i*4] + 2) * 3 + || out[i*4 + 1] != (in[i*4 + 2] + 2) * 7 + || out[i*4 + 2] != (in[i*4 + 1] + 7) * 3 + || out[i*4 + 3] != (in[i*4 + 3] + 3) * 4) + abort (); + } + + return 0; +} + +int main (void) +{ + check_vect (); + + main1 (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided4 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided4 && vect_int_mult } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-11c.c b/gcc/testsuite/gcc.dg/vect/slp-11c.c new file mode 100644 index 00000000000..42b358aa697 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/slp-11c.c @@ -0,0 +1,46 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 8 + +int +main1 () +{ + int i; + unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; + float out[N*8]; + + /* Different operations - not SLPable. */ + for (i = 0; i < N*4; i++) + { + out[i*2] = ((float) in[i*2] * 2 + 6) ; + out[i*2 + 1] = (float) (in[i*2 + 1] * 3 + 7); + } + + /* check results: */ + for (i = 0; i < N*4; i++) + { + if (out[i*2] != ((float) in[i*2] * 2 + 6) + || out[i*2 + 1] != (float) (in[i*2 + 1] * 3 + 7)) + abort (); + } + + + return 0; +} + +int main (void) +{ + check_vect (); + + main1 (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { vect_uintfloat_cvt && vect_strided2 } && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { { vect_uintfloat_cvt && vect_strided2 } && vect_int_mult } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-12a.c b/gcc/testsuite/gcc.dg/vect/slp-12a.c index 6bbeb879faf..5c1c5a7a50c 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-12a.c +++ b/gcc/testsuite/gcc.dg/vect/slp-12a.c @@ -11,7 +11,7 @@ main1 () int i; unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7; unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; - unsigned int ia[N], ib[N*2]; + unsigned int ia[N]; for (i = 0; i < N; i++) { @@ -61,27 +61,6 @@ main1 () abort (); } - for (i = 0; i < N*2; i++) - { - out[i*4] = (in[i*4] + 2) * 3; - out[i*4 + 1] = (in[i*4 + 1] + 2) * 7; - out[i*4 + 2] = (in[i*4 + 2] + 7) * 3; - out[i*4 + 3] = (in[i*4 + 3] + 7) * 7; - - ib[i] = 7; - } - - /* check results: */ - for (i = 0; i < N*2; i++) - { - if (out[i*4] != (in[i*4] + 2) * 3 - || out[i*4 + 1] != (in[i*4 + 1] + 2) * 7 - || out[i*4 + 2] != (in[i*4 + 2] + 7) * 3 - || out[i*4 + 3] != (in[i*4 + 3] + 7) * 7 - || ib[i] != 7) - abort (); - } - return 0; } @@ -94,11 +73,8 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" {target { vect_strided_wide && vect_int_mult} } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {target { {! {vect_strided_wide}} && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target { ! vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" {target { vect_strided_wide && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" {target { {! {vect_strided_wide}} && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target { ! vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided8 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided8 && vect_int_mult } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_strided8 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided8 && vect_int_mult } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ - diff --git a/gcc/testsuite/gcc.dg/vect/slp-12b.c b/gcc/testsuite/gcc.dg/vect/slp-12b.c index 863652a5b8a..69e9f315ff4 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-12b.c +++ b/gcc/testsuite/gcc.dg/vect/slp-12b.c @@ -43,9 +43,9 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {target { vect_strided_wide && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target { { ! { vect_int_mult }} || { ! {vect_strided_wide}}} } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" {target { vect_strided_wide && vect_int_mult } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target { { ! { vect_int_mult }} || { ! {vect_strided_wide}}} } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided2 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided2 && vect_int_mult } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_strided2 && vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided2 && vect_int_mult } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-12c.c b/gcc/testsuite/gcc.dg/vect/slp-12c.c new file mode 100644 index 00000000000..5152d21145b --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/slp-12c.c @@ -0,0 +1,53 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 8 + +int +main1 () +{ + int i; + unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7; + unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; + unsigned int ia[N*2]; + + for (i = 0; i < N*2; i++) + { + out[i*4] = (in[i*4] + 2) * 3; + out[i*4 + 1] = (in[i*4 + 1] + 2) * 7; + out[i*4 + 2] = (in[i*4 + 2] + 7) * 3; + out[i*4 + 3] = (in[i*4 + 3] + 7) * 7; + + ia[i] = 7; + } + + /* check results: */ + for (i = 0; i < N*2; i++) + { + if (out[i*4] != (in[i*4] + 2) * 3 + || out[i*4 + 1] != (in[i*4 + 1] + 2) * 7 + || out[i*4 + 2] != (in[i*4 + 2] + 7) * 3 + || out[i*4 + 3] != (in[i*4 + 3] + 7) * 7 + || ia[i] != 7) + abort (); + } + + return 0; +} + +int main (void) +{ + check_vect (); + + main1 (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_int_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_int_mult } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_int_mult } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-18.c b/gcc/testsuite/gcc.dg/vect/slp-18.c index 8cdb0ddb9ee..6cc6fbae346 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-18.c +++ b/gcc/testsuite/gcc.dg/vect/slp-18.c @@ -91,7 +91,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target { vect_strided } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-19a.c b/gcc/testsuite/gcc.dg/vect/slp-19a.c new file mode 100644 index 00000000000..02a4cd008b6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/slp-19a.c @@ -0,0 +1,61 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 16 + +int +main1 () +{ + unsigned int i; + unsigned int out[N*8]; + unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; + unsigned int ia[N*2]; + + for (i = 0; i < N; i++) + { + out[i*8] = in[i*8]; + out[i*8 + 1] = in[i*8 + 1]; + out[i*8 + 2] = in[i*8 + 2]; + out[i*8 + 3] = in[i*8 + 3]; + out[i*8 + 4] = in[i*8 + 4]; + out[i*8 + 5] = in[i*8 + 5]; + out[i*8 + 6] = in[i*8 + 6]; + out[i*8 + 7] = in[i*8 + 7]; + + ia[i] = in[i*8 + 2]; + } + + /* check results: */ + for (i = 0; i < N; i++) + { + if (out[i*8] != in[i*8] + || out[i*8 + 1] != in[i*8 + 1] + || out[i*8 + 2] != in[i*8 + 2] + || out[i*8 + 3] != in[i*8 + 3] + || out[i*8 + 4] != in[i*8 + 4] + || out[i*8 + 5] != in[i*8 + 5] + || out[i*8 + 6] != in[i*8 + 6] + || out[i*8 + 7] != in[i*8 + 7] + || ia[i] != in[i*8 + 2]) + abort (); + } + + return 0; +} + +int main (void) +{ + check_vect (); + + main1 (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_strided8 } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided8 } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_strided8} } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-19b.c b/gcc/testsuite/gcc.dg/vect/slp-19b.c new file mode 100644 index 00000000000..1f29a0d2e4d --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/slp-19b.c @@ -0,0 +1,58 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 16 + +int +main1 () +{ + unsigned int i; + unsigned int out[N*8]; + unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; + unsigned int ia[N*2], a0, a1, a2, a3; + + for (i = 0; i < N*2; i++) + { + a0 = in[i*4] + 1; + a1 = in[i*4 + 1] + 2; + a2 = in[i*4 + 2] + 3; + a3 = in[i*4 + 3] + 4; + + out[i*4] = a0; + out[i*4 + 1] = a1; + out[i*4 + 2] = a2; + out[i*4 + 3] = a3; + + ia[i] = a2; + } + + /* check results: */ + for (i = 0; i < N*2; i++) + { + if (out[i*4] != in[i*4] + 1 + || out[i*4 + 1] != in[i*4 + 1] + 2 + || out[i*4 + 2] != in[i*4 + 2] + 3 + || out[i*4 + 3] != in[i*4 + 3] + 4 + || ia[i] != in[i*4 + 2] + 3) + abort (); + } + + return 0; +} + +int main (void) +{ + check_vect (); + + main1 (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_strided4 } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided4 } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_strided4 } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-19.c b/gcc/testsuite/gcc.dg/vect/slp-19c.c index 349c5ec6c92..f0df25f5346 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-19.c +++ b/gcc/testsuite/gcc.dg/vect/slp-19c.c @@ -3,7 +3,7 @@ #include <stdarg.h> #include "tree-vect.h" -#define N 16 +#define N 16 int main1 () @@ -13,62 +13,7 @@ main1 () unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; unsigned int ia[N*2], a0, a1, a2, a3; - for (i = 0; i < N; i++) - { - out[i*8] = in[i*8]; - out[i*8 + 1] = in[i*8 + 1]; - out[i*8 + 2] = in[i*8 + 2]; - out[i*8 + 3] = in[i*8 + 3]; - out[i*8 + 4] = in[i*8 + 4]; - out[i*8 + 5] = in[i*8 + 5]; - out[i*8 + 6] = in[i*8 + 6]; - out[i*8 + 7] = in[i*8 + 7]; - - ia[i] = in[i*8 + 2]; - } - - /* check results: */ - for (i = 0; i < N; i++) - { - if (out[i*8] != in[i*8] - || out[i*8 + 1] != in[i*8 + 1] - || out[i*8 + 2] != in[i*8 + 2] - || out[i*8 + 3] != in[i*8 + 3] - || out[i*8 + 4] != in[i*8 + 4] - || out[i*8 + 5] != in[i*8 + 5] - || out[i*8 + 6] != in[i*8 + 6] - || out[i*8 + 7] != in[i*8 + 7] - || ia[i] != in[i*8 + 2]) - abort (); - } - - for (i = 0; i < N*2; i++) - { - a0 = in[i*4] + 1; - a1 = in[i*4 + 1] + 2; - a2 = in[i*4 + 2] + 3; - a3 = in[i*4 + 3] + 4; - - out[i*4] = a0; - out[i*4 + 1] = a1; - out[i*4 + 2] = a2; - out[i*4 + 3] = a3; - - ia[i] = a2; - } - - /* check results: */ - for (i = 0; i < N*2; i++) - { - if (out[i*4] != in[i*4] + 1 - || out[i*4 + 1] != in[i*4 + 1] + 2 - || out[i*4 + 2] != in[i*4 + 2] + 3 - || out[i*4 + 3] != in[i*4 + 3] + 4 - || ia[i] != in[i*4 + 2] + 3) - abort (); - } - - /* The last stmt requires interleaving of not power of 2 size - not + /* The last stmt requires interleaving of not power of 2 size - not vectorizable. */ for (i = 0; i < N/2; i++) { @@ -116,10 +61,10 @@ main1 () out[i*6 + 3] = in[i*6 + 3]; out[i*6 + 4] = in[i*6 + 4]; out[i*6 + 5] = in[i*6 + 5]; - + ia[i] = i; - } - + } + /* check results: */ for (i = 0; i < N/2; i++) { @@ -133,7 +78,6 @@ main1 () abort (); } - return 0; } @@ -146,9 +90,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target vect_strided_wide } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided_wide } } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" { target vect_strided_wide } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! { vect_strided_wide } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ - diff --git a/gcc/testsuite/gcc.dg/vect/slp-21.c b/gcc/testsuite/gcc.dg/vect/slp-21.c index b4f4e24e0f4..39146b8fd11 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-21.c +++ b/gcc/testsuite/gcc.dg/vect/slp-21.c @@ -199,9 +199,9 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target { vect_strided || vect_extract_even_odd } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided || vect_extract_even_odd } } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target { vect_strided4 || vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided4 || vect_extract_even_odd } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided4 } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided4 } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-23.c b/gcc/testsuite/gcc.dg/vect/slp-23.c index 3a64284b056..5a04c900e02 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-23.c +++ b/gcc/testsuite/gcc.dg/vect/slp-23.c @@ -106,8 +106,8 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { vect_strided_wide } && {! { vect_no_align} } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided_wide || vect_no_align} } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { vect_strided8 && { ! { vect_no_align} } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided8 || vect_no_align } } } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-3.c b/gcc/testsuite/gcc.dg/vect/slp-3.c index 8c99b01e8e4..9a504d901e0 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-3.c +++ b/gcc/testsuite/gcc.dg/vect/slp-3.c @@ -4,9 +4,9 @@ #include <stdarg.h> #include "tree-vect.h" -#define N 8 +#define N 12 -unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; +unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; int main1 () @@ -101,7 +101,7 @@ main1 () } /* SLP with unrolling by 8. */ - for (i = 0; i < N/2; i++) + for (i = 0; i < N/4; i++) { out[i*9] = in[i*9]; out[i*9 + 1] = in[i*9 + 1]; @@ -115,7 +115,7 @@ main1 () } /* check results: */ - for (i = 0; i < N/2; i++) + for (i = 0; i < N/4; i++) { if (out[i*9] != in[i*9] || out[i*9 + 1] != in[i*9 + 1] @@ -142,7 +142,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_align } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" { xfail vect_no_align } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c b/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c index 5c0761ebaab..3c04b6d21c5 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c +++ b/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c @@ -1,5 +1,5 @@ /* { dg-require-effective-target vect_int } */ -/* { dg-do run { xfail { sparc*-*-* && ilp32 } } } PR rtl-opt/46603 */ +/* { dg-xfail-run-if "PR rtl-optimization/46603" { sparc*-*-* && { ilp32 && gas } } } */ #include <stdarg.h> #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-6.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-6.c index ccfb888fc5a..d43f329a9cb 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-6.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-6.c @@ -42,7 +42,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_int_add || { ! vect_unpack } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_int_add || { ! { vect_unpack || vect_strided2 } } } } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */ /* { dg-final { scan-tree-dump-times "different interleaving chains in one node" 1 "vect" { target { ! vect_no_int_add } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-1.c b/gcc/testsuite/gcc.dg/vect/vect-1.c index 21975afa01e..04392ea78da 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-1.c @@ -85,6 +85,6 @@ foo (int n) fbar (a); } -/* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_extract_even_odd_wide } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_extract_even_odd_wide } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_strided2 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-10.c b/gcc/testsuite/gcc.dg/vect/vect-10.c index 6447b75a4f8..faa500d2a18 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-10.c +++ b/gcc/testsuite/gcc.dg/vect/vect-10.c @@ -22,5 +22,5 @@ int foo () return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-107.c b/gcc/testsuite/gcc.dg/vect/vect-107.c index 201d4ab4e34..0053b3321a4 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-107.c +++ b/gcc/testsuite/gcc.dg/vect/vect-107.c @@ -40,6 +40,6 @@ int main (void) return main1 (); } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd_wide } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd_wide } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-119.c b/gcc/testsuite/gcc.dg/vect/vect-119.c new file mode 100644 index 00000000000..fa40f15c934 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-119.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ + +#define OUTER 32 +#define INNER 40 + +static unsigned int +bar (const unsigned int x[INNER][2], unsigned int sum) +{ + int i; + + for (i = 0; i < INNER; i++) + sum += x[i][0] * x[i][0] + x[i][1] * x[i][1]; + return sum; +} + +unsigned int foo (const unsigned int x[OUTER][INNER][2]) +{ + int i; + unsigned int sum; + + sum = 0.0f; + for (i = 0; i < OUTER; i++) + sum = bar (x[i], sum); + return sum; +} + +/* { dg-final { scan-tree-dump-times "Detected interleaving of size 2" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-98.c b/gcc/testsuite/gcc.dg/vect/vect-98.c index 118f28fd334..01c9153878f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-98.c +++ b/gcc/testsuite/gcc.dg/vect/vect-98.c @@ -38,6 +38,6 @@ int main (void) } /* Needs interleaving support. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd_wide } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail { vect_interleave && vect_extract_even_odd_wide } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail vect_strided4 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-cselim-1.c b/gcc/testsuite/gcc.dg/vect/vect-cselim-1.c new file mode 100644 index 00000000000..3c21918efb7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-cselim-1.c @@ -0,0 +1,86 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 50 + +typedef struct { + short a; + short b; +} data; + +data in1[N], in2[N], out[N]; +short result[N*2] = {7,-7,9,-6,11,-5,13,-4,15,-3,17,-2,19,-1,21,0,23,1,25,2,27,3,29,4,31,5,33,6,35,7,37,8,39,9,41,10,43,11,45,12,47,13,49,14,51,15,53,16,55,17,57,18,59,19,61,20,63,21,65,22,67,23,69,24,71,25,73,26,75,27,77,28,79,29,81,30,83,31,85,32,87,33,89,34,91,35,93,36,95,37,97,38,99,39,101,40,103,41,105,42}; +short out1[N], out2[N]; + +__attribute__ ((noinline)) void +foo () +{ + int i; + short c, d; + + /* Vectorizable with conditional store sinking. */ + for (i = 0; i < N; i++) + { + c = in1[i].b; + d = in2[i].b; + + if (c >= d) + { + out[i].b = c; + out[i].a = d + 5; + } + else + { + out[i].b = d - 12; + out[i].a = c + d; + } + } + + /* Not vectorizable. */ + for (i = 0; i < N; i++) + { + c = in1[i].b; + d = in2[i].b; + + if (c >= d) + { + out1[i] = c; + } + else + { + out2[i] = c + d; + } + } +} + +int +main (void) +{ + int i; + + check_vect (); + + for (i = 0; i < N; i++) + { + in1[i].a = i; + in1[i].b = i + 2; + in2[i].a = 5; + in2[i].b = i + 5; + __asm__ volatile (""); + } + + foo (); + + for (i = 0; i < N; i++) + { + if (out[i].a != result[2*i] || out[i].b != result[2*i+1]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || { ! vect_strided2 } } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-cselim-2.c b/gcc/testsuite/gcc.dg/vect/vect-cselim-2.c new file mode 100644 index 00000000000..accfcf398c6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-cselim-2.c @@ -0,0 +1,65 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 50 + +int a[N], b[N], in1[N], in2[N]; +int result[2*N] = {5,-7,7,-6,9,-5,11,-4,13,-3,15,-2,17,-1,19,0,21,1,23,2,25,3,27,4,29,5,31,6,33,7,35,8,37,9,39,10,41,11,43,12,45,13,47,14,49,15,51,16,53,17,55,18,57,19,59,20,61,21,63,22,65,23,67,24,69,25,71,26,73,27,75,28,77,29,79,30,81,31,83,32,85,33,87,34,89,35,91,36,93,37,95,38,97,39,99,40,101,41,103,42}; + +__attribute__ ((noinline)) void +foo (int *pa, int *pb) +{ + int i; + int c, d; + + /* Store sinking should not work here since the pointers may alias. */ + for (i = 0; i < N; i++) + { + c = in1[i]; + d = in2[i]; + + if (c >= d) + { + *pa = c; + *pb = d + 5; + } + else + { + *pb = d - 12; + *pa = c + d; + } + + pa++; + pb++; + } +} + +int +main (void) +{ + int i; + + check_vect (); + + for (i = 0; i < N; i++) + { + in1[i] = i; + in2[i] = i + 5; + __asm__ volatile (""); + } + + foo (a, b); + + for (i = 0; i < N; i++) + { + if (a[i] != result[2*i] || b[i] != result[2*i+1]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-outer-5.c b/gcc/testsuite/gcc.dg/vect/vect-outer-5.c index f5027d626cc..05ed39a3da2 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-outer-5.c +++ b/gcc/testsuite/gcc.dg/vect/vect-outer-5.c @@ -17,7 +17,7 @@ int main1 () float B[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); float C[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); float D[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); - float E[4] = {0,1,2,480}; + float E[4] = {0,480,960,1440}; float s; int i, j; @@ -55,7 +55,7 @@ int main1 () s = 0; for (j=0; j<N; j+=4) s += C[j]; - B[i+3] = B[i] + s; + B[i+1] = B[i] + s; } /* check results: */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-peel-1.c b/gcc/testsuite/gcc.dg/vect/vect-peel-1.c index 58a0cdbf203..2a150e91203 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-peel-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-peel-1.c @@ -14,10 +14,10 @@ int main1 () int i; int ia[N+1]; - /* All the accesses are misaligned. With cost model disabled, we count the - the number of aligned accesses for each peeling option, and in this case - we align the two loads if possible (i.e., if misaligned stores are - supported). */ + /* All the accesses are misaligned. With cost model disabled, we + count the number of aligned accesses for each peeling option, and + in this case we align the two loads if possible (i.e., if + misaligned stores are supported). */ for (i = 1; i <= N; i++) { ia[i] = ib[i+2] + ib[i+6]; diff --git a/gcc/testsuite/gcc.dg/vect/vect-shift-3.c b/gcc/testsuite/gcc.dg/vect/vect-shift-3.c new file mode 100644 index 00000000000..78ed935ae59 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-shift-3.c @@ -0,0 +1,37 @@ +/* { dg-require-effective-target vect_shift } */ +/* { dg-require-effective-target vect_int } */ + +#include "tree-vect.h" + +#define N 32 + +unsigned short dst[N] __attribute__((aligned(N))); +unsigned short src[N] __attribute__((aligned(N))); + +__attribute__ ((noinline)) +void array_shift(void) +{ + int i; + for (i = 0; i < N; i++) + dst[i] = src[i] >> 3; +} + +int main() +{ + volatile int i; + check_vect (); + + for (i = 0; i < N; i++) + src[i] = i << 3; + + array_shift (); + + for (i = 0; i < N; i++) + if (dst[i] != i) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-shift-4.c b/gcc/testsuite/gcc.dg/vect/vect-shift-4.c new file mode 100644 index 00000000000..e705feadde0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-shift-4.c @@ -0,0 +1,37 @@ +/* { dg-require-effective-target vect_shift_char } */ +/* { dg-require-effective-target vect_int } */ + +#include "tree-vect.h" + +#define N 32 + +unsigned char dst[N] __attribute__((aligned(N))); +unsigned char src[N] __attribute__((aligned(N))); + +__attribute__ ((noinline)) +void array_shift(void) +{ + int i; + for (i = 0; i < N; i++) + dst[i] = src[i] >> 3; +} + +int main() +{ + volatile int i; + check_vect (); + + for (i = 0; i < N; i++) + src[i] = i << 3; + + array_shift (); + + for (i = 0; i < N; i++) + if (dst[i] != i) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c index c88814297ec..779913a4f2b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c @@ -71,6 +71,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c index 702d911ad4c..25cabb693c5 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c @@ -55,6 +55,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c index 93c1b582ca8..8f04b730f57 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c @@ -68,6 +68,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-mult.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-mult.c index afb2f4697bc..cd941a827f1 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-mult.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-mult.c @@ -62,6 +62,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u32-mult.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u32-mult.c index bac1caa1ce9..4e742b20180 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u32-mult.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u32-mult.c @@ -61,6 +61,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c index cda57393538..9b0142b1d8d 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c @@ -69,6 +69,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c index 426069ffe46..4fb5494a4d3 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c @@ -76,6 +76,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c index 8dfb21be915..cc09fa608dc 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c @@ -81,6 +81,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-float.c b/gcc/testsuite/gcc.dg/vect/vect-strided-float.c index 38c50b9cd43..302be5f578b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-float.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-float.c @@ -39,7 +39,7 @@ int main (void) } /* Needs interleaving support. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd_wide } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail { vect_interleave && vect_extract_even_odd_wide } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-mult-char-ls.c b/gcc/testsuite/gcc.dg/vect/vect-strided-mult-char-ls.c index 3890a796888..3c8062cea12 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-mult-char-ls.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-mult-char-ls.c @@ -71,6 +71,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-mult.c b/gcc/testsuite/gcc.dg/vect/vect-strided-mult.c index 6ddf0932411..49399c4e78c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-mult.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-mult.c @@ -71,6 +71,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c b/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c index 5f18baab4e3..f16aa1a94d7 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c @@ -72,5 +72,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-store-a-u8-i2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-store-a-u8-i2.c index 8548d267ede..26311a8bc80 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-store-a-u8-i2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-store-a-u8-i2.c @@ -55,6 +55,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c index 5c02c0da214..19af351e6cf 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c @@ -65,8 +65,8 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_interleave && vect_pack_trunc } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { ! { vect_interleave } } && { vect_pack_trunc } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { { vect_interleave || vect_strided4 } && vect_pack_trunc } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { ! { vect_interleave || vect_strided4 } } && { vect_pack_trunc } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c index c30c98d7e0d..3be94f10c8a 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c @@ -39,7 +39,7 @@ int main (void) } /* Needs interleaving support. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail { vect_interleave } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided2 } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail { vect_interleave || vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i2.c index eb6ecc69bd4..6694897316e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i2.c @@ -55,6 +55,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i3.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i3.c new file mode 100644 index 00000000000..e423148407d --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i3.c @@ -0,0 +1,112 @@ +#include <stdarg.h> +#include "tree-vect.h" + +#define N 128 + +typedef struct { + unsigned short a; + unsigned short b; + unsigned short c; +} s; + +#define A(I) (I) +#define B(I) ((I) * 2) +#define C(I) ((unsigned short) ~((I) ^ 0x18)) + +void __attribute__ ((noinline)) +check1 (s *res) +{ + int i; + + for (i = 0; i < N; i++) + if (res[i].a != C (i) + || res[i].b != A (i) + || res[i].c != B (i)) + abort (); +} + +void __attribute__ ((noinline)) +check2 (unsigned short *res) +{ + int i; + + for (i = 0; i < N; i++) + if (res[i] != (unsigned short) (A (i) + B (i) + C (i))) + abort (); +} + +void __attribute__ ((noinline)) +check3 (s *res) +{ + int i; + + for (i = 0; i < N; i++) + if (res[i].a != i + || res[i].b != i + || res[i].c != i) + abort (); +} + +void __attribute__ ((noinline)) +check4 (unsigned short *res) +{ + int i; + + for (i = 0; i < N; i++) + if (res[i] != (unsigned short) (A (i) + B (i))) + abort (); +} + +void __attribute__ ((noinline)) +main1 (s *arr) +{ + int i; + s *ptr = arr; + s res1[N]; + unsigned short res2[N]; + + for (i = 0; i < N; i++) + { + res1[i].a = arr[i].c; + res1[i].b = arr[i].a; + res1[i].c = arr[i].b; + } + check1 (res1); + + for (i = 0; i < N; i++) + res2[i] = arr[i].a + arr[i].b + arr[i].c; + check2 (res2); + + for (i = 0; i < N; i++) + { + res1[i].a = i; + res1[i].b = i; + res1[i].c = i; + } + check3 (res1); + + for (i = 0; i < N; i++) + res2[i] = arr[i].a + arr[i].b; + check4 (res2); +} + +int main (void) +{ + int i; + s arr[N]; + + check_vect (); + + for (i = 0; i < N; i++) + { + arr[i].a = A (i); + arr[i].b = B (i); + arr[i].c = C (i); + } + main1 (arr); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target vect_strided3 } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i4.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i4.c index da5a72855d9..82a6c605674 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i4.c @@ -68,6 +68,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i4.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i4.c index 96ee2544242..d743fac1d62 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i4.c @@ -63,6 +63,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i8.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i8.c index 5f5a66e6318..663f3763249 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i8.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i8.c @@ -77,6 +77,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u32-mult.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u32-mult.c index f900b71f10d..d825898a469 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u32-mult.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u32-mult.c @@ -60,6 +60,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c index b18b6605851..8055c9b5f8f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c @@ -71,6 +71,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2.c index 2f44b8e4a3d..be06437550e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2.c @@ -54,6 +54,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c index f5285361a3b..349e8693926 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c @@ -78,6 +78,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c index 1bd932b8af7..537bcc87dfb 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c @@ -98,6 +98,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c index be8ef671a36..76cb66d0861 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c @@ -83,6 +83,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8.c index ff5171d92e6..ff80c0418e9 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8.c @@ -85,6 +85,6 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-vfa-03.c b/gcc/testsuite/gcc.dg/vect/vect-vfa-03.c index 7d684aa1ff0..2c06ce6b0ae 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-vfa-03.c +++ b/gcc/testsuite/gcc.dg/vect/vect-vfa-03.c @@ -53,6 +53,6 @@ main (void) } /* Needs interleaving support. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail vect_strided2 } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index 170c33db2a5..b783ec39ba8 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -75,15 +75,20 @@ lappend DEFAULT_VECTCFLAGS "-fdump-tree-vect-details" lappend VECT_SLP_CFLAGS "-fdump-tree-slp-details" # Main loop. -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.\[cS\]]] \ - "" $DEFAULT_VECTCFLAGS -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vect-*.\[cS\]]] \ - "" $DEFAULT_VECTCFLAGS -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-*.\[cS\]]] \ - "" $DEFAULT_VECTCFLAGS -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/bb-slp*.\[cS\]]] \ - "" $VECT_SLP_CFLAGS - +set VECT_ADDITIONAL_FLAGS [list ""] +if { [check_effective_target_lto] } { + lappend VECT_ADDITIONAL_FLAGS "-flto" +} +foreach flags $VECT_ADDITIONAL_FLAGS { + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.\[cS\]]] \ + $flags $DEFAULT_VECTCFLAGS + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vect-*.\[cS\]]] \ + $flags $DEFAULT_VECTCFLAGS + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-*.\[cS\]]] \ + $flags $DEFAULT_VECTCFLAGS + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/bb-slp*.\[cS\]]] \ + $flags $VECT_SLP_CFLAGS +} #### Tests with special options global SAVED_DEFAULT_VECTCFLAGS @@ -210,6 +215,12 @@ lappend DEFAULT_VECTCFLAGS "--param" "ggc-min-expand=0" "--param" "ggc-min-heaps dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/ggc-*.\[cS\]]] \ "" $DEFAULT_VECTCFLAGS +# -ftree-loop-if-convert-stores +set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS +lappend DEFAULT_VECTCFLAGS "-ftree-loop-if-convert-stores" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/if-cvt-stores-vect-*.\[cS\]]] \ + "" $DEFAULT_VECTCFLAGS + # With -O3. # Don't allow IPA cloning, because it throws our counts out of whack. set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS diff --git a/gcc/testsuite/gcc.dg/winline-5.c b/gcc/testsuite/gcc.dg/winline-5.c index ad1fc4100bb..a42ae943fe0 100644 --- a/gcc/testsuite/gcc.dg/winline-5.c +++ b/gcc/testsuite/gcc.dg/winline-5.c @@ -15,15 +15,7 @@ inline int q(void) /* { dg-warning "inline-unit-growth" } */ big(); big(); } -inline int q1(void) -{ - big(); - big(); - big(); -} int t (void) { - /* We allow one inlining over limit. */ - q1(); return q (); /* { dg-warning "called from here" } */ } diff --git a/gcc/testsuite/gcc.target/arm/cold-lc.c b/gcc/testsuite/gcc.target/arm/cold-lc.c new file mode 100644 index 00000000000..295c29fe8f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/cold-lc.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mlong-calls" } */ +/* { dg-final { scan-assembler-not "bl\[^\n\]*dump_stack" } } */ + +extern void dump_stack (void) __attribute__ ((__cold__)) __attribute__ ((noinline)); +struct thread_info { + struct task_struct *task; +}; +extern struct thread_info *current_thread_info (void); + +void dump_stack (void) +{ + unsigned long stack; + show_stack ((current_thread_info ()->task), &stack); +} + +void die (char *str, void *fp, int nr) +{ + dump_stack (); + while (1); +} + diff --git a/gcc/testsuite/gcc.target/arm/neon-modes-2.c b/gcc/testsuite/gcc.target/arm/neon-modes-2.c new file mode 100644 index 00000000000..40f1bba363b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-modes-2.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O1" } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" + +#define SETUP(A) x##A = vld3_u32 (ptr + A * 0x20) +#define MODIFY(A) x##A = vld3_lane_u32 (ptr + A * 0x20 + 0x10, x##A, 1) +#define STORE(A) vst3_u32 (ptr + A * 0x20, x##A) + +#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5) + +void +bar (uint32_t *ptr, int y) +{ + uint32x2x3_t MANY (SETUP); + int *x = __builtin_alloca (y); + int z[0x1000]; + foo (x, z); + MANY (MODIFY); + foo (x, z); + MANY (STORE); +} diff --git a/gcc/testsuite/gcc.target/arm/neon-vld-1.c b/gcc/testsuite/gcc.target/arm/neon-vld-1.c new file mode 100644 index 00000000000..f6bf6911d42 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-vld-1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O1" } */ +/* { dg-add-options arm_neon } */ + +#include <arm_neon.h> + +uint8x16_t +foo (uint8_t *a, uint8x16_t b) +{ + vst1q_lane_u8 (a, b, 14); + return vld1q_lane_u8 (a + 0x100, b, 15); +} diff --git a/gcc/testsuite/gcc.target/arm/neon-vld3-1.c b/gcc/testsuite/gcc.target/arm/neon-vld3-1.c new file mode 100644 index 00000000000..0cc5c8826db --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-vld3-1.c @@ -0,0 +1,27 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_neon_hw } */ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" + +uint32_t buffer[12]; + +void __attribute__((noinline)) +foo (uint32_t *a) +{ + uint32x4x3_t x; + + x = vld3q_u32 (a); + x.val[0] = vaddq_u32 (x.val[0], x.val[1]); + vst3q_u32 (a, x); +} + +int +main (void) +{ + buffer[0] = 1; + buffer[1] = 2; + foo (buffer); + return buffer[0] != 3; +} diff --git a/gcc/testsuite/gcc.target/arm/neon-vset_lanes8.c b/gcc/testsuite/gcc.target/arm/neon-vset_lanes8.c new file mode 100644 index 00000000000..e87102edbe2 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-vset_lanes8.c @@ -0,0 +1,21 @@ +/* Test the `vset_lane_s8' ARM Neon intrinsic. */ + +/* { dg-do run } */ +/* { dg-require-effective-target arm_neon_hw } */ +/* { dg-options "-O0" } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" +#include <stdlib.h> +#include <string.h> + +int8x8_t x = { 1, 2, 3, 4, 5, 6, 7, 8 }; +int8x8_t y = { 1, 2, 3, 16, 5, 6, 7, 8 }; + +int main (void) +{ + x = vset_lane_s8 (16, x, 3); + if (memcmp (&x, &y, sizeof (x)) != 0) + abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.target/arm/neon-vst3-1.c b/gcc/testsuite/gcc.target/arm/neon-vst3-1.c new file mode 100644 index 00000000000..a3bee6cb56f --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-vst3-1.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_neon_hw } */ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" + +uint32_t buffer[64]; + +void __attribute__((noinline)) +foo (uint32_t *a) +{ + uint32x4x3_t x; + + x = vld3q_u32 (a); + a[35] = 1; + vst3q_lane_u32 (a + 32, x, 1); +} + +int +main (void) +{ + foo (buffer); + return buffer[35] != 1; +} diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c index 073d88f2b5e..fa9cf20f558 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c @@ -15,5 +15,5 @@ void test_vld1Q_dupf32 (void) out_float32x4_t = vld1q_dup_f32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c index 1202e929a12..4e830382571 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c @@ -15,5 +15,5 @@ void test_vld1Q_dupp16 (void) out_poly16x8_t = vld1q_dup_p16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c index 27d75509720..70fb898850f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c @@ -15,5 +15,5 @@ void test_vld1Q_dupp8 (void) out_poly8x16_t = vld1q_dup_p8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c index df1e00880d4..1fedcf94d2a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c @@ -15,5 +15,5 @@ void test_vld1Q_dups16 (void) out_int16x8_t = vld1q_dup_s16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c index b371299bda0..2abd4e44740 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c @@ -15,5 +15,5 @@ void test_vld1Q_dups32 (void) out_int32x4_t = vld1q_dup_s32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c index b4c3a8cc9fe..912b93d1d6c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c @@ -15,5 +15,5 @@ void test_vld1Q_dups64 (void) out_int64x2_t = vld1q_dup_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c index badeb3b8045..e431a5cf108 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c @@ -15,5 +15,5 @@ void test_vld1Q_dups8 (void) out_int8x16_t = vld1q_dup_s8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c index d247fea5620..6da756774f6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c @@ -15,5 +15,5 @@ void test_vld1Q_dupu16 (void) out_uint16x8_t = vld1q_dup_u16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c index 1160f9820b6..8e400bd25f2 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c @@ -15,5 +15,5 @@ void test_vld1Q_dupu32 (void) out_uint32x4_t = vld1q_dup_u32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c index 8cbc89c9482..234db407b37 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c @@ -15,5 +15,5 @@ void test_vld1Q_dupu64 (void) out_uint64x2_t = vld1q_dup_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c index c6d52a3d74c..b1e540d702e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c @@ -15,5 +15,5 @@ void test_vld1Q_dupu8 (void) out_uint8x16_t = vld1q_dup_u8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c index bccdd26c209..8c7689edb05 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c @@ -16,5 +16,5 @@ void test_vld1Q_lanef32 (void) out_float32x4_t = vld1q_lane_f32 (0, arg1_float32x4_t, 1); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c index f080107a66c..163c2a7a959 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c @@ -16,5 +16,5 @@ void test_vld1Q_lanep16 (void) out_poly16x8_t = vld1q_lane_p16 (0, arg1_poly16x8_t, 1); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c index 4887ebcd0c2..7f7a22eba4b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c @@ -16,5 +16,5 @@ void test_vld1Q_lanep8 (void) out_poly8x16_t = vld1q_lane_p8 (0, arg1_poly8x16_t, 1); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c index aeb824c2333..0d56492c257 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c @@ -16,5 +16,5 @@ void test_vld1Q_lanes16 (void) out_int16x8_t = vld1q_lane_s16 (0, arg1_int16x8_t, 1); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c index 90556ac9b21..3c5869fcdf5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c @@ -16,5 +16,5 @@ void test_vld1Q_lanes32 (void) out_int32x4_t = vld1q_lane_s32 (0, arg1_int32x4_t, 1); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c index db68bd0873d..154583b677d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c @@ -16,5 +16,5 @@ void test_vld1Q_lanes64 (void) out_int64x2_t = vld1q_lane_s64 (0, arg1_int64x2_t, 1); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c index 3494c077dcd..a6aa3f804b4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c @@ -16,5 +16,5 @@ void test_vld1Q_lanes8 (void) out_int8x16_t = vld1q_lane_s8 (0, arg1_int8x16_t, 1); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c index eb791e7d399..1653dd31cb6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c @@ -16,5 +16,5 @@ void test_vld1Q_laneu16 (void) out_uint16x8_t = vld1q_lane_u16 (0, arg1_uint16x8_t, 1); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c index 3841c9b96b0..034e24d5266 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c @@ -16,5 +16,5 @@ void test_vld1Q_laneu32 (void) out_uint32x4_t = vld1q_lane_u32 (0, arg1_uint32x4_t, 1); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c index 082e6a625b8..ff92e91fcb8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c @@ -16,5 +16,5 @@ void test_vld1Q_laneu64 (void) out_uint64x2_t = vld1q_lane_u64 (0, arg1_uint64x2_t, 1); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c index 194f7491248..be338f18707 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c @@ -16,5 +16,5 @@ void test_vld1Q_laneu8 (void) out_uint8x16_t = vld1q_lane_u8 (0, arg1_uint8x16_t, 1); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c index 1c84b9127ee..d792148d09a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c @@ -15,5 +15,5 @@ void test_vld1Qf32 (void) out_float32x4_t = vld1q_f32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c index f470da6bc69..84bceb557e4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c @@ -15,5 +15,5 @@ void test_vld1Qp16 (void) out_poly16x8_t = vld1q_p16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c index a46d48bc2eb..e756b1bc7f7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c @@ -15,5 +15,5 @@ void test_vld1Qp8 (void) out_poly8x16_t = vld1q_p8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c index 39ab3fe55c0..aaa29e982cb 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c @@ -15,5 +15,5 @@ void test_vld1Qs16 (void) out_int16x8_t = vld1q_s16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c index e12e8d97a40..14bc4221eae 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c @@ -15,5 +15,5 @@ void test_vld1Qs32 (void) out_int32x4_t = vld1q_s32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c index 1c6aca4a872..093aee61a39 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c @@ -15,5 +15,5 @@ void test_vld1Qs64 (void) out_int64x2_t = vld1q_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c index 64e6b006444..d4fffd0a100 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c @@ -15,5 +15,5 @@ void test_vld1Qs8 (void) out_int8x16_t = vld1q_s8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c index 191deb0d769..267f7d15bcc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c @@ -15,5 +15,5 @@ void test_vld1Qu16 (void) out_uint16x8_t = vld1q_u16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c index e3e01a61268..53ccab0c5b1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c @@ -15,5 +15,5 @@ void test_vld1Qu32 (void) out_uint32x4_t = vld1q_u32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c index 24b55bab12c..56b0dbd3e62 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c @@ -15,5 +15,5 @@ void test_vld1Qu64 (void) out_uint64x2_t = vld1q_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c index 47e6ad07dea..d68fc89eaa0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c @@ -15,5 +15,5 @@ void test_vld1Qu8 (void) out_uint8x16_t = vld1q_u8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c index 41eec0ef0a1..6f8435b3629 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c @@ -15,5 +15,5 @@ void test_vld1_dupf32 (void) out_float32x2_t = vld1_dup_f32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c index b38b29c7253..1287b471b56 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c @@ -15,5 +15,5 @@ void test_vld1_dupp16 (void) out_poly16x4_t = vld1_dup_p16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c index 69017c4ac59..8fde6455355 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c @@ -15,5 +15,5 @@ void test_vld1_dupp8 (void) out_poly8x8_t = vld1_dup_p8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c index 61e0377fa4c..084f89e064a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c @@ -15,5 +15,5 @@ void test_vld1_dups16 (void) out_int16x4_t = vld1_dup_s16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c index 0429ee513a6..ba6697a4ce6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c @@ -15,5 +15,5 @@ void test_vld1_dups32 (void) out_int32x2_t = vld1_dup_s32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c index 90ee403d663..410ee6fcd5e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c @@ -15,5 +15,5 @@ void test_vld1_dups64 (void) out_int64x1_t = vld1_dup_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c index aacac04bb13..18b21b527a4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c @@ -15,5 +15,5 @@ void test_vld1_dups8 (void) out_int8x8_t = vld1_dup_s8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c index 64d736298ba..1d893cd3b8a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c @@ -15,5 +15,5 @@ void test_vld1_dupu16 (void) out_uint16x4_t = vld1_dup_u16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c index 6f3fd967e11..f640846403a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c @@ -15,5 +15,5 @@ void test_vld1_dupu32 (void) out_uint32x2_t = vld1_dup_u32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c index 262147d79ee..17be90a0bcd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c @@ -15,5 +15,5 @@ void test_vld1_dupu64 (void) out_uint64x1_t = vld1_dup_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c index 6038bec9caa..5811f25fb4d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c @@ -15,5 +15,5 @@ void test_vld1_dupu8 (void) out_uint8x8_t = vld1_dup_u8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c index 3d4b0a4de6e..6165897ecf8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c @@ -16,5 +16,5 @@ void test_vld1_lanef32 (void) out_float32x2_t = vld1_lane_f32 (0, arg1_float32x2_t, 1); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c index 832abbd2a1c..feecf1baa29 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c @@ -16,5 +16,5 @@ void test_vld1_lanep16 (void) out_poly16x4_t = vld1_lane_p16 (0, arg1_poly16x4_t, 1); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c index 04823322e04..0d172993653 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c @@ -16,5 +16,5 @@ void test_vld1_lanep8 (void) out_poly8x8_t = vld1_lane_p8 (0, arg1_poly8x8_t, 1); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c index 571f87673f4..26272410e36 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c @@ -16,5 +16,5 @@ void test_vld1_lanes16 (void) out_int16x4_t = vld1_lane_s16 (0, arg1_int16x4_t, 1); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c index 057a7ffc30e..39575d45680 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c @@ -16,5 +16,5 @@ void test_vld1_lanes32 (void) out_int32x2_t = vld1_lane_s32 (0, arg1_int32x2_t, 1); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c index 1e46d6a1f96..1216405bfc7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c @@ -16,5 +16,5 @@ void test_vld1_lanes64 (void) out_int64x1_t = vld1_lane_s64 (0, arg1_int64x1_t, 0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c index eeebc9bbd09..7c763fd909b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c @@ -16,5 +16,5 @@ void test_vld1_lanes8 (void) out_int8x8_t = vld1_lane_s8 (0, arg1_int8x8_t, 1); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c index 116a35f03b4..9d2c45ed93b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c @@ -16,5 +16,5 @@ void test_vld1_laneu16 (void) out_uint16x4_t = vld1_lane_u16 (0, arg1_uint16x4_t, 1); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c index f4907d202b2..3a7f3eec96b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c @@ -16,5 +16,5 @@ void test_vld1_laneu32 (void) out_uint32x2_t = vld1_lane_u32 (0, arg1_uint32x2_t, 1); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c index b5058b0f806..b9e5d2042e1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c @@ -16,5 +16,5 @@ void test_vld1_laneu64 (void) out_uint64x1_t = vld1_lane_u64 (0, arg1_uint64x1_t, 0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c index caa08f63723..7e4835afe42 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c @@ -16,5 +16,5 @@ void test_vld1_laneu8 (void) out_uint8x8_t = vld1_lane_u8 (0, arg1_uint8x8_t, 1); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1f32.c b/gcc/testsuite/gcc.target/arm/neon/vld1f32.c index 17deac967cb..2d90ac55902 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1f32.c @@ -15,5 +15,5 @@ void test_vld1f32 (void) out_float32x2_t = vld1_f32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1p16.c b/gcc/testsuite/gcc.target/arm/neon/vld1p16.c index ef2e73ac598..62aa89e8af9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1p16.c @@ -15,5 +15,5 @@ void test_vld1p16 (void) out_poly16x4_t = vld1_p16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1p8.c b/gcc/testsuite/gcc.target/arm/neon/vld1p8.c index 048bdeb06b2..60e47c2d567 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1p8.c @@ -15,5 +15,5 @@ void test_vld1p8 (void) out_poly8x8_t = vld1_p8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1s16.c b/gcc/testsuite/gcc.target/arm/neon/vld1s16.c index 39e12d76cd1..1d4cf525fd5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1s16.c @@ -15,5 +15,5 @@ void test_vld1s16 (void) out_int16x4_t = vld1_s16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1s32.c b/gcc/testsuite/gcc.target/arm/neon/vld1s32.c index 80fbfd07d70..7af67c383a1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1s32.c @@ -15,5 +15,5 @@ void test_vld1s32 (void) out_int32x2_t = vld1_s32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1s64.c b/gcc/testsuite/gcc.target/arm/neon/vld1s64.c index 3ea125d36bb..dadb9de2264 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1s64.c @@ -15,5 +15,5 @@ void test_vld1s64 (void) out_int64x1_t = vld1_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1s8.c b/gcc/testsuite/gcc.target/arm/neon/vld1s8.c index 599c3234535..c27ebcd061f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1s8.c @@ -15,5 +15,5 @@ void test_vld1s8 (void) out_int8x8_t = vld1_s8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1u16.c b/gcc/testsuite/gcc.target/arm/neon/vld1u16.c index 550ca118b6f..f973d6ec5ca 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1u16.c @@ -15,5 +15,5 @@ void test_vld1u16 (void) out_uint16x4_t = vld1_u16 (0); } -/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1u32.c b/gcc/testsuite/gcc.target/arm/neon/vld1u32.c index e0b673cf8b1..4b455b29290 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1u32.c @@ -15,5 +15,5 @@ void test_vld1u32 (void) out_uint32x2_t = vld1_u32 (0); } -/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1u64.c b/gcc/testsuite/gcc.target/arm/neon/vld1u64.c index eba002cd7db..1504215d8e8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1u64.c @@ -15,5 +15,5 @@ void test_vld1u64 (void) out_uint64x1_t = vld1_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld1u8.c b/gcc/testsuite/gcc.target/arm/neon/vld1u8.c index a63bcf2cd4b..600d0351843 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld1u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld1u8.c @@ -15,5 +15,5 @@ void test_vld1u8 (void) out_uint8x8_t = vld1_u8 (0); } -/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c index de05fd78f4b..9afbbecf720 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c @@ -16,5 +16,5 @@ void test_vld2Q_lanef32 (void) out_float32x4x2_t = vld2q_lane_f32 (0, arg1_float32x4x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c index 30dd2d9b72c..e1b85aad9d4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c @@ -16,5 +16,5 @@ void test_vld2Q_lanep16 (void) out_poly16x8x2_t = vld2q_lane_p16 (0, arg1_poly16x8x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c index bc256dd67d5..467c02b64bc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c @@ -16,5 +16,5 @@ void test_vld2Q_lanes16 (void) out_int16x8x2_t = vld2q_lane_s16 (0, arg1_int16x8x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c index bf184df22c5..5f9c4a8b239 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c @@ -16,5 +16,5 @@ void test_vld2Q_lanes32 (void) out_int32x4x2_t = vld2q_lane_s32 (0, arg1_int32x4x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c index 37919becf45..851572917bf 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c @@ -16,5 +16,5 @@ void test_vld2Q_laneu16 (void) out_uint16x8x2_t = vld2q_lane_u16 (0, arg1_uint16x8x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c index d42638cd159..65ec23a6f42 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c @@ -16,5 +16,5 @@ void test_vld2Q_laneu32 (void) out_uint32x4x2_t = vld2q_lane_u32 (0, arg1_uint32x4x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c index 6e7d1d3d533..afde42c20a0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c @@ -15,6 +15,6 @@ void test_vld2Qf32 (void) out_float32x4x2_t = vld2q_f32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c index 18ee431698d..f74004628de 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c @@ -15,6 +15,6 @@ void test_vld2Qp16 (void) out_poly16x8x2_t = vld2q_p16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c index 4751de7b8ab..9e4ff25f3df 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c @@ -15,6 +15,6 @@ void test_vld2Qp8 (void) out_poly8x16x2_t = vld2q_p8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c index 638f24accf2..97c8a2c5f8a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c @@ -15,6 +15,6 @@ void test_vld2Qs16 (void) out_int16x8x2_t = vld2q_s16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c index 51d7dc87fb8..cd03e17d2e1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c @@ -15,6 +15,6 @@ void test_vld2Qs32 (void) out_int32x4x2_t = vld2q_s32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c index b3fb47d55fc..b33a5a8f4ef 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c @@ -15,6 +15,6 @@ void test_vld2Qs8 (void) out_int8x16x2_t = vld2q_s8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c index 7955de6aec4..76169af569d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c @@ -15,6 +15,6 @@ void test_vld2Qu16 (void) out_uint16x8x2_t = vld2q_u16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c index 6099c06c62c..347e164bf09 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c @@ -15,6 +15,6 @@ void test_vld2Qu32 (void) out_uint32x4x2_t = vld2q_u32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c index 82632ed383e..3b738a7aede 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c @@ -15,6 +15,6 @@ void test_vld2Qu8 (void) out_uint8x16x2_t = vld2q_u8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c index aa74e38ec49..54fbd3da974 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c @@ -15,5 +15,5 @@ void test_vld2_dupf32 (void) out_float32x2x2_t = vld2_dup_f32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c index 71be4c12790..b5ec4e227f2 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c @@ -15,5 +15,5 @@ void test_vld2_dupp16 (void) out_poly16x4x2_t = vld2_dup_p16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c index 17d4ec1b736..2ad81b53ab7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c @@ -15,5 +15,5 @@ void test_vld2_dupp8 (void) out_poly8x8x2_t = vld2_dup_p8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c index 128e715bec8..43b245d3de3 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c @@ -15,5 +15,5 @@ void test_vld2_dups16 (void) out_int16x4x2_t = vld2_dup_s16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c index 41461be8725..51e4fc8e63b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c @@ -15,5 +15,5 @@ void test_vld2_dups32 (void) out_int32x2x2_t = vld2_dup_s32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c index e9d4b53823c..644db84cab2 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c @@ -15,5 +15,5 @@ void test_vld2_dups64 (void) out_int64x1x2_t = vld2_dup_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c index 8b3f7979ae1..01592339203 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c @@ -15,5 +15,5 @@ void test_vld2_dups8 (void) out_int8x8x2_t = vld2_dup_s8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c index 6b9df90eb92..85bbc4681f1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c @@ -15,5 +15,5 @@ void test_vld2_dupu16 (void) out_uint16x4x2_t = vld2_dup_u16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c index d34acecf5ce..3549fde1ca9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c @@ -15,5 +15,5 @@ void test_vld2_dupu32 (void) out_uint32x2x2_t = vld2_dup_u32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c index 16b04657404..a830f831021 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c @@ -15,5 +15,5 @@ void test_vld2_dupu64 (void) out_uint64x1x2_t = vld2_dup_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c index 94c80a98199..c3763c8f2c6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c @@ -15,5 +15,5 @@ void test_vld2_dupu8 (void) out_uint8x8x2_t = vld2_dup_u8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c index 2e02a2831a5..f60279efd0a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c @@ -16,5 +16,5 @@ void test_vld2_lanef32 (void) out_float32x2x2_t = vld2_lane_f32 (0, arg1_float32x2x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c index d52864b8957..0d7f415b77e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c @@ -16,5 +16,5 @@ void test_vld2_lanep16 (void) out_poly16x4x2_t = vld2_lane_p16 (0, arg1_poly16x4x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c index 07938a1877c..8174e7bee03 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c @@ -16,5 +16,5 @@ void test_vld2_lanep8 (void) out_poly8x8x2_t = vld2_lane_p8 (0, arg1_poly8x8x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c index c19aacf5142..5a1eb54bdcc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c @@ -16,5 +16,5 @@ void test_vld2_lanes16 (void) out_int16x4x2_t = vld2_lane_s16 (0, arg1_int16x4x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c index 6394d9a3488..a663c52ff9d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c @@ -16,5 +16,5 @@ void test_vld2_lanes32 (void) out_int32x2x2_t = vld2_lane_s32 (0, arg1_int32x2x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c index 603d3234cf7..073ba54179c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c @@ -16,5 +16,5 @@ void test_vld2_lanes8 (void) out_int8x8x2_t = vld2_lane_s8 (0, arg1_int8x8x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c index e6a873b12c1..7250b562ed3 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c @@ -16,5 +16,5 @@ void test_vld2_laneu16 (void) out_uint16x4x2_t = vld2_lane_u16 (0, arg1_uint16x4x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c index 58e806faa40..9a46c65d00b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c @@ -16,5 +16,5 @@ void test_vld2_laneu32 (void) out_uint32x2x2_t = vld2_lane_u32 (0, arg1_uint32x2x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c index b662354f823..ba2007109b8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c @@ -16,5 +16,5 @@ void test_vld2_laneu8 (void) out_uint8x8x2_t = vld2_lane_u8 (0, arg1_uint8x8x2_t, 1); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2f32.c b/gcc/testsuite/gcc.target/arm/neon/vld2f32.c index 75974376a96..c790de94125 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2f32.c @@ -15,5 +15,5 @@ void test_vld2f32 (void) out_float32x2x2_t = vld2_f32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2p16.c b/gcc/testsuite/gcc.target/arm/neon/vld2p16.c index f166d3554e1..4c4338cfc14 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2p16.c @@ -15,5 +15,5 @@ void test_vld2p16 (void) out_poly16x4x2_t = vld2_p16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2p8.c b/gcc/testsuite/gcc.target/arm/neon/vld2p8.c index 612fab6fa75..d319c22e2f9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2p8.c @@ -15,5 +15,5 @@ void test_vld2p8 (void) out_poly8x8x2_t = vld2_p8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2s16.c b/gcc/testsuite/gcc.target/arm/neon/vld2s16.c index 70f6af946b3..f725d79de5b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2s16.c @@ -15,5 +15,5 @@ void test_vld2s16 (void) out_int16x4x2_t = vld2_s16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2s32.c b/gcc/testsuite/gcc.target/arm/neon/vld2s32.c index 4a84effcc87..3f417eeee9c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2s32.c @@ -15,5 +15,5 @@ void test_vld2s32 (void) out_int32x2x2_t = vld2_s32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2s64.c b/gcc/testsuite/gcc.target/arm/neon/vld2s64.c index 0a388d0901e..b9900893fd1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2s64.c @@ -15,5 +15,5 @@ void test_vld2s64 (void) out_int64x1x2_t = vld2_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2s8.c b/gcc/testsuite/gcc.target/arm/neon/vld2s8.c index 110e88320fb..1df9eee6fcd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2s8.c @@ -15,5 +15,5 @@ void test_vld2s8 (void) out_int8x8x2_t = vld2_s8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2u16.c b/gcc/testsuite/gcc.target/arm/neon/vld2u16.c index f2e721bf821..7440e0c0879 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2u16.c @@ -15,5 +15,5 @@ void test_vld2u16 (void) out_uint16x4x2_t = vld2_u16 (0); } -/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2u32.c b/gcc/testsuite/gcc.target/arm/neon/vld2u32.c index f0f069e9836..940fd749776 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2u32.c @@ -15,5 +15,5 @@ void test_vld2u32 (void) out_uint32x2x2_t = vld2_u32 (0); } -/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2u64.c b/gcc/testsuite/gcc.target/arm/neon/vld2u64.c index 1d2a3bccb30..35c046a0c55 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2u64.c @@ -15,5 +15,5 @@ void test_vld2u64 (void) out_uint64x1x2_t = vld2_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld2u8.c b/gcc/testsuite/gcc.target/arm/neon/vld2u8.c index eb0c5a6d4fa..2231e26c073 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld2u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld2u8.c @@ -15,5 +15,5 @@ void test_vld2u8 (void) out_uint8x8x2_t = vld2_u8 (0); } -/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c index 6c6f52032f8..6bdc1e14ade 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c @@ -16,5 +16,5 @@ void test_vld3Q_lanef32 (void) out_float32x4x3_t = vld3q_lane_f32 (0, arg1_float32x4x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c index e4e60bc65fd..12b3be0efa7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c @@ -16,5 +16,5 @@ void test_vld3Q_lanep16 (void) out_poly16x8x3_t = vld3q_lane_p16 (0, arg1_poly16x8x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c index 0456d3b4bfe..8ed21e3d7ca 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c @@ -16,5 +16,5 @@ void test_vld3Q_lanes16 (void) out_int16x8x3_t = vld3q_lane_s16 (0, arg1_int16x8x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c index fca11ae2024..af0118da001 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c @@ -16,5 +16,5 @@ void test_vld3Q_lanes32 (void) out_int32x4x3_t = vld3q_lane_s32 (0, arg1_int32x4x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c index 56c94b2f264..7880b98e49f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c @@ -16,5 +16,5 @@ void test_vld3Q_laneu16 (void) out_uint16x8x3_t = vld3q_lane_u16 (0, arg1_uint16x8x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c index a73a5a2662e..0b1bce5c537 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c @@ -16,5 +16,5 @@ void test_vld3Q_laneu32 (void) out_uint32x4x3_t = vld3q_lane_u32 (0, arg1_uint32x4x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c index 45899176953..6f16d9d870b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c @@ -15,6 +15,6 @@ void test_vld3Qf32 (void) out_float32x4x3_t = vld3q_f32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c index 8c3e5beb4d3..ff4ef8653be 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c @@ -15,6 +15,6 @@ void test_vld3Qp16 (void) out_poly16x8x3_t = vld3q_p16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c index 0197f517517..a23749378cb 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c @@ -15,6 +15,6 @@ void test_vld3Qp8 (void) out_poly8x16x3_t = vld3q_p8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c index ea7709690b1..cfa01367f55 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c @@ -15,6 +15,6 @@ void test_vld3Qs16 (void) out_int16x8x3_t = vld3q_s16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c index 10896957fe5..e1721ef3dfe 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c @@ -15,6 +15,6 @@ void test_vld3Qs32 (void) out_int32x4x3_t = vld3q_s32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c index ca389ad1c43..9f762ca6fb3 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c @@ -15,6 +15,6 @@ void test_vld3Qs8 (void) out_int8x16x3_t = vld3q_s8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c index efef26fd759..a2308729fdd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c @@ -15,6 +15,6 @@ void test_vld3Qu16 (void) out_uint16x8x3_t = vld3q_u16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c index 077533c2bed..21f20f880eb 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c @@ -15,6 +15,6 @@ void test_vld3Qu32 (void) out_uint32x4x3_t = vld3q_u32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c index c8093b8c1a7..7cbcc46908e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c @@ -15,6 +15,6 @@ void test_vld3Qu8 (void) out_uint8x16x3_t = vld3q_u8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c index e38a1354138..54233697169 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c @@ -15,5 +15,5 @@ void test_vld3_dupf32 (void) out_float32x2x3_t = vld3_dup_f32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c index d9f3d14bc44..6c08c8343ca 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c @@ -15,5 +15,5 @@ void test_vld3_dupp16 (void) out_poly16x4x3_t = vld3_dup_p16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c index 43c7fe8e229..fd4a6603fe8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c @@ -15,5 +15,5 @@ void test_vld3_dupp8 (void) out_poly8x8x3_t = vld3_dup_p8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c index 8fec7c51203..4c11e7ef8ee 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c @@ -15,5 +15,5 @@ void test_vld3_dups16 (void) out_int16x4x3_t = vld3_dup_s16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c index 1118d2467e0..b500c24a901 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c @@ -15,5 +15,5 @@ void test_vld3_dups32 (void) out_int32x2x3_t = vld3_dup_s32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c index 2e49c0ed989..cf11f5c1c7c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c @@ -15,5 +15,5 @@ void test_vld3_dups64 (void) out_int64x1x3_t = vld3_dup_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c index 7327c9fca08..4f0c8300dec 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c @@ -15,5 +15,5 @@ void test_vld3_dups8 (void) out_int8x8x3_t = vld3_dup_s8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c index d188fad7543..57e3597bf14 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c @@ -15,5 +15,5 @@ void test_vld3_dupu16 (void) out_uint16x4x3_t = vld3_dup_u16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c index 17436e047b5..e4abde4f38a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c @@ -15,5 +15,5 @@ void test_vld3_dupu32 (void) out_uint32x2x3_t = vld3_dup_u32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c index cedf058298e..a9171262386 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c @@ -15,5 +15,5 @@ void test_vld3_dupu64 (void) out_uint64x1x3_t = vld3_dup_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c index 1ebe6159410..84261878529 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c @@ -15,5 +15,5 @@ void test_vld3_dupu8 (void) out_uint8x8x3_t = vld3_dup_u8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c index 3ee94ed0bb5..ccbe45f00c6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c @@ -16,5 +16,5 @@ void test_vld3_lanef32 (void) out_float32x2x3_t = vld3_lane_f32 (0, arg1_float32x2x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c index 3c8598869e2..94b4ce42152 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c @@ -16,5 +16,5 @@ void test_vld3_lanep16 (void) out_poly16x4x3_t = vld3_lane_p16 (0, arg1_poly16x4x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c index f5f9761d03d..12b0786bdc6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c @@ -16,5 +16,5 @@ void test_vld3_lanep8 (void) out_poly8x8x3_t = vld3_lane_p8 (0, arg1_poly8x8x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c index 51cf8a3cf96..5ab744fc2bd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c @@ -16,5 +16,5 @@ void test_vld3_lanes16 (void) out_int16x4x3_t = vld3_lane_s16 (0, arg1_int16x4x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c index 59a29f77e2f..168f3f3639a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c @@ -16,5 +16,5 @@ void test_vld3_lanes32 (void) out_int32x2x3_t = vld3_lane_s32 (0, arg1_int32x2x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c index e4513aeb960..9d0d1a4b563 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c @@ -16,5 +16,5 @@ void test_vld3_lanes8 (void) out_int8x8x3_t = vld3_lane_s8 (0, arg1_int8x8x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c index 86a787c09ab..baf97a98a88 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c @@ -16,5 +16,5 @@ void test_vld3_laneu16 (void) out_uint16x4x3_t = vld3_lane_u16 (0, arg1_uint16x4x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c index e4bca9e39fc..05d7107f2e9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c @@ -16,5 +16,5 @@ void test_vld3_laneu32 (void) out_uint32x2x3_t = vld3_lane_u32 (0, arg1_uint32x2x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c index 554178a735b..af755635069 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c @@ -16,5 +16,5 @@ void test_vld3_laneu8 (void) out_uint8x8x3_t = vld3_lane_u8 (0, arg1_uint8x8x3_t, 1); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3f32.c b/gcc/testsuite/gcc.target/arm/neon/vld3f32.c index ba18fe0d300..120f834d5b9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3f32.c @@ -15,5 +15,5 @@ void test_vld3f32 (void) out_float32x2x3_t = vld3_f32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3p16.c b/gcc/testsuite/gcc.target/arm/neon/vld3p16.c index 513a3ad77a5..2c47f5e8e56 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3p16.c @@ -15,5 +15,5 @@ void test_vld3p16 (void) out_poly16x4x3_t = vld3_p16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3p8.c b/gcc/testsuite/gcc.target/arm/neon/vld3p8.c index c93984ea7ed..77c2462e2c9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3p8.c @@ -15,5 +15,5 @@ void test_vld3p8 (void) out_poly8x8x3_t = vld3_p8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3s16.c b/gcc/testsuite/gcc.target/arm/neon/vld3s16.c index f9e6212bd40..355ede8c8eb 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3s16.c @@ -15,5 +15,5 @@ void test_vld3s16 (void) out_int16x4x3_t = vld3_s16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3s32.c b/gcc/testsuite/gcc.target/arm/neon/vld3s32.c index cd1256649b2..8d18a8843ce 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3s32.c @@ -15,5 +15,5 @@ void test_vld3s32 (void) out_int32x2x3_t = vld3_s32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3s64.c b/gcc/testsuite/gcc.target/arm/neon/vld3s64.c index 5a62f84ccf8..67bb3568f99 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3s64.c @@ -15,5 +15,5 @@ void test_vld3s64 (void) out_int64x1x3_t = vld3_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3s8.c b/gcc/testsuite/gcc.target/arm/neon/vld3s8.c index b3c3125f933..1be5d11bf86 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3s8.c @@ -15,5 +15,5 @@ void test_vld3s8 (void) out_int8x8x3_t = vld3_s8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3u16.c b/gcc/testsuite/gcc.target/arm/neon/vld3u16.c index 0cd54998658..4db18f04987 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3u16.c @@ -15,5 +15,5 @@ void test_vld3u16 (void) out_uint16x4x3_t = vld3_u16 (0); } -/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3u32.c b/gcc/testsuite/gcc.target/arm/neon/vld3u32.c index bdb66e00080..82c10ff1602 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3u32.c @@ -15,5 +15,5 @@ void test_vld3u32 (void) out_uint32x2x3_t = vld3_u32 (0); } -/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3u64.c b/gcc/testsuite/gcc.target/arm/neon/vld3u64.c index ba9465d4e85..bca1df48f10 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3u64.c @@ -15,5 +15,5 @@ void test_vld3u64 (void) out_uint64x1x3_t = vld3_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld3u8.c b/gcc/testsuite/gcc.target/arm/neon/vld3u8.c index ec6e2a4db46..c8ac20af1a4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld3u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld3u8.c @@ -15,5 +15,5 @@ void test_vld3u8 (void) out_uint8x8x3_t = vld3_u8 (0); } -/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c index 9e596b71bbf..5c2499cdc61 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c @@ -16,5 +16,5 @@ void test_vld4Q_lanef32 (void) out_float32x4x4_t = vld4q_lane_f32 (0, arg1_float32x4x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c index 3ca293a8837..1d2d84e6370 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c @@ -16,5 +16,5 @@ void test_vld4Q_lanep16 (void) out_poly16x8x4_t = vld4q_lane_p16 (0, arg1_poly16x8x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c index f6de5e378e3..df23d281c6b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c @@ -16,5 +16,5 @@ void test_vld4Q_lanes16 (void) out_int16x8x4_t = vld4q_lane_s16 (0, arg1_int16x8x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c index 0c3c0715161..db1daff7b8d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c @@ -16,5 +16,5 @@ void test_vld4Q_lanes32 (void) out_int32x4x4_t = vld4q_lane_s32 (0, arg1_int32x4x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c index 301cf8f24a2..e2da0ea27c4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c @@ -16,5 +16,5 @@ void test_vld4Q_laneu16 (void) out_uint16x8x4_t = vld4q_lane_u16 (0, arg1_uint16x8x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c index 4ff7a9d7b74..d2960ecfc4a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c @@ -16,5 +16,5 @@ void test_vld4Q_laneu32 (void) out_uint32x4x4_t = vld4q_lane_u32 (0, arg1_uint32x4x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c index 2b59415cc9a..0a6e7e6bea4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c @@ -15,6 +15,6 @@ void test_vld4Qf32 (void) out_float32x4x4_t = vld4q_f32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c index 510e0f20cf7..5d902f531dd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c @@ -15,6 +15,6 @@ void test_vld4Qp16 (void) out_poly16x8x4_t = vld4q_p16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c index c89ae63496e..e6d66b048a0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c @@ -15,6 +15,6 @@ void test_vld4Qp8 (void) out_poly8x16x4_t = vld4q_p8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c index 98f42705f8e..04394215d59 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c @@ -15,6 +15,6 @@ void test_vld4Qs16 (void) out_int16x8x4_t = vld4q_s16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c index 16d6133c601..4101fa1bf9d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c @@ -15,6 +15,6 @@ void test_vld4Qs32 (void) out_int32x4x4_t = vld4q_s32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c index 3a4620f7896..9e74f1e4bec 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c @@ -15,6 +15,6 @@ void test_vld4Qs8 (void) out_int8x16x4_t = vld4q_s8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c index 197adf8115e..6b84331f647 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c @@ -15,6 +15,6 @@ void test_vld4Qu16 (void) out_uint16x8x4_t = vld4q_u16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c index 942ccfb743a..55f7e93e928 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c @@ -15,6 +15,6 @@ void test_vld4Qu32 (void) out_uint32x4x4_t = vld4q_u32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c index 93dad160332..9c766c127fe 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c @@ -15,6 +15,6 @@ void test_vld4Qu8 (void) out_uint8x16x4_t = vld4q_u8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c index c7fe78ff6c2..5315db2d176 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c @@ -15,5 +15,5 @@ void test_vld4_dupf32 (void) out_float32x2x4_t = vld4_dup_f32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c index b88a76c2fdf..7ed8224cfcd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c @@ -15,5 +15,5 @@ void test_vld4_dupp16 (void) out_poly16x4x4_t = vld4_dup_p16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c index cc9d17e7097..ca1f8fa9810 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c @@ -15,5 +15,5 @@ void test_vld4_dupp8 (void) out_poly8x8x4_t = vld4_dup_p8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c index c167f01c4ed..43dab8f2e9d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c @@ -15,5 +15,5 @@ void test_vld4_dups16 (void) out_int16x4x4_t = vld4_dup_s16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c index 8279d31b810..183e3e9ef20 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c @@ -15,5 +15,5 @@ void test_vld4_dups32 (void) out_int32x2x4_t = vld4_dup_s32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c index 30b1b2b9a0d..f4c50493a3a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c @@ -15,5 +15,5 @@ void test_vld4_dups64 (void) out_int64x1x4_t = vld4_dup_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c index 1775b524c62..3a4684a0977 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c @@ -15,5 +15,5 @@ void test_vld4_dups8 (void) out_int8x8x4_t = vld4_dup_s8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c index 43571141f0d..a436cf09291 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c @@ -15,5 +15,5 @@ void test_vld4_dupu16 (void) out_uint16x4x4_t = vld4_dup_u16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c index aefcac61be9..6836abd69e0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c @@ -15,5 +15,5 @@ void test_vld4_dupu32 (void) out_uint32x2x4_t = vld4_dup_u32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c index 59f6e04c370..244eb61886f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c @@ -15,5 +15,5 @@ void test_vld4_dupu64 (void) out_uint64x1x4_t = vld4_dup_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c index 7ace026a5cc..33c78751755 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c @@ -15,5 +15,5 @@ void test_vld4_dupu8 (void) out_uint8x8x4_t = vld4_dup_u8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c index 1fd27263070..0fc0ab5fcb9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c @@ -16,5 +16,5 @@ void test_vld4_lanef32 (void) out_float32x2x4_t = vld4_lane_f32 (0, arg1_float32x2x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c index 0f021aff0fc..b7407ade183 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c @@ -16,5 +16,5 @@ void test_vld4_lanep16 (void) out_poly16x4x4_t = vld4_lane_p16 (0, arg1_poly16x4x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c index a6d6a9f6a09..7e084106d67 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c @@ -16,5 +16,5 @@ void test_vld4_lanep8 (void) out_poly8x8x4_t = vld4_lane_p8 (0, arg1_poly8x8x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c index 3b29ec8c9a8..0dc653c5ffb 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c @@ -16,5 +16,5 @@ void test_vld4_lanes16 (void) out_int16x4x4_t = vld4_lane_s16 (0, arg1_int16x4x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c index 86383dbdb07..a3bdaf2349d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c @@ -16,5 +16,5 @@ void test_vld4_lanes32 (void) out_int32x2x4_t = vld4_lane_s32 (0, arg1_int32x2x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c index 80586c3d669..8555220fab5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c @@ -16,5 +16,5 @@ void test_vld4_lanes8 (void) out_int8x8x4_t = vld4_lane_s8 (0, arg1_int8x8x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c index 4425b5e19f1..4a417f744be 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c @@ -16,5 +16,5 @@ void test_vld4_laneu16 (void) out_uint16x4x4_t = vld4_lane_u16 (0, arg1_uint16x4x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c index 09d27220e35..c1e013a9f2e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c @@ -16,5 +16,5 @@ void test_vld4_laneu32 (void) out_uint32x2x4_t = vld4_lane_u32 (0, arg1_uint32x2x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c index 5c1a76f2832..31dcf8ae6d6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c @@ -16,5 +16,5 @@ void test_vld4_laneu8 (void) out_uint8x8x4_t = vld4_lane_u8 (0, arg1_uint8x8x4_t, 1); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4f32.c b/gcc/testsuite/gcc.target/arm/neon/vld4f32.c index e3315813eed..aa755c0f232 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4f32.c @@ -15,5 +15,5 @@ void test_vld4f32 (void) out_float32x2x4_t = vld4_f32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4p16.c b/gcc/testsuite/gcc.target/arm/neon/vld4p16.c index d5b415eca5e..e0300e8b48a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4p16.c @@ -15,5 +15,5 @@ void test_vld4p16 (void) out_poly16x4x4_t = vld4_p16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4p8.c b/gcc/testsuite/gcc.target/arm/neon/vld4p8.c index 785e86a2fac..7fbb29cf3dc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4p8.c @@ -15,5 +15,5 @@ void test_vld4p8 (void) out_poly8x8x4_t = vld4_p8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4s16.c b/gcc/testsuite/gcc.target/arm/neon/vld4s16.c index b725e5d9c50..a5ef07b202f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4s16.c @@ -15,5 +15,5 @@ void test_vld4s16 (void) out_int16x4x4_t = vld4_s16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4s32.c b/gcc/testsuite/gcc.target/arm/neon/vld4s32.c index eaa7b36d58a..08b929475e2 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4s32.c @@ -15,5 +15,5 @@ void test_vld4s32 (void) out_int32x2x4_t = vld4_s32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4s64.c b/gcc/testsuite/gcc.target/arm/neon/vld4s64.c index 3bc5e43f11d..99ea5480374 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4s64.c @@ -15,5 +15,5 @@ void test_vld4s64 (void) out_int64x1x4_t = vld4_s64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4s8.c b/gcc/testsuite/gcc.target/arm/neon/vld4s8.c index 94789dca9c6..c9574671ee8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4s8.c @@ -15,5 +15,5 @@ void test_vld4s8 (void) out_int8x8x4_t = vld4_s8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4u16.c b/gcc/testsuite/gcc.target/arm/neon/vld4u16.c index bd4cef90b57..4dea8af02be 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4u16.c @@ -15,5 +15,5 @@ void test_vld4u16 (void) out_uint16x4x4_t = vld4_u16 (0); } -/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4u32.c b/gcc/testsuite/gcc.target/arm/neon/vld4u32.c index d98f0d4768b..aee2225897d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4u32.c @@ -15,5 +15,5 @@ void test_vld4u32 (void) out_uint32x2x4_t = vld4_u32 (0); } -/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4u64.c b/gcc/testsuite/gcc.target/arm/neon/vld4u64.c index 55418309a85..2e8575406f4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4u64.c @@ -15,5 +15,5 @@ void test_vld4u64 (void) out_uint64x1x4_t = vld4_u64 (0); } -/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vld4u8.c b/gcc/testsuite/gcc.target/arm/neon/vld4u8.c index af2e686e067..ec1d9f9c400 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vld4u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vld4u8.c @@ -15,5 +15,5 @@ void test_vld4u8 (void) out_uint8x8x4_t = vld4_u8 (0); } -/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c index 4b09964191f..1f95128e644 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c @@ -16,5 +16,5 @@ void test_vst1Q_lanef32 (void) vst1q_lane_f32 (arg0_float32_t, arg1_float32x4_t, 1); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c index d619d5fc94d..90e7ccc1bf0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c @@ -16,5 +16,5 @@ void test_vst1Q_lanep16 (void) vst1q_lane_p16 (arg0_poly16_t, arg1_poly16x8_t, 1); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c index 9bc250befe6..6abb646c41a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c @@ -16,5 +16,5 @@ void test_vst1Q_lanep8 (void) vst1q_lane_p8 (arg0_poly8_t, arg1_poly8x16_t, 1); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c index 81281a25d10..ec283e228a7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c @@ -16,5 +16,5 @@ void test_vst1Q_lanes16 (void) vst1q_lane_s16 (arg0_int16_t, arg1_int16x8_t, 1); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c index 43f769e6d74..6e73d6e118f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c @@ -16,5 +16,5 @@ void test_vst1Q_lanes32 (void) vst1q_lane_s32 (arg0_int32_t, arg1_int32x4_t, 1); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c index 7ea5940d445..46d369c99a8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c @@ -16,5 +16,5 @@ void test_vst1Q_lanes64 (void) vst1q_lane_s64 (arg0_int64_t, arg1_int64x2_t, 1); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c index f34faa5e2d6..d7b3a1c12a3 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c @@ -16,5 +16,5 @@ void test_vst1Q_lanes8 (void) vst1q_lane_s8 (arg0_int8_t, arg1_int8x16_t, 1); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c index e90dccf96db..27958f6d07e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c @@ -16,5 +16,5 @@ void test_vst1Q_laneu16 (void) vst1q_lane_u16 (arg0_uint16_t, arg1_uint16x8_t, 1); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c index 42816c0431e..b4aa760e481 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c @@ -16,5 +16,5 @@ void test_vst1Q_laneu32 (void) vst1q_lane_u32 (arg0_uint32_t, arg1_uint32x4_t, 1); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c index 8b87921a169..54faaa3fec0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c @@ -16,5 +16,5 @@ void test_vst1Q_laneu64 (void) vst1q_lane_u64 (arg0_uint64_t, arg1_uint64x2_t, 1); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c index 4eeee81bbe9..9b09e72c2cc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c @@ -16,5 +16,5 @@ void test_vst1Q_laneu8 (void) vst1q_lane_u8 (arg0_uint8_t, arg1_uint8x16_t, 1); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c index bd25c0656ab..a4b3d8a1cdf 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c @@ -16,5 +16,5 @@ void test_vst1Qf32 (void) vst1q_f32 (arg0_float32_t, arg1_float32x4_t); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c index a055bb63a68..9b48733716b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c @@ -16,5 +16,5 @@ void test_vst1Qp16 (void) vst1q_p16 (arg0_poly16_t, arg1_poly16x8_t); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c index fa98e7ab8a7..f3843399e52 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c @@ -16,5 +16,5 @@ void test_vst1Qp8 (void) vst1q_p8 (arg0_poly8_t, arg1_poly8x16_t); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c index 4265f3118c9..e6c39cf35f8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c @@ -16,5 +16,5 @@ void test_vst1Qs16 (void) vst1q_s16 (arg0_int16_t, arg1_int16x8_t); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c index d252f9a348c..587dcf0ecdf 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c @@ -16,5 +16,5 @@ void test_vst1Qs32 (void) vst1q_s32 (arg0_int32_t, arg1_int32x4_t); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c index 01aeebf9825..50511d1ea2f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c @@ -16,5 +16,5 @@ void test_vst1Qs64 (void) vst1q_s64 (arg0_int64_t, arg1_int64x2_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c index 860b8c5f21b..2de9814b070 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c @@ -16,5 +16,5 @@ void test_vst1Qs8 (void) vst1q_s8 (arg0_int8_t, arg1_int8x16_t); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c index 2c3cc222dab..81d8cc5ef96 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c @@ -16,5 +16,5 @@ void test_vst1Qu16 (void) vst1q_u16 (arg0_uint16_t, arg1_uint16x8_t); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c index f67fc1abe4d..408c6b29ea1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c @@ -16,5 +16,5 @@ void test_vst1Qu32 (void) vst1q_u32 (arg0_uint32_t, arg1_uint32x4_t); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c index e0a4d984128..1c17e5b0c1c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c @@ -16,5 +16,5 @@ void test_vst1Qu64 (void) vst1q_u64 (arg0_uint64_t, arg1_uint64x2_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c index ff9c66fc9d2..1605e275680 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c @@ -16,5 +16,5 @@ void test_vst1Qu8 (void) vst1q_u8 (arg0_uint8_t, arg1_uint8x16_t); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c index 57f1106008f..78170314030 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c @@ -16,5 +16,5 @@ void test_vst1_lanef32 (void) vst1_lane_f32 (arg0_float32_t, arg1_float32x2_t, 1); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c index a5fc94fe104..c6a19daf2b0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c @@ -16,5 +16,5 @@ void test_vst1_lanep16 (void) vst1_lane_p16 (arg0_poly16_t, arg1_poly16x4_t, 1); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c index 6a5ca7ea939..1b5dd4f77f4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c @@ -16,5 +16,5 @@ void test_vst1_lanep8 (void) vst1_lane_p8 (arg0_poly8_t, arg1_poly8x8_t, 1); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c index 9e1ee3a7fae..4efdc502497 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c @@ -16,5 +16,5 @@ void test_vst1_lanes16 (void) vst1_lane_s16 (arg0_int16_t, arg1_int16x4_t, 1); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c index 251b8a96808..9c3c1354cb9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c @@ -16,5 +16,5 @@ void test_vst1_lanes32 (void) vst1_lane_s32 (arg0_int32_t, arg1_int32x2_t, 1); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c index fb48c8b62cd..64fed4a1006 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c @@ -16,5 +16,5 @@ void test_vst1_lanes64 (void) vst1_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c index bc932aed417..59646f8a0f4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c @@ -16,5 +16,5 @@ void test_vst1_lanes8 (void) vst1_lane_s8 (arg0_int8_t, arg1_int8x8_t, 1); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c index 0ba3d3838d9..6ae71664723 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c @@ -16,5 +16,5 @@ void test_vst1_laneu16 (void) vst1_lane_u16 (arg0_uint16_t, arg1_uint16x4_t, 1); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c index bf953c4b2d8..369abf7fa35 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c @@ -16,5 +16,5 @@ void test_vst1_laneu32 (void) vst1_lane_u32 (arg0_uint32_t, arg1_uint32x2_t, 1); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c index 4f486d3f190..7296fee8bdd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c @@ -16,5 +16,5 @@ void test_vst1_laneu64 (void) vst1_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c index 144864f788d..ba6076e1f77 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c @@ -16,5 +16,5 @@ void test_vst1_laneu8 (void) vst1_lane_u8 (arg0_uint8_t, arg1_uint8x8_t, 1); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1f32.c b/gcc/testsuite/gcc.target/arm/neon/vst1f32.c index 3690958bcd1..f3460f5e7c2 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1f32.c @@ -16,5 +16,5 @@ void test_vst1f32 (void) vst1_f32 (arg0_float32_t, arg1_float32x2_t); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1p16.c b/gcc/testsuite/gcc.target/arm/neon/vst1p16.c index aa38de11179..7504c5cf8a5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1p16.c @@ -16,5 +16,5 @@ void test_vst1p16 (void) vst1_p16 (arg0_poly16_t, arg1_poly16x4_t); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1p8.c b/gcc/testsuite/gcc.target/arm/neon/vst1p8.c index bfef51d6d54..3059aac60e9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1p8.c @@ -16,5 +16,5 @@ void test_vst1p8 (void) vst1_p8 (arg0_poly8_t, arg1_poly8x8_t); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1s16.c b/gcc/testsuite/gcc.target/arm/neon/vst1s16.c index a5e785d3e36..fbddb2fd79d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1s16.c @@ -16,5 +16,5 @@ void test_vst1s16 (void) vst1_s16 (arg0_int16_t, arg1_int16x4_t); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1s32.c b/gcc/testsuite/gcc.target/arm/neon/vst1s32.c index a0088ae51d4..f264db0363f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1s32.c @@ -16,5 +16,5 @@ void test_vst1s32 (void) vst1_s32 (arg0_int32_t, arg1_int32x2_t); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1s64.c b/gcc/testsuite/gcc.target/arm/neon/vst1s64.c index fc304f92a70..64de48bb013 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1s64.c @@ -16,5 +16,5 @@ void test_vst1s64 (void) vst1_s64 (arg0_int64_t, arg1_int64x1_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1s8.c b/gcc/testsuite/gcc.target/arm/neon/vst1s8.c index b63274004a6..7916448d88b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1s8.c @@ -16,5 +16,5 @@ void test_vst1s8 (void) vst1_s8 (arg0_int8_t, arg1_int8x8_t); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1u16.c b/gcc/testsuite/gcc.target/arm/neon/vst1u16.c index 381a47e89ef..797aef16f86 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1u16.c @@ -16,5 +16,5 @@ void test_vst1u16 (void) vst1_u16 (arg0_uint16_t, arg1_uint16x4_t); } -/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1u32.c b/gcc/testsuite/gcc.target/arm/neon/vst1u32.c index ec73ac68123..563ea9dc391 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1u32.c @@ -16,5 +16,5 @@ void test_vst1u32 (void) vst1_u32 (arg0_uint32_t, arg1_uint32x2_t); } -/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1u64.c b/gcc/testsuite/gcc.target/arm/neon/vst1u64.c index 8cd9a28d81e..b95f5d587a1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1u64.c @@ -16,5 +16,5 @@ void test_vst1u64 (void) vst1_u64 (arg0_uint64_t, arg1_uint64x1_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1u8.c b/gcc/testsuite/gcc.target/arm/neon/vst1u8.c index ff557cee44d..75358e769a1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst1u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst1u8.c @@ -16,5 +16,5 @@ void test_vst1u8 (void) vst1_u8 (arg0_uint8_t, arg1_uint8x8_t); } -/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c index 2d35d1ce4da..4857356321d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c @@ -16,5 +16,5 @@ void test_vst2Q_lanef32 (void) vst2q_lane_f32 (arg0_float32_t, arg1_float32x4x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c index 8a8a84672d3..bed15034c27 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c @@ -16,5 +16,5 @@ void test_vst2Q_lanep16 (void) vst2q_lane_p16 (arg0_poly16_t, arg1_poly16x8x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c index 5b01c0ce709..57867352f13 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c @@ -16,5 +16,5 @@ void test_vst2Q_lanes16 (void) vst2q_lane_s16 (arg0_int16_t, arg1_int16x8x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c index 81e125f20d1..cf0dc15dd46 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c @@ -16,5 +16,5 @@ void test_vst2Q_lanes32 (void) vst2q_lane_s32 (arg0_int32_t, arg1_int32x4x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c index ed4a1e610ad..b751e6b97af 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c @@ -16,5 +16,5 @@ void test_vst2Q_laneu16 (void) vst2q_lane_u16 (arg0_uint16_t, arg1_uint16x8x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c index d2f39ffd1b3..b5fbe0e2814 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c @@ -16,5 +16,5 @@ void test_vst2Q_laneu32 (void) vst2q_lane_u32 (arg0_uint32_t, arg1_uint32x4x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c index 426a19570cb..56f9adcda51 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c @@ -16,6 +16,6 @@ void test_vst2Qf32 (void) vst2q_f32 (arg0_float32_t, arg1_float32x4x2_t); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c index aeae48c0f09..1841990339c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c @@ -16,6 +16,6 @@ void test_vst2Qp16 (void) vst2q_p16 (arg0_poly16_t, arg1_poly16x8x2_t); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c index d18410cb505..2d98ec910e0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c @@ -16,6 +16,6 @@ void test_vst2Qp8 (void) vst2q_p8 (arg0_poly8_t, arg1_poly8x16x2_t); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c index 9fad004eb53..39395f6d021 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c @@ -16,6 +16,6 @@ void test_vst2Qs16 (void) vst2q_s16 (arg0_int16_t, arg1_int16x8x2_t); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c index 6cd063d757e..1768d478682 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c @@ -16,6 +16,6 @@ void test_vst2Qs32 (void) vst2q_s32 (arg0_int32_t, arg1_int32x4x2_t); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c index c09dea2e31b..423cb8c8f72 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c @@ -16,6 +16,6 @@ void test_vst2Qs8 (void) vst2q_s8 (arg0_int8_t, arg1_int8x16x2_t); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c index 6a5cf5635f6..a25958a720a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c @@ -16,6 +16,6 @@ void test_vst2Qu16 (void) vst2q_u16 (arg0_uint16_t, arg1_uint16x8x2_t); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c index 4b4d27fb4b2..47722b3521d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c @@ -16,6 +16,6 @@ void test_vst2Qu32 (void) vst2q_u32 (arg0_uint32_t, arg1_uint32x4x2_t); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c index e1b32e84eff..b794780266a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c @@ -16,6 +16,6 @@ void test_vst2Qu8 (void) vst2q_u8 (arg0_uint8_t, arg1_uint8x16x2_t); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c index 5aa11e799e8..e7752920e79 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c @@ -16,5 +16,5 @@ void test_vst2_lanef32 (void) vst2_lane_f32 (arg0_float32_t, arg1_float32x2x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c index 27fe65056d2..be9913b3960 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c @@ -16,5 +16,5 @@ void test_vst2_lanep16 (void) vst2_lane_p16 (arg0_poly16_t, arg1_poly16x4x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c index b6ee44109cb..0a95e268d67 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c @@ -16,5 +16,5 @@ void test_vst2_lanep8 (void) vst2_lane_p8 (arg0_poly8_t, arg1_poly8x8x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c index 00303752f47..728593ccbae 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c @@ -16,5 +16,5 @@ void test_vst2_lanes16 (void) vst2_lane_s16 (arg0_int16_t, arg1_int16x4x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c index 6f2cf260d1e..32d49b58c6c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c @@ -16,5 +16,5 @@ void test_vst2_lanes32 (void) vst2_lane_s32 (arg0_int32_t, arg1_int32x2x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c index 5e32ccb61c7..9e67eb32343 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c @@ -16,5 +16,5 @@ void test_vst2_lanes8 (void) vst2_lane_s8 (arg0_int8_t, arg1_int8x8x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c index bfdf447b15b..d56f2096151 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c @@ -16,5 +16,5 @@ void test_vst2_laneu16 (void) vst2_lane_u16 (arg0_uint16_t, arg1_uint16x4x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c index 22580003f62..053704cea07 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c @@ -16,5 +16,5 @@ void test_vst2_laneu32 (void) vst2_lane_u32 (arg0_uint32_t, arg1_uint32x2x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c index b10c78abf1c..a35360088b0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c @@ -16,5 +16,5 @@ void test_vst2_laneu8 (void) vst2_lane_u8 (arg0_uint8_t, arg1_uint8x8x2_t, 1); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2f32.c b/gcc/testsuite/gcc.target/arm/neon/vst2f32.c index 45c084f082c..b43c4135ba1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2f32.c @@ -16,5 +16,5 @@ void test_vst2f32 (void) vst2_f32 (arg0_float32_t, arg1_float32x2x2_t); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2p16.c b/gcc/testsuite/gcc.target/arm/neon/vst2p16.c index 9f29ddf26de..1d112ff658b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2p16.c @@ -16,5 +16,5 @@ void test_vst2p16 (void) vst2_p16 (arg0_poly16_t, arg1_poly16x4x2_t); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2p8.c b/gcc/testsuite/gcc.target/arm/neon/vst2p8.c index 92ae9c40a85..59c4d62e349 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2p8.c @@ -16,5 +16,5 @@ void test_vst2p8 (void) vst2_p8 (arg0_poly8_t, arg1_poly8x8x2_t); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2s16.c b/gcc/testsuite/gcc.target/arm/neon/vst2s16.c index 30b6a2b0433..eb6cb59a40d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2s16.c @@ -16,5 +16,5 @@ void test_vst2s16 (void) vst2_s16 (arg0_int16_t, arg1_int16x4x2_t); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2s32.c b/gcc/testsuite/gcc.target/arm/neon/vst2s32.c index 208e2586b8a..a17b58dc474 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2s32.c @@ -16,5 +16,5 @@ void test_vst2s32 (void) vst2_s32 (arg0_int32_t, arg1_int32x2x2_t); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2s64.c b/gcc/testsuite/gcc.target/arm/neon/vst2s64.c index 4cc53b46797..668ae50a434 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2s64.c @@ -16,5 +16,5 @@ void test_vst2s64 (void) vst2_s64 (arg0_int64_t, arg1_int64x1x2_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2s8.c b/gcc/testsuite/gcc.target/arm/neon/vst2s8.c index e56b49341fa..343414e34d2 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2s8.c @@ -16,5 +16,5 @@ void test_vst2s8 (void) vst2_s8 (arg0_int8_t, arg1_int8x8x2_t); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2u16.c b/gcc/testsuite/gcc.target/arm/neon/vst2u16.c index 7d8d83ec537..903279d0dc4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2u16.c @@ -16,5 +16,5 @@ void test_vst2u16 (void) vst2_u16 (arg0_uint16_t, arg1_uint16x4x2_t); } -/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2u32.c b/gcc/testsuite/gcc.target/arm/neon/vst2u32.c index dafab12ca57..1396ed119ef 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2u32.c @@ -16,5 +16,5 @@ void test_vst2u32 (void) vst2_u32 (arg0_uint32_t, arg1_uint32x2x2_t); } -/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2u64.c b/gcc/testsuite/gcc.target/arm/neon/vst2u64.c index 64f433b18e2..006e31f257e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2u64.c @@ -16,5 +16,5 @@ void test_vst2u64 (void) vst2_u64 (arg0_uint64_t, arg1_uint64x1x2_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst2u8.c b/gcc/testsuite/gcc.target/arm/neon/vst2u8.c index 1b1b6e26602..55cd3477993 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst2u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst2u8.c @@ -16,5 +16,5 @@ void test_vst2u8 (void) vst2_u8 (arg0_uint8_t, arg1_uint8x8x2_t); } -/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c index 334bc26adc8..8e4f0dca93d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c @@ -16,5 +16,5 @@ void test_vst3Q_lanef32 (void) vst3q_lane_f32 (arg0_float32_t, arg1_float32x4x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c index c108bac1db4..f8fcb977f53 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c @@ -16,5 +16,5 @@ void test_vst3Q_lanep16 (void) vst3q_lane_p16 (arg0_poly16_t, arg1_poly16x8x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c index c32ffb6fca1..3fde1a3afc7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c @@ -16,5 +16,5 @@ void test_vst3Q_lanes16 (void) vst3q_lane_s16 (arg0_int16_t, arg1_int16x8x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c index faafb9333c8..1eb428922e4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c @@ -16,5 +16,5 @@ void test_vst3Q_lanes32 (void) vst3q_lane_s32 (arg0_int32_t, arg1_int32x4x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c index f3fc1c60d9b..ca98dded6fa 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c @@ -16,5 +16,5 @@ void test_vst3Q_laneu16 (void) vst3q_lane_u16 (arg0_uint16_t, arg1_uint16x8x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c index e11f4a395e6..a2a59d7a789 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c @@ -16,5 +16,5 @@ void test_vst3Q_laneu32 (void) vst3q_lane_u32 (arg0_uint32_t, arg1_uint32x4x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c index 61dc577d7b4..b4b480fb78d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c @@ -16,6 +16,6 @@ void test_vst3Qf32 (void) vst3q_f32 (arg0_float32_t, arg1_float32x4x3_t); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c index 87d76964272..aa34886f97b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c @@ -16,6 +16,6 @@ void test_vst3Qp16 (void) vst3q_p16 (arg0_poly16_t, arg1_poly16x8x3_t); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c index 0681c9a47f2..b13fcd7e288 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c @@ -16,6 +16,6 @@ void test_vst3Qp8 (void) vst3q_p8 (arg0_poly8_t, arg1_poly8x16x3_t); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c index e9b86407519..6cac405f05d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c @@ -16,6 +16,6 @@ void test_vst3Qs16 (void) vst3q_s16 (arg0_int16_t, arg1_int16x8x3_t); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c index 2ec2ef0b7c4..3c8437094fd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c @@ -16,6 +16,6 @@ void test_vst3Qs32 (void) vst3q_s32 (arg0_int32_t, arg1_int32x4x3_t); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c index d6362573a8b..fee56af4244 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c @@ -16,6 +16,6 @@ void test_vst3Qs8 (void) vst3q_s8 (arg0_int8_t, arg1_int8x16x3_t); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c index f10c69f4d6a..af3910b7f44 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c @@ -16,6 +16,6 @@ void test_vst3Qu16 (void) vst3q_u16 (arg0_uint16_t, arg1_uint16x8x3_t); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c index 08820891e6e..8828885aff8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c @@ -16,6 +16,6 @@ void test_vst3Qu32 (void) vst3q_u32 (arg0_uint32_t, arg1_uint32x4x3_t); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c index 919a1cbbb00..c273fe6dc98 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c @@ -16,6 +16,6 @@ void test_vst3Qu8 (void) vst3q_u8 (arg0_uint8_t, arg1_uint8x16x3_t); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c index d527c7803a6..de654e90788 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c @@ -16,5 +16,5 @@ void test_vst3_lanef32 (void) vst3_lane_f32 (arg0_float32_t, arg1_float32x2x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c index 491f8eb399b..de733ff676a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c @@ -16,5 +16,5 @@ void test_vst3_lanep16 (void) vst3_lane_p16 (arg0_poly16_t, arg1_poly16x4x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c index 0546c3ab57c..a9a26447f94 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c @@ -16,5 +16,5 @@ void test_vst3_lanep8 (void) vst3_lane_p8 (arg0_poly8_t, arg1_poly8x8x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c index 48257891956..a98b40714d8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c @@ -16,5 +16,5 @@ void test_vst3_lanes16 (void) vst3_lane_s16 (arg0_int16_t, arg1_int16x4x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c index 51da4144d78..5b2450c6756 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c @@ -16,5 +16,5 @@ void test_vst3_lanes32 (void) vst3_lane_s32 (arg0_int32_t, arg1_int32x2x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c index b75f2109ba1..8cd04f71649 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c @@ -16,5 +16,5 @@ void test_vst3_lanes8 (void) vst3_lane_s8 (arg0_int8_t, arg1_int8x8x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c index 9686054976b..692058d9110 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c @@ -16,5 +16,5 @@ void test_vst3_laneu16 (void) vst3_lane_u16 (arg0_uint16_t, arg1_uint16x4x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c index da1af40523b..32a5193a351 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c @@ -16,5 +16,5 @@ void test_vst3_laneu32 (void) vst3_lane_u32 (arg0_uint32_t, arg1_uint32x2x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c index 47eccc0dffa..952ffcbec03 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c @@ -16,5 +16,5 @@ void test_vst3_laneu8 (void) vst3_lane_u8 (arg0_uint8_t, arg1_uint8x8x3_t, 1); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3f32.c b/gcc/testsuite/gcc.target/arm/neon/vst3f32.c index ac871786a9c..e80b8e91622 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3f32.c @@ -16,5 +16,5 @@ void test_vst3f32 (void) vst3_f32 (arg0_float32_t, arg1_float32x2x3_t); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3p16.c b/gcc/testsuite/gcc.target/arm/neon/vst3p16.c index 08a861b9f41..1d7831264ef 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3p16.c @@ -16,5 +16,5 @@ void test_vst3p16 (void) vst3_p16 (arg0_poly16_t, arg1_poly16x4x3_t); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3p8.c b/gcc/testsuite/gcc.target/arm/neon/vst3p8.c index d357fdfadf8..ca8c5ec439d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3p8.c @@ -16,5 +16,5 @@ void test_vst3p8 (void) vst3_p8 (arg0_poly8_t, arg1_poly8x8x3_t); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3s16.c b/gcc/testsuite/gcc.target/arm/neon/vst3s16.c index 4fc940e691a..5c1bcf9dedd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3s16.c @@ -16,5 +16,5 @@ void test_vst3s16 (void) vst3_s16 (arg0_int16_t, arg1_int16x4x3_t); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3s32.c b/gcc/testsuite/gcc.target/arm/neon/vst3s32.c index 82b4cfa6a71..3f5a3aad149 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3s32.c @@ -16,5 +16,5 @@ void test_vst3s32 (void) vst3_s32 (arg0_int32_t, arg1_int32x2x3_t); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3s64.c b/gcc/testsuite/gcc.target/arm/neon/vst3s64.c index a8e86d2368f..8c6a851db94 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3s64.c @@ -16,5 +16,5 @@ void test_vst3s64 (void) vst3_s64 (arg0_int64_t, arg1_int64x1x3_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3s8.c b/gcc/testsuite/gcc.target/arm/neon/vst3s8.c index 563534db21c..8853fbaf510 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3s8.c @@ -16,5 +16,5 @@ void test_vst3s8 (void) vst3_s8 (arg0_int8_t, arg1_int8x8x3_t); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3u16.c b/gcc/testsuite/gcc.target/arm/neon/vst3u16.c index 679d7b833eb..e17c6c8d68a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3u16.c @@ -16,5 +16,5 @@ void test_vst3u16 (void) vst3_u16 (arg0_uint16_t, arg1_uint16x4x3_t); } -/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3u32.c b/gcc/testsuite/gcc.target/arm/neon/vst3u32.c index 8705c5eb640..3b7d8ce20b9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3u32.c @@ -16,5 +16,5 @@ void test_vst3u32 (void) vst3_u32 (arg0_uint32_t, arg1_uint32x2x3_t); } -/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3u64.c b/gcc/testsuite/gcc.target/arm/neon/vst3u64.c index 4b15e68b324..08d9c7a0841 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3u64.c @@ -16,5 +16,5 @@ void test_vst3u64 (void) vst3_u64 (arg0_uint64_t, arg1_uint64x1x3_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst3u8.c b/gcc/testsuite/gcc.target/arm/neon/vst3u8.c index 0e31b3b3ab1..78944cba084 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst3u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst3u8.c @@ -16,5 +16,5 @@ void test_vst3u8 (void) vst3_u8 (arg0_uint8_t, arg1_uint8x8x3_t); } -/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c index cb2de05bb4b..adbb4d56992 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c @@ -16,5 +16,5 @@ void test_vst4Q_lanef32 (void) vst4q_lane_f32 (arg0_float32_t, arg1_float32x4x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c index 3d0f81d0c7d..587477c87fd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c @@ -16,5 +16,5 @@ void test_vst4Q_lanep16 (void) vst4q_lane_p16 (arg0_poly16_t, arg1_poly16x8x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c index 6e174a0c9d6..3febdf7d864 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c @@ -16,5 +16,5 @@ void test_vst4Q_lanes16 (void) vst4q_lane_s16 (arg0_int16_t, arg1_int16x8x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c index 323626c9252..71406af83b8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c @@ -16,5 +16,5 @@ void test_vst4Q_lanes32 (void) vst4q_lane_s32 (arg0_int32_t, arg1_int32x4x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c index 5a396ac3e2e..1229c86a3f1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c @@ -16,5 +16,5 @@ void test_vst4Q_laneu16 (void) vst4q_lane_u16 (arg0_uint16_t, arg1_uint16x8x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c index 4c3dd6a85d2..5e0683f30ed 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c @@ -16,5 +16,5 @@ void test_vst4Q_laneu32 (void) vst4q_lane_u32 (arg0_uint32_t, arg1_uint32x4x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c index 4da79bff128..2ecb6b173ad 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c @@ -16,6 +16,6 @@ void test_vst4Qf32 (void) vst4q_f32 (arg0_float32_t, arg1_float32x4x4_t); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c index 4892d6df4ea..a9b9b7ca95d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c @@ -16,6 +16,6 @@ void test_vst4Qp16 (void) vst4q_p16 (arg0_poly16_t, arg1_poly16x8x4_t); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c index 3d51e971373..17142c1a066 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c @@ -16,6 +16,6 @@ void test_vst4Qp8 (void) vst4q_p8 (arg0_poly8_t, arg1_poly8x16x4_t); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c index 9fccc6a6226..8511619fe3c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c @@ -16,6 +16,6 @@ void test_vst4Qs16 (void) vst4q_s16 (arg0_int16_t, arg1_int16x8x4_t); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c index faa1db202a5..f65894eabe5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c @@ -16,6 +16,6 @@ void test_vst4Qs32 (void) vst4q_s32 (arg0_int32_t, arg1_int32x4x4_t); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c index c68fc821dc9..a74d58b5f10 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c @@ -16,6 +16,6 @@ void test_vst4Qs8 (void) vst4q_s8 (arg0_int8_t, arg1_int8x16x4_t); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c index 98f9b094d32..b124c7cc99a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c @@ -16,6 +16,6 @@ void test_vst4Qu16 (void) vst4q_u16 (arg0_uint16_t, arg1_uint16x8x4_t); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c index c9bfd05f235..fa7d2130db8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c @@ -16,6 +16,6 @@ void test_vst4Qu32 (void) vst4q_u32 (arg0_uint32_t, arg1_uint32x4x4_t); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c b/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c index 8b86161fa84..d853b12bd19 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c @@ -16,6 +16,6 @@ void test_vst4Qu8 (void) vst4q_u8 (arg0_uint8_t, arg1_uint8x16x4_t); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c b/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c index 4bdde6ea5fe..acef9f0a310 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c @@ -16,5 +16,5 @@ void test_vst4_lanef32 (void) vst4_lane_f32 (arg0_float32_t, arg1_float32x2x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c b/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c index c9889b382b0..64e4713ff09 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c @@ -16,5 +16,5 @@ void test_vst4_lanep16 (void) vst4_lane_p16 (arg0_poly16_t, arg1_poly16x4x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c b/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c index 3d8ef6e4f02..1ac58df28fc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c @@ -16,5 +16,5 @@ void test_vst4_lanep8 (void) vst4_lane_p8 (arg0_poly8_t, arg1_poly8x8x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c b/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c index 255b4b9b799..e7e1e2aeadc 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c @@ -16,5 +16,5 @@ void test_vst4_lanes16 (void) vst4_lane_s16 (arg0_int16_t, arg1_int16x4x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c b/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c index fc5217381a6..2c99611a868 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c @@ -16,5 +16,5 @@ void test_vst4_lanes32 (void) vst4_lane_s32 (arg0_int32_t, arg1_int32x2x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c b/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c index e9dec5d88c2..7eebc1644e3 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c @@ -16,5 +16,5 @@ void test_vst4_lanes8 (void) vst4_lane_s8 (arg0_int8_t, arg1_int8x8x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c b/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c index ee513a6409e..decc7caf228 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c @@ -16,5 +16,5 @@ void test_vst4_laneu16 (void) vst4_lane_u16 (arg0_uint16_t, arg1_uint16x4x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c b/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c index 516d04c8840..4cfeddbbbbe 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c @@ -16,5 +16,5 @@ void test_vst4_laneu32 (void) vst4_lane_u32 (arg0_uint32_t, arg1_uint32x2x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c b/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c index 531c2b97494..217ced27a96 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c @@ -16,5 +16,5 @@ void test_vst4_laneu8 (void) vst4_lane_u8 (arg0_uint8_t, arg1_uint8x8x4_t, 1); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4f32.c b/gcc/testsuite/gcc.target/arm/neon/vst4f32.c index e3268f9b8ee..931b8ed1571 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4f32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4f32.c @@ -16,5 +16,5 @@ void test_vst4f32 (void) vst4_f32 (arg0_float32_t, arg1_float32x2x4_t); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4p16.c b/gcc/testsuite/gcc.target/arm/neon/vst4p16.c index 67f32f29699..ea58c44fd3f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4p16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4p16.c @@ -16,5 +16,5 @@ void test_vst4p16 (void) vst4_p16 (arg0_poly16_t, arg1_poly16x4x4_t); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4p8.c b/gcc/testsuite/gcc.target/arm/neon/vst4p8.c index 2ed766a8db3..95e5ccdf134 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4p8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4p8.c @@ -16,5 +16,5 @@ void test_vst4p8 (void) vst4_p8 (arg0_poly8_t, arg1_poly8x8x4_t); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4s16.c b/gcc/testsuite/gcc.target/arm/neon/vst4s16.c index 94794662dd6..7811d74c138 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4s16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4s16.c @@ -16,5 +16,5 @@ void test_vst4s16 (void) vst4_s16 (arg0_int16_t, arg1_int16x4x4_t); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4s32.c b/gcc/testsuite/gcc.target/arm/neon/vst4s32.c index 8d22a040617..f93ea4097e5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4s32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4s32.c @@ -16,5 +16,5 @@ void test_vst4s32 (void) vst4_s32 (arg0_int32_t, arg1_int32x2x4_t); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4s64.c b/gcc/testsuite/gcc.target/arm/neon/vst4s64.c index c9dffec77ef..796762a3e89 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4s64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4s64.c @@ -16,5 +16,5 @@ void test_vst4s64 (void) vst4_s64 (arg0_int64_t, arg1_int64x1x4_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4s8.c b/gcc/testsuite/gcc.target/arm/neon/vst4s8.c index 0dbdfc0476f..877e2c4077e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4s8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4s8.c @@ -16,5 +16,5 @@ void test_vst4s8 (void) vst4_s8 (arg0_int8_t, arg1_int8x8x4_t); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4u16.c b/gcc/testsuite/gcc.target/arm/neon/vst4u16.c index 4eddaf6d643..5de43f591ab 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4u16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4u16.c @@ -16,5 +16,5 @@ void test_vst4u16 (void) vst4_u16 (arg0_uint16_t, arg1_uint16x4x4_t); } -/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4u32.c b/gcc/testsuite/gcc.target/arm/neon/vst4u32.c index 06a5d33cbab..1ae9e5e6006 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4u32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4u32.c @@ -16,5 +16,5 @@ void test_vst4u32 (void) vst4_u32 (arg0_uint32_t, arg1_uint32x2x4_t); } -/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4u64.c b/gcc/testsuite/gcc.target/arm/neon/vst4u64.c index 063a046afcc..2453d6bd512 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4u64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4u64.c @@ -16,5 +16,5 @@ void test_vst4u64 (void) vst4_u64 (arg0_uint64_t, arg1_uint64x1x4_t); } -/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vst4u8.c b/gcc/testsuite/gcc.target/arm/neon/vst4u8.c index d4da67b9294..380acc647f3 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vst4u8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vst4u8.c @@ -16,5 +16,5 @@ void test_vst4u8 (void) vst4_u8 (arg0_uint8_t, arg1_uint8x8x4_t); } -/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr43698.c b/gcc/testsuite/gcc.target/arm/pr43698.c index 407cf7eac2c..1fc497c22c2 100644 --- a/gcc/testsuite/gcc.target/arm/pr43698.c +++ b/gcc/testsuite/gcc.target/arm/pr43698.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-Os -march=armv7-a" } */ +/* { dg-options "-Os" } */ #include <stdint.h> #include <stdlib.h> diff --git a/gcc/testsuite/gcc.target/arm/pr43920-1.c b/gcc/testsuite/gcc.target/arm/pr43920-1.c new file mode 100644 index 00000000000..d673f1e88b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr43920-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-mthumb -Os" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ + +int +f (int start, int end, int *start_) +{ + if (start == -1 || end == -1) + return -1; + + if (end - start) + return -1; + + *start_ = start; + + return 0; +} + +/* { dg-final { scan-assembler-times "\torr" 0 } } */ +/* { dg-final { scan-assembler-times "\tit\t" 0 } } */ +/* { dg-final { scan-assembler "\tbeq" } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr43920-2.c b/gcc/testsuite/gcc.target/arm/pr43920-2.c new file mode 100644 index 00000000000..f647165bd63 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr43920-2.c @@ -0,0 +1,30 @@ +/* { dg-do assemble } */ +/* { dg-options "-mthumb -Os -save-temps" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ + +#include <stdio.h> + +int getFileStartAndLength (int fd, int *start_, size_t *length_) +{ + int start, end; + size_t length; + + start = lseek (fd, 0L, SEEK_CUR); + end = lseek (fd, 0L, SEEK_END); + + if (start == -1 || end == -1) + return -1; + + length = end - start; + if (length == 0) + return -1; + + *start_ = start; + *length_ = length; + + return 0; +} + +/* { dg-final { scan-assembler-times "pop" 2 } } */ +/* { dg-final { scan-assembler-times "beq" 3 } } */ +/* { dg-final { object-size text <= 54 } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr46329.c b/gcc/testsuite/gcc.target/arm/pr46329.c new file mode 100644 index 00000000000..9dd939c7f93 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr46329.c @@ -0,0 +1,9 @@ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_neon } */ + +int __attribute__ ((vector_size (32))) x; +void +foo (void) +{ + x <<= x; +} diff --git a/gcc/testsuite/gcc.target/arm/pr46788.c b/gcc/testsuite/gcc.target/arm/pr46788.c new file mode 100644 index 00000000000..2236769461a --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr46788.c @@ -0,0 +1,26 @@ +/* { dg-options "-mthumb -O2" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-final { scan-assembler-not "-32768" } } */ + +typedef union +{ + unsigned long int u_32_value; + struct + { + unsigned short int u_16_value_0; + unsigned short int u_16_value_1; + } u_16_values; +} my_union; + + +unsigned long int Test(const unsigned short int wXe) +{ + my_union dwCalcVal; + + dwCalcVal.u_16_values.u_16_value_0=wXe; + dwCalcVal.u_16_values.u_16_value_1=0x8000u; + + dwCalcVal.u_32_value /=3; + + return (dwCalcVal.u_32_value); +} diff --git a/gcc/testsuite/gcc.target/arm/pr46934.c b/gcc/testsuite/gcc.target/arm/pr46934.c new file mode 100644 index 00000000000..22b8aa83846 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr46934.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-march=armv5te -mthumb -Os" } */ +/* { dg-require-effective-target arm_thumb1_ok } */ + +int caller (unsigned int reg_type) +{ + switch (reg_type) + { + case 0x80000000: + return (int)foo(); + + case 0x80000003: + return (int) bar(); + + case 0x80000001: + return (int) baz(); + + case 0x80000004: + return (int) fooz(); + } +} diff --git a/gcc/testsuite/gcc.target/arm/pr48252.c b/gcc/testsuite/gcc.target/arm/pr48252.c new file mode 100644 index 00000000000..1a06c71e1be --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr48252.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_neon_hw } */ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" +#include <stdlib.h> + +int main(void) +{ + uint8x8_t v1 = {1, 1, 1, 1, 1, 1, 1, 1}; + uint8x8_t v2 = {2, 2, 2, 2, 2, 2, 2, 2}; + uint8x8x2_t vd1, vd2; + union {uint8x8_t v; uint8_t buf[8];} d1, d2, d3, d4; + int i; + + vd1 = vzip_u8(v1, vdup_n_u8(0)); + vd2 = vzip_u8(v2, vdup_n_u8(0)); + + vst1_u8(d1.buf, vd1.val[0]); + vst1_u8(d2.buf, vd1.val[1]); + vst1_u8(d3.buf, vd2.val[0]); + vst1_u8(d4.buf, vd2.val[1]); + + for (i = 0; i < 8; i++) + if ((i % 2 == 0 && d4.buf[i] != 2) + || (i % 2 == 1 && d4.buf[i] != 0)) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/arm/sync-1.c b/gcc/testsuite/gcc.target/arm/sync-1.c index ad85a04b398..d1b64810518 100644 --- a/gcc/testsuite/gcc.target/arm/sync-1.c +++ b/gcc/testsuite/gcc.target/arm/sync-1.c @@ -1,5 +1,6 @@ -/* { dg-do run } */ -/* { dg-options "-O2 -march=armv7-a" } */ + +/* { dg-do run { target sync_int_long } } */ +/* { dg-options "-O2" } */ volatile int mem; diff --git a/gcc/testsuite/gcc.target/arm/unsigned-extend-1.c b/gcc/testsuite/gcc.target/arm/unsigned-extend-1.c new file mode 100644 index 00000000000..6c55561df95 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/unsigned-extend-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv6" } */ + +unsigned char foo (unsigned char c) +{ + return (c >= '0') && (c <= '9'); +} + +/* { dg-final { scan-assembler-not "uxtb" } } */ diff --git a/gcc/testsuite/gcc.target/arm/xor-and.c b/gcc/testsuite/gcc.target/arm/xor-and.c new file mode 100644 index 00000000000..4b0f79013fc --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/xor-and.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O -march=armv6" } */ + +unsigned short foo (unsigned short x) +{ + x ^= 0x4002; + x >>= 1; + x |= 0x8000; + return x; +} + +/* { dg-final { scan-assembler "orr" } } */ +/* { dg-final { scan-assembler-not "mvn" } } */ +/* { dg-final { scan-assembler-not "uxth" } } */ diff --git a/gcc/testsuite/gcc.target/avr/pr46779-1.c b/gcc/testsuite/gcc.target/avr/pr46779-1.c new file mode 100644 index 00000000000..24522f175be --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr46779-1.c @@ -0,0 +1,51 @@ +/* { dg-do run } */ +/* { dg-options "-Os -fsplit-wide-types" } */ + +/* This testcase should uncover bugs like + PR46779 + PR45291 + PR41894 + + The inline asm just serves to direct y into the Y register. + Otherwise, it is hard to write a "stable" test case that + also fails with slight variations in source code, middle- resp. + backend. + + The problem is that Y is also the frame-pointer, and + avr.c:avr_hard_regno_mode_ok disallows QI to get in Y-reg. + However, the y.a = 0 generates a + (set (subreg:QI (reg:HI pseudo)) ...) + where pseudo gets allocated to Y. + + Reload fails to generate the right spill. +*/ + +#include <stdlib.h> + +struct S +{ + unsigned char a, b; +} ab = {12, 34}; + +void yoo (struct S y) +{ + __asm volatile ("ldi %B0, 56" : "+y" (y)); + y.a = 0; + __asm volatile ("; y = %0" : "+y" (y)); + ab = y; +} + +int main () +{ + yoo (ab); + + if (ab.a != 0) + abort(); + + if (ab.b != 56) + abort(); + + exit (0); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/avr/pr46779-2.c b/gcc/testsuite/gcc.target/avr/pr46779-2.c new file mode 100644 index 00000000000..682070b5ef9 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr46779-2.c @@ -0,0 +1,51 @@ +/* { dg-do run } */ +/* { dg-options "-Os -fno-split-wide-types" } */ + +/* This testcase should uncover bugs like + PR46779 + PR45291 + PR41894 + + The inline asm just serves to direct y into the Y register. + Otherwise, it is hard to write a "stable" test case that + also fails with slight variations in source code, middle- resp. + backend. + + The problem is that Y is also the frame-pointer, and + avr.c:avr_hard_regno_mode_ok disallows QI to get in Y-reg. + However, the y.a = 0 generates a + (set (subreg:QI (reg:HI pseudo)) ...) + where pseudo gets allocated to Y. + + Reload fails to generate the right spill. +*/ + +#include <stdlib.h> + +struct S +{ + unsigned char a, b; +} ab = {12, 34}; + +void yoo (struct S y) +{ + __asm volatile ("ldi %B0, 56" : "+y" (y)); + y.a = 0; + __asm volatile ("; y = %0" : "+y" (y)); + ab = y; +} + +int main () +{ + yoo (ab); + + if (ab.a != 0) + abort(); + + if (ab.b != 56) + abort(); + + exit (0); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/avr/torture/pr41885.c b/gcc/testsuite/gcc.target/avr/torture/pr41885.c index 90d00121255..f46bc5a7588 100644 --- a/gcc/testsuite/gcc.target/avr/torture/pr41885.c +++ b/gcc/testsuite/gcc.target/avr/torture/pr41885.c @@ -1,4 +1,4 @@ -/* { dg-options "-w -std=c99" } */ +/* { dg-options "-w -std=c99 -fno-inline" } */ /* { dg-do run } */ #include <limits.h> diff --git a/gcc/testsuite/gcc.target/avr/torture/trivial.c b/gcc/testsuite/gcc.target/avr/torture/trivial.c index 91163f9226e..f1beecb1ece 100644 --- a/gcc/testsuite/gcc.target/avr/torture/trivial.c +++ b/gcc/testsuite/gcc.target/avr/torture/trivial.c @@ -1,14 +1,15 @@ -/* { dg-do run } */
-#include <stdio.h>
-
-#define __ATTR_PROGMEM__ __attribute__((__progmem__))
-
-#define PROGMEM __ATTR_PROGMEM__
-char PROGMEM a1 = 0x12;
-int PROGMEM a2 = 0x2345;
-long PROGMEM a3 = 0x12345678;
-int main(void)
-{
- printf("Hello World\n");
- return 0;
-}
+/* { dg-do run } */ + +#include <stdio.h> + +#define PROGMEM __attribute__((__progmem__)) + +const char PROGMEM a1 = 0x12; +const int PROGMEM a2 = 0x2345; +const long PROGMEM a3 = 0x12345678; + +int main(void) +{ + printf ("Hello World\n"); + return 0; +} diff --git a/gcc/testsuite/gcc.target/avr/trivial.c b/gcc/testsuite/gcc.target/avr/trivial.c index 91163f9226e..f1beecb1ece 100644 --- a/gcc/testsuite/gcc.target/avr/trivial.c +++ b/gcc/testsuite/gcc.target/avr/trivial.c @@ -1,14 +1,15 @@ -/* { dg-do run } */
-#include <stdio.h>
-
-#define __ATTR_PROGMEM__ __attribute__((__progmem__))
-
-#define PROGMEM __ATTR_PROGMEM__
-char PROGMEM a1 = 0x12;
-int PROGMEM a2 = 0x2345;
-long PROGMEM a3 = 0x12345678;
-int main(void)
-{
- printf("Hello World\n");
- return 0;
-}
+/* { dg-do run } */ + +#include <stdio.h> + +#define PROGMEM __attribute__((__progmem__)) + +const char PROGMEM a1 = 0x12; +const int PROGMEM a2 = 0x2345; +const long PROGMEM a3 = 0x12345678; + +int main(void) +{ + printf ("Hello World\n"); + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c new file mode 100644 index 00000000000..9ca524d29f9 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_abs_fr1x16 (0x7777); + if (t1 != 0x7777) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c new file mode 100644 index 00000000000..00ef1dc1699 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_abs_fr1x16 (0x8000); + if (t1 != 0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c new file mode 100644 index 00000000000..a464c02d58a --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_abs_fr1x32 (0x77777777); + if (t != 0x77777777) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c new file mode 100644 index 00000000000..9d642b1231f --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_abs_fr1x32 (0x80000000); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c new file mode 100644 index 00000000000..86badedce1f --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + + t = __builtin_bfin_abs_fr2x16 (a); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x5fff || t2 != 0x1) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c new file mode 100644 index 00000000000..80844bdaf69 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_abs_fr2x16 (a); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x1001 || t2 != 0x0001) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c new file mode 100644 index 00000000000..bd8f46d838d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c @@ -0,0 +1,14 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_add_fr1x16 (0x3000, 0x2000); + if (t1 != 0x5000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c new file mode 100644 index 00000000000..1054e95aa46 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c @@ -0,0 +1,14 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_add_fr1x16 (0x3000, 0xd000); + if (t1 != 0x0) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c new file mode 100644 index 00000000000..a14ad688dd4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_add_fr1x32 (0x40003000, 0x50002000); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c new file mode 100644 index 00000000000..2345cb09e96 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_add_fr1x32 (0x40003000, 0xc000d000); + if (t != 0x00010000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c new file mode 100644 index 00000000000..69736978bcc --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + b = __builtin_bfin_compose_2x16 (0x8000, 0x5000); + + t = __builtin_bfin_add_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffc000 || t2 != 0x7000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c new file mode 100644 index 00000000000..f7a309b8c9c --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x7000, 0xc000); + b = __builtin_bfin_compose_2x16 (0x8000, 0xc000); + + t = __builtin_bfin_add_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffff000 || t2 != 0xffff8000) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp b/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp new file mode 100644 index 00000000000..645460e03c6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp @@ -0,0 +1,39 @@ +# Copyright (C) 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# GCC testsuite that uses the `c-torture.exp' driver, looping over +# optimization options. + +load_lib c-torture.exp +load_lib target-supports.exp +load_lib torture-options.exp + +if { ![istarget bfin-*-*] } then { + return +} + + +torture-init +set-torture-options [list {} -Os -O0 -O1 -O2 -O3 {-ffast-math -mfast-fp -O2} {-mfast-fp -O2} {-ffast-math -O2}] +set additional_flags "-W -Wall" + +foreach src [lsort [find $srcdir/$subdir *.c]] { + if {[runtest_file_p $runtests $src]} { + c-torture-execute [list $src] $additional_flags + } +} + +torture-finish diff --git a/gcc/testsuite/gcc.target/bfin/builtins/circptr.c b/gcc/testsuite/gcc.target/bfin/builtins/circptr.c new file mode 100644 index 00000000000..8419aa680cc --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/circptr.c @@ -0,0 +1,29 @@ +#include <stdlib.h> + +int t[] = { 1, 2, 3, 4, 5, 6, 7 }; +int expect[] = { 1, 3, 6, 10, 15, 21, 28, 29, 31, 34, 38, 43, 49, 56 }; + +int foo (int n) +{ + int *p = t; + int sum = 0; + int i; + for (i = 0; i < n; i++) { + sum += *p; + p = __builtin_bfin_circptr (p, sizeof *p, t, sizeof t); + } + return sum; +} + +int main () +{ + int i; + int *p = expect; + for (i = 0; i < 14; i++) { + int sum = foo (i + 1); + if (sum != *p) + abort (); + p = __builtin_bfin_circptr (p, sizeof *p, expect, sizeof expect); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c new file mode 100644 index 00000000000..17344bf06e0 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, c, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + b = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + c = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + + t = __builtin_bfin_cmplx_mac (a, b, c); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x2800 || t2 != 0x0a00) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c new file mode 100644 index 00000000000..99471165195 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, c, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + b = __builtin_bfin_compose_2x16 (0xb000, 0xe000); + c = __builtin_bfin_compose_2x16 (0xa000, 0x8000); + + t = __builtin_bfin_cmplx_mac (a, b, c); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x7fff || t2 != 0xfffff400) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c new file mode 100644 index 00000000000..10fcd4ca4fb --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, c, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x0000, 0x0000); + b = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + c = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + + t = __builtin_bfin_cmplx_msu (a, b, c); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffff800 || t2 != 0x600) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c new file mode 100644 index 00000000000..b2a7c5db397 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, c, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + b = __builtin_bfin_compose_2x16 (0xb000, 0xe000); + c = __builtin_bfin_compose_2x16 (0xa000, 0x8000); + + t = __builtin_bfin_cmplx_msu (a, b, c); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffb800 || t2 != 0x2c00) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c new file mode 100644 index 00000000000..c6b12257e17 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + b = __builtin_bfin_compose_2x16 (0x2000, 0x1000); + + t = __builtin_bfin_cmplx_mul (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x800 || t2 != 0xfffffa00) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c new file mode 100644 index 00000000000..d31fc15676a --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xa000, 0x8000); + b = __builtin_bfin_compose_2x16 (0xb000, 0xe000); + + t = __builtin_bfin_cmplx_mul (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x6800 || t2 != 0xffffe400) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c new file mode 100644 index 00000000000..1d1c0f701a4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a; + fract16 t; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + + t = __builtin_bfin_diff_hl_fr2x16 (a); + if (t != 0x6000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c new file mode 100644 index 00000000000..329ff2eb8a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a; + fract16 t; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_diff_hl_fr2x16 (a); + if (t != 0x1000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c new file mode 100644 index 00000000000..02d93e758f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a; + fract16 t; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + + t = __builtin_bfin_diff_lh_fr2x16 (a); + if (t != 0xffffa000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c new file mode 100644 index 00000000000..1e5dc699f43 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a; + fract16 t; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_diff_lh_fr2x16 (a); + if (t != -0x1000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c new file mode 100644 index 00000000000..cb66ecfb366 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x3000); + b = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + + t = __builtin_bfin_dspaddsubsat (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x7fff || t2 != 0x1000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c new file mode 100644 index 00000000000..8d6cab6913d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xd000, 0x8000); + b = __builtin_bfin_compose_2x16 (0x1000, 0x5000); + + t = __builtin_bfin_dspaddsubsat (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffe000 || t2 != 0xffff8000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c new file mode 100644 index 00000000000..0a16a4894e6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x3000); + b = __builtin_bfin_compose_2x16 (0x6000, 0x6000); + + t = __builtin_bfin_dspsubaddsat (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != -0x1000 || t2 != 0x7fff) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c new file mode 100644 index 00000000000..a69451ebaca --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xd000, 0xa000); + b = __builtin_bfin_compose_2x16 (0x1000, 0xc000); + + t = __builtin_bfin_dspsubaddsat (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffc000 || t2 != 0xffff8000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/hisilh.c b/gcc/testsuite/gcc.target/bfin/builtins/hisilh.c index 4efbfd44915..4efbfd44915 100644 --- a/gcc/testsuite/gcc.target/bfin/hisilh.c +++ b/gcc/testsuite/gcc.target/bfin/builtins/hisilh.c diff --git a/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c new file mode 100644 index 00000000000..c27d56a96df --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_lshl_fr1x16 (0x1101, 4); + if (t1 != 0x1010) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c new file mode 100644 index 00000000000..9be2abf8888 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_lshl_fr1x16 (0x4004, -4); + if (t1 != 0x0400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c new file mode 100644 index 00000000000..b9cf84f1874 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_lshl_fr2x16 (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffff0 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c new file mode 100644 index 00000000000..c2f13d57e07 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_lshl_fr2x16 (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x0cff || t2 != 0x0fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c new file mode 100644 index 00000000000..1d364b28a55 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_max_fr1x16 (0x7777, 0x7000); + if (t1 != 0x7777) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c new file mode 100644 index 00000000000..eadf2fb050c --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_max_fr1x16 (0x8000, 0xc000); + if (t1 != -0x4000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c new file mode 100644 index 00000000000..90adcef064b --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_max_fr1x32 (0x77777777, 0x70007000); + if (t != 0x77777777) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c new file mode 100644 index 00000000000..b2ed2afa8ec --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_max_fr1x32 (0x80000000, 0xc0000000); + if (t != 0xc0000000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c new file mode 100644 index 00000000000..2d968fd3338 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + b = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_max_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x5fff || t2 != 0x0001) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c new file mode 100644 index 00000000000..369c208519e --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5000, 0xd000); + b = __builtin_bfin_compose_2x16 (0xc000, 0x2000); + + t = __builtin_bfin_max_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x5000 || t2 != 0x2000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c new file mode 100644 index 00000000000..686dcdceff4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_min_fr1x16 (0x7777, 0x7000); + if (t1 != 0x7000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c new file mode 100644 index 00000000000..655804034ac --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_min_fr1x16 (0x7000, 0xc001); + if (t1 != -0x3fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c new file mode 100644 index 00000000000..a824e76ef32 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_min_fr1x32 (0x77777777, 0x70007000); + if (t != 0x70007000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c new file mode 100644 index 00000000000..72151016e09 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_min_fr1x32 (0x70007000, 0xc000c000); + if (t != 0xc000c000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c new file mode 100644 index 00000000000..2f2b401e5e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + b = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_min_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x1001 || t2 != 0xffffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c new file mode 100644 index 00000000000..af564f43146 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5000, 0xd000); + b = __builtin_bfin_compose_2x16 (0xc000, 0x2000); + + t = __builtin_bfin_min_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffc000 || t2 != 0xffffd000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c new file mode 100644 index 00000000000..06790c94a66 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x7000); + b = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + + t = __builtin_bfin_mulhisihh (a, b); + if (t != 0x14000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c new file mode 100644 index 00000000000..ef070584eec --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0xc000, 0xa000); + b = __builtin_bfin_compose_2x16 (0x7000, 0x2000); + + t = __builtin_bfin_mulhisihh (a, b); + if (t != 0xe4000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c new file mode 100644 index 00000000000..e2768e399ce --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x7000); + b = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + + t = __builtin_bfin_mulhisihl (a, b); + if (t != 0xa000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c new file mode 100644 index 00000000000..b64eabe6bf8 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0xa000, 0x7000); + b = __builtin_bfin_compose_2x16 (0xe000, 0x5000); + + t = __builtin_bfin_mulhisihl (a, b); + if (t != 0xe2000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c new file mode 100644 index 00000000000..99faef51aa4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x7000); + b = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + + t = __builtin_bfin_mulhisilh (a, b); + if (t != 0x1c000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c new file mode 100644 index 00000000000..3aef80cf872 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x7000); + b = __builtin_bfin_compose_2x16 (0xa000, 0x5000); + + t = __builtin_bfin_mulhisilh (a, b); + if (t != 0xd6000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c new file mode 100644 index 00000000000..acf1e9e1bd6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0x5000, 0x7000); + b = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + + t = __builtin_bfin_mulhisill (a, b); + if (t != 0xe000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c new file mode 100644 index 00000000000..147d8e14b06 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b; + int t; + + a = __builtin_bfin_compose_2x16 (0x5000, 0xa000); + b = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + + t = __builtin_bfin_mulhisill (a, b); + if (t != 0xf4000000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c new file mode 100644 index 00000000000..614b4444141 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_mult_fr1x16 (0x7777, 0x0007); + if (t1 != 0x0006) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c new file mode 100644 index 00000000000..aec3b7ccf64 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_mult_fr1x16 (0x0002, 0x0001); + if (t1 != 0x0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c new file mode 100644 index 00000000000..8c8ad87bda4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_mult_fr1x32 (0x7777, 0x0001); + if (t != 0x0000eeee) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c new file mode 100644 index 00000000000..95d4f9d12a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_mult_fr1x32 (0x0002, 0x0001); + if (t != 0x0004) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c new file mode 100644 index 00000000000..ff41bf5cfbc --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_mult_fr1x32x32 (0x80000000, 0x80000000); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c new file mode 100644 index 00000000000..6f5d5cbdbc6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_mult_fr1x32x32 (0x7fff0000, 0x00000007); + if (t != 0x6) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c new file mode 100644 index 00000000000..9bdfae632df --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_mult_fr1x32x32NS (0x80000000, 0x80000000); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c new file mode 100644 index 00000000000..cb3f18c50a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_mult_fr1x32x32NS (0x7fff0000, 0x00000007); + if (t != 0x6) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c new file mode 100644 index 00000000000..d15dd4516cd --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + b = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_mult_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x0c00 || t2 != 0xffffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c new file mode 100644 index 00000000000..6592eaf866f --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5000, 0xd000); + b = __builtin_bfin_compose_2x16 (0xc000, 0x2000); + + t = __builtin_bfin_mult_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffd800 || t2 != 0xfffff400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c new file mode 100644 index 00000000000..3612d9320d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_multr_fr1x16 (0x7777, 0x0007); + if (t1 != 0x0007) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c new file mode 100644 index 00000000000..e5fb2173e35 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_multr_fr1x16 (0x0002, 0x0001); + if (t1 != 0x0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c new file mode 100644 index 00000000000..33d5b4a42d7 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + b = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_multr_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xc01 || t2 != 0x0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c new file mode 100644 index 00000000000..a2feed2f107 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5000, 0xd000); + b = __builtin_bfin_compose_2x16 (0xc000, 0x2000); + + t = __builtin_bfin_multr_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffffd800 || t2 != 0xfffff400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c new file mode 100644 index 00000000000..10b2626c735 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_negate_fr1x16 (0x7fff); + if (t1 != -0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c new file mode 100644 index 00000000000..c839dce321d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_negate_fr1x16 (0x8000); + if (t1 != 0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c new file mode 100644 index 00000000000..0462de20af8 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_negate_fr1x16 (0xc000); + if (t1 != 0x4000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c new file mode 100644 index 00000000000..c7ba22c7198 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_negate_fr1x32 (0x7fffffff); + if (t != -0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c new file mode 100644 index 00000000000..70532f4abf1 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_negate_fr1x32 (0x80000000); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c new file mode 100644 index 00000000000..449d8b8ac37 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + + t = __builtin_bfin_negate_fr2x16 (a); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != -0x5fff || t2 != 0x1) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c new file mode 100644 index 00000000000..db750648cab --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c @@ -0,0 +1,21 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + t = __builtin_bfin_negate_fr2x16 (a); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != -0x1001 || t2 != -0x1) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c new file mode 100644 index 00000000000..b8a53dd0edc --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x16 (0x1234); + if (a != 2) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c new file mode 100644 index 00000000000..2534e9ff906 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef short fract16; + +int main () +{ + fract16 f = 0x1234, g; + int a; + + a = __builtin_bfin_norm_fr1x16 (f); + g = f << a; + if (g != (fract16) 0x48d0) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c new file mode 100644 index 00000000000..24b6fcbee81 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x16 (0xfedc); + if (a != 6) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c new file mode 100644 index 00000000000..986af6c552d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef short fract16; + +int main () +{ + fract16 f = 0xfedc, g; + int a; + + a = __builtin_bfin_norm_fr1x16 (f); + g = f << a; + if (g != (fract16) 0xb700) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c new file mode 100644 index 00000000000..f85ce96ab3b --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x16 (0); + if (a != 15) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c new file mode 100644 index 00000000000..bc30f23da58 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef short fract16; + +int main () +{ + fract16 f = 0, g; + int a; + + a = __builtin_bfin_norm_fr1x16 (f); + g = f << a; + if (g != (fract16) 0) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c new file mode 100644 index 00000000000..4edb00f3432 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x16 (0xffff); + if (a != 15) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c b/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c new file mode 100644 index 00000000000..c04219f4d80 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef short fract16; + +int main () +{ + fract16 f = 0xffff, g; + int a; + + a = __builtin_bfin_norm_fr1x16 (f); + g = f << a; + if (g != (fract16) 0x8000) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c new file mode 100644 index 00000000000..f8c6b93caf6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x32 (0x12345678); + if (a != 2) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c new file mode 100644 index 00000000000..ba4ad920c38 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef int fract32; + +int main () +{ + fract32 f = 0x1234, g; + int a; + + a = __builtin_bfin_norm_fr1x32 (f); + g = f << a; + if (g != 0x48d00000) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c new file mode 100644 index 00000000000..ae675b0d223 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x32 (0xfffffedc); + if (a != 22) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c new file mode 100644 index 00000000000..b7fbea7acb9 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef int fract32; + +int main () +{ + fract32 f = 0xfffffedc, g; + int a; + + a = __builtin_bfin_norm_fr1x32 (f); + g = f << a; + if (g != 0xb7000000) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c new file mode 100644 index 00000000000..4972ed43d41 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef int fract32; + +int main () +{ + fract32 f = 0x12345678, g; + int a; + + a = __builtin_bfin_norm_fr1x32 (f); + g = f << a; + if (g != 0x48d159e0) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c new file mode 100644 index 00000000000..cc565b7290d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x32 (0xfedcba98); + if (a != 6) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c new file mode 100644 index 00000000000..1b3ae8ddeed --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef int fract32; + +int main () +{ + fract32 f = 0xfedcba98, g; + int a; + + a = __builtin_bfin_norm_fr1x32 (f); + g = f << a; + if (g != 0xb72ea600) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c new file mode 100644 index 00000000000..33c927917f2 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x32 (0); + if (a != 31) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c new file mode 100644 index 00000000000..2150c5a98b0 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef int fract32; + +int main () +{ + fract32 f = 0, g; + int a; + + a = __builtin_bfin_norm_fr1x32 (f); + g = f << a; + if (g != 0) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c new file mode 100644 index 00000000000..87f4579f1ea --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x32 (0xffffffff); + if (a != 31) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c new file mode 100644 index 00000000000..4918a06a011 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c @@ -0,0 +1,18 @@ +extern void abort (void); +extern void exit (int); + +typedef int fract32; + +int main () +{ + fract32 f = 0xffffffff, g; + int a; + + a = __builtin_bfin_norm_fr1x32 (f); + g = f << a; + if (g != 0x80000000) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c b/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c new file mode 100644 index 00000000000..08468ac3d3d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c @@ -0,0 +1,14 @@ +extern void abort (void); +extern void exit (int); + +int main () +{ + int a; + + a = __builtin_bfin_norm_fr1x32 (0x1234); + if (a != 18) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c new file mode 100644 index 00000000000..ad80cd4c1c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + int m; + + m = __builtin_bfin_norm_fr1x16 (0x1000); + if (m != 2) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c new file mode 100644 index 00000000000..59e868daa83 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + int m; + + m = __builtin_bfin_norm_fr1x16 (0x4000); + if (m != 0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c new file mode 100644 index 00000000000..c769240b038 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + int m; + + m = __builtin_bfin_norm_fr1x16 (0xe000); + if (m != 2) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c new file mode 100644 index 00000000000..fe476f58f40 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c @@ -0,0 +1,13 @@ +extern void abort (void); + +int main () +{ + int m; + + m = __builtin_bfin_norm_fr1x32 (0xefffeff1); + if (m != 2) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c new file mode 100644 index 00000000000..7cf1ebecaa9 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c @@ -0,0 +1,13 @@ +extern void abort (void); + +int main () +{ + int m; + + m = __builtin_bfin_norm_fr1x32 (0x0000eff1); + if (m != 15) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c new file mode 100644 index 00000000000..f234bc9bf5e --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shl_fr1x16 (0x1101, 4); + if (t1 != 0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c new file mode 100644 index 00000000000..95e3bfb0c32 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shl_fr1x16 (0x4004, -4); + if (t1 != 0x0400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c new file mode 100644 index 00000000000..1c77a7c01b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shl_fr1x16 (0xc101, 4); + if (t1 != 0xffff8000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c new file mode 100644 index 00000000000..7cb9e8c6873 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shl_fr1x16 (0xd004, -4); + if (t1 != 0xfffffd00) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c new file mode 100644 index 00000000000..251ff1e18df --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shl_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0x1101, 4); + if (t1 != 0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c new file mode 100644 index 00000000000..8d50f209107 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shl_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0x4004, -4); + if (t1 != 0x0400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c new file mode 100644 index 00000000000..f78303a1807 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shl_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0xc101, 4); + if (t1 != 0xffff8000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c new file mode 100644 index 00000000000..cea723f3383 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shl_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0xd004, -4); + if (t1 != 0xfffffd00) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c new file mode 100644 index 00000000000..c85adfe565b --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shl_fr1x32 (0x7feff4ff, 4); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c new file mode 100644 index 00000000000..0a42ddc76fa --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shl_fr1x32 (0x7feff4ff, -4); + if (t != 0x7feff4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c new file mode 100644 index 00000000000..a98bc0c98a4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shl_fr1x32 (0xc000e4ff, 4); + if (t != 0x80000000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c new file mode 100644 index 00000000000..f2d18b37033 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shl_fr1x32 (0xc000e4ff, -4); + if (t != 0xfc000e4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c new file mode 100644 index 00000000000..2883c187541 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shl_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0x7feff4ff, 4); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c new file mode 100644 index 00000000000..94a4cde1dbb --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shl_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0x7feff4ff, -4); + if (t != 0x7feff4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c new file mode 100644 index 00000000000..f32423500c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shl_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0xc000e4ff, 4); + if (t != 0x80000000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c new file mode 100644 index 00000000000..9300650857c --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shl_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0xc000e4ff, -4); + if (t != 0xfc000e4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c new file mode 100644 index 00000000000..f24a266cc7c --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c @@ -0,0 +1,19 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shl_fr1x32 (f, n); +} + +int main () +{ + fract32 f; + + f = foo (0x12345678, 4); + if (f != 0x7fffffff) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c new file mode 100644 index 00000000000..029378ad812 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ + +typedef int fract32; + +extern void abort (void); + +int main () +{ + fract32 f; + + f = __builtin_bfin_shl_fr1x32 (0x12345678, 4); + if (f != 0x7fffffff) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c new file mode 100644 index 00000000000..53ca96047c6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_shl_fr2x16 (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffff8000 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c new file mode 100644 index 00000000000..9e24db38b7d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_shl_fr2x16 (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffcff || t2 != 0xffffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c new file mode 100644 index 00000000000..6d91625d833 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_shl_fr2x16 (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x7fff || t2 != 0x10) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c new file mode 100644 index 00000000000..9b12e847a47 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_shl_fr2x16 (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x100 || t2 != 0x0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c new file mode 100644 index 00000000000..af9ac3f1588 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shl_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = foo (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffff8000 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c new file mode 100644 index 00000000000..cc080867866 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shl_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = foo (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffcff || t2 != 0xffffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c new file mode 100644 index 00000000000..dd235c891ff --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shl_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = foo (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x7fff || t2 != 0x10) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c new file mode 100644 index 00000000000..ed90541a4b5 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shl_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = foo (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x100 || t2 != 0x0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c new file mode 100644 index 00000000000..5a9df3de258 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shr_fr1x16 (0x1101, -4); + if (t1 != 0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c new file mode 100644 index 00000000000..39dd3a999ad --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shr_fr1x16 (0x4004, 4); + if (t1 != 0x0400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c new file mode 100644 index 00000000000..fff331f6e6d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shr_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0x1101, -4); + if (t1 != 0x7fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c new file mode 100644 index 00000000000..8425b7a834c --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shr_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0x4004, 4); + if (t1 != 0x0400) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c new file mode 100644 index 00000000000..3a5e12fd60f --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shr_fr1x32 (0x7feff4ff, -4); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c new file mode 100644 index 00000000000..6f73462cf6d --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shr_fr1x32 (0x7feff4ff, 4); + if (t != 0x7feff4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c new file mode 100644 index 00000000000..664516365d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shr_fr1x32 (0xc000e4ff, -4); + if (t != 0x80000000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c new file mode 100644 index 00000000000..56ffe17c592 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_shr_fr1x32 (0xc000e4ff, 4); + if (t != 0xfc000e4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c new file mode 100644 index 00000000000..6dbb7f2e2b3 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shr_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0x7feff4ff, -4); + if (t != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c new file mode 100644 index 00000000000..ef8915474ff --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shr_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0x7feff4ff, 4); + if (t != 0x7feff4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c new file mode 100644 index 00000000000..720546a71f3 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shr_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0xc000e4ff, -4); + if (t != 0x80000000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c new file mode 100644 index 00000000000..9422f790b5a --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shr_fr1x32 (f, n); +} + +int main () +{ + fract32 t; + + t = foo (0xc000e4ff, 4); + if (t != 0xfc000e4f) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c new file mode 100644 index 00000000000..caf17203dd5 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c @@ -0,0 +1,19 @@ +extern void abort (void); + +typedef long fract32; + +fract32 foo (fract32 f, short n) +{ + return __builtin_bfin_shr_fr1x32 (f, n); +} + +int main () +{ + fract32 f; + + f = foo (0x87654321, 4); + if (f != 0xf8765432) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c new file mode 100644 index 00000000000..8be9ecfd117 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ + +typedef int fract32; + +extern void abort (void); + +int main () +{ + fract32 f; + + f = __builtin_bfin_shr_fr1x32 (0x87654321, 4); + if (f != 0xf8765432) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c new file mode 100644 index 00000000000..6e936954728 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_shr_fr2x16 (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffff8000 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c new file mode 100644 index 00000000000..1c83d29149c --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_shr_fr2x16 (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffcff || t2 != 0xffffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c new file mode 100644 index 00000000000..5b6af8b4b4b --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shr_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = foo (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xffff8000 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c new file mode 100644 index 00000000000..63bbb8bc765 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shr_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = foo (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffcff || t2 != 0xffffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c new file mode 100644 index 00000000000..0de251ee2be --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shrl_fr1x16 (0x8101, 4); + if (t1 != 0x0810) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c new file mode 100644 index 00000000000..c6b88b6d361 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_shrl_fr1x16 (0x4004, -4); + if (t1 != 0x0040) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c new file mode 100644 index 00000000000..0f8e168f687 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shrl_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0x8101, 4); + if (t1 != 0x0810) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c new file mode 100644 index 00000000000..d266ce09535 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short fract16; + +fract16 foo (fract16 f, short n) +{ + return __builtin_bfin_shrl_fr1x16 (f, n); +} + +int main () +{ + fract16 t1; + + t1 = foo (0x4004, -4); + if (t1 != 0x0040) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c new file mode 100644 index 00000000000..1252b4d7553 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_shrl_fr2x16 (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffff0 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c new file mode 100644 index 00000000000..b4bec6e6db2 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c @@ -0,0 +1,22 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = __builtin_bfin_shrl_fr2x16 (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x0cff || t2 != 0x0fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c new file mode 100644 index 00000000000..4036dbf53e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shrl_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = foo (a, -4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0xfffffff0 || t2 != 0xfffffff0) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c new file mode 100644 index 00000000000..b6473fa4d50 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c @@ -0,0 +1,27 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +fract2x16 foo (fract2x16 f, short n) +{ + return __builtin_bfin_shrl_fr2x16 (f, n); +} + +int main () +{ + fract2x16 a, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff); + + t = foo (a, 4); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x0cff || t2 != 0x0fff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c new file mode 100644 index 00000000000..b97bf8d6334 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c @@ -0,0 +1,14 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_sub_fr1x16 (0x3000, 0x2000); + if (t1 != 0x1000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c new file mode 100644 index 00000000000..5e456803417 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c @@ -0,0 +1,14 @@ +extern void abort (void); + +typedef short fract16; + +int main () +{ + fract16 t1; + + t1 = __builtin_bfin_sub_fr1x16 (0x3000, 0x4000); + if (t1 != -0x1000) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c new file mode 100644 index 00000000000..5aedd9199b3 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t1; + + t1 = __builtin_bfin_sub_fr1x32 (0x40003000, 0xc0003000); + if (t1 != 0x7fffffff) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c new file mode 100644 index 00000000000..8ac4a5aade6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c @@ -0,0 +1,15 @@ +extern void abort (void); + +typedef long fract32; + +int main () +{ + fract32 t; + + t = __builtin_bfin_sub_fr1x32 (0x40003000, 0x70002000); + if (t != 0xd0001000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c new file mode 100644 index 00000000000..34b8ac87d2a --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x4000, 0x2000); + b = __builtin_bfin_compose_2x16 (0x8000, 0x5000); + + t = __builtin_bfin_sub_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x7fff || t2 != -0x3000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c new file mode 100644 index 00000000000..52f7d8052c6 --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c @@ -0,0 +1,23 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a, b, t; + fract16 t1, t2; + + a = __builtin_bfin_compose_2x16 (0x7000, 0xc000); + b = __builtin_bfin_compose_2x16 (0xc000, 0xd000); + + t = __builtin_bfin_sub_fr2x16 (a, b); + t1 = __builtin_bfin_extract_hi (t); + t2 = __builtin_bfin_extract_lo (t); + if (t1 != 0x7fff || t2 != -0x1000) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c b/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c new file mode 100644 index 00000000000..56c4f191eac --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a; + fract16 t; + + a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff); + + t = __builtin_bfin_sum_fr2x16 (a); + if (t != 0x5ffe) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c b/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c new file mode 100644 index 00000000000..2f75bfdfc5e --- /dev/null +++ b/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c @@ -0,0 +1,20 @@ +extern void abort (void); + +typedef short __v2hi __attribute ((vector_size(4))); +typedef __v2hi fract2x16; +typedef short fract16; + +int main () +{ + fract2x16 a; + fract16 t; + + a = __builtin_bfin_compose_2x16 (0x1001, 0x0001); + + t = __builtin_bfin_sum_fr2x16 (a); + if (t != 0x1002) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/bfin/hisilh-O0.c b/gcc/testsuite/gcc.target/bfin/hisilh-O0.c deleted file mode 100644 index 50786b8be67..00000000000 --- a/gcc/testsuite/gcc.target/bfin/hisilh-O0.c +++ /dev/null @@ -1,46 +0,0 @@ -/* { dg-do run { target bfin*-*-* } } */ -/* { dg-options "-O0" } */ -#include <stdlib.h> -typedef short raw2x16 __attribute__ ((vector_size(4))); - -int x; - -int ll(raw2x16 a, raw2x16 b) -{ - x = __builtin_bfin_mulhisill(a, b); - return x; -} - -int lh(raw2x16 a, raw2x16 b) -{ - x = __builtin_bfin_mulhisilh(a, b); - return x; -} - -int hl(raw2x16 a, raw2x16 b) -{ - x = __builtin_bfin_mulhisihl(a, b); - return x; -} - -int hh(raw2x16 a, raw2x16 b) -{ - x = __builtin_bfin_mulhisihh(a, b); - return x; -} - -int main () -{ - raw2x16 a = __builtin_bfin_compose_2x16 (0x1234, 0x5678); - raw2x16 b = __builtin_bfin_compose_2x16 (0xFEDC, 0xBA98); - if (ll (a, b) != 0xe88e8740) - abort (); - if (lh (a, b) != 0xff9d5f20) - abort (); - if (hl (a, b) != 0xfb1096e0) - abort (); - if (hh (a, b) != 0xffeb3cb0) - abort (); - - return 0; -} diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c index 71fbcf38df9..fa2d56d1a48 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c @@ -10,39 +10,8 @@ #error "__ADSPBF51x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" -#endif - -#ifndef __WORKAROUNDS_ENABLED -#error "__WORKAROUNDS_ENABLED is not defined" -#endif - -#ifdef __WORKAROUND_RETS -#error "__WORKAROUND_RETS is defined" -#endif - -#ifndef __WORKAROUND_SPECULATIVE_LOADS -#error "__WORKAROUND_SPECULATIVE_LOADS is not defined" -#endif - -#ifdef __WORKAROUND_SPECULATIVE_SYNCS -#error "__WORKAROUND_SPECULATIVE_SYNCS is defined" -#endif -/* Test for -mcpu=. */ -/* { dg-do preprocess } */ -/* { dg-bfin-options "-mcpu=bf512" } */ - -#ifndef __ADSPBF512__ -#error "__ADSPBF512__ is not defined" -#endif - -#ifndef __ADSPBF51x__ -#error "__ADSPBF51x__ is not defined" -#endif - -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" +#if __SILICON_REVISION__ != 0x0002 +#error "__SILICON_REVISION__ is not 0x0002" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c index b1ae2a2ce03..f6c0829119b 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c @@ -10,39 +10,8 @@ #error "__ADSPBF51x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" -#endif - -#ifndef __WORKAROUNDS_ENABLED -#error "__WORKAROUNDS_ENABLED is not defined" -#endif - -#ifdef __WORKAROUND_RETS -#error "__WORKAROUND_RETS is defined" -#endif - -#ifndef __WORKAROUND_SPECULATIVE_LOADS -#error "__WORKAROUND_SPECULATIVE_LOADS is not defined" -#endif - -#ifdef __WORKAROUND_SPECULATIVE_SYNCS -#error "__WORKAROUND_SPECULATIVE_SYNCS is defined" -#endif -/* Test for -mcpu=. */ -/* { dg-do preprocess } */ -/* { dg-bfin-options "-mcpu=bf514" } */ - -#ifndef __ADSPBF514__ -#error "__ADSPBF514__ is not defined" -#endif - -#ifndef __ADSPBF51x__ -#error "__ADSPBF51x__ is not defined" -#endif - -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" +#if __SILICON_REVISION__ != 0x0002 +#error "__SILICON_REVISION__ is not 0x0002" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c index 675d2659d27..439b3f40eb5 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c @@ -10,39 +10,8 @@ #error "__ADSPBF51x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" -#endif - -#ifndef __WORKAROUNDS_ENABLED -#error "__WORKAROUNDS_ENABLED is not defined" -#endif - -#ifdef __WORKAROUND_RETS -#error "__WORKAROUND_RETS is defined" -#endif - -#ifndef __WORKAROUND_SPECULATIVE_LOADS -#error "__WORKAROUND_SPECULATIVE_LOADS is not defined" -#endif - -#ifdef __WORKAROUND_SPECULATIVE_SYNCS -#error "__WORKAROUND_SPECULATIVE_SYNCS is defined" -#endif -/* Test for -mcpu=. */ -/* { dg-do preprocess } */ -/* { dg-bfin-options "-mcpu=bf516" } */ - -#ifndef __ADSPBF516__ -#error "__ADSPBF516__ is not defined" -#endif - -#ifndef __ADSPBF51x__ -#error "__ADSPBF51x__ is not defined" -#endif - -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" +#if __SILICON_REVISION__ != 0x0002 +#error "__SILICON_REVISION__ is not 0x0002" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c index d0675783b43..aff7f6989cf 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c @@ -10,39 +10,8 @@ #error "__ADSPBF51x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" -#endif - -#ifndef __WORKAROUNDS_ENABLED -#error "__WORKAROUNDS_ENABLED is not defined" -#endif - -#ifdef __WORKAROUND_RETS -#error "__WORKAROUND_RETS is defined" -#endif - -#ifndef __WORKAROUND_SPECULATIVE_LOADS -#error "__WORKAROUND_SPECULATIVE_LOADS is not defined" -#endif - -#ifdef __WORKAROUND_SPECULATIVE_SYNCS -#error "__WORKAROUND_SPECULATIVE_SYNCS is defined" -#endif -/* Test for -mcpu=. */ -/* { dg-do preprocess } */ -/* { dg-bfin-options "-mcpu=bf518" } */ - -#ifndef __ADSPBF518__ -#error "__ADSPBF518__ is not defined" -#endif - -#ifndef __ADSPBF51x__ -#error "__ADSPBF51x__ is not defined" -#endif - -#if __SILICON_REVISION__ != 0x0000 -#error "__SILICON_REVISION__ is not 0x0000" +#if __SILICON_REVISION__ != 0x0002 +#error "__SILICON_REVISION__ is not 0x0002" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c index 4d95d65def9..c8999713d81 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c @@ -10,8 +10,8 @@ #error "__ADSPBF54x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0002 -#error "__SILICON_REVISION__ is not 0x0002" +#if __SILICON_REVISION__ != 0x0004 +#error "__SILICON_REVISION__ is not 0x0004" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c index 39314b0089e..9269785057e 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c @@ -10,8 +10,8 @@ #error "__ADSPBF54x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0002 -#error "__SILICON_REVISION__ is not 0x0002" +#if __SILICON_REVISION__ != 0x0004 +#error "__SILICON_REVISION__ is not 0x0004" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c index 4036c02f416..8f724335c24 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c @@ -10,8 +10,8 @@ #error "__ADSPBF54x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0002 -#error "__SILICON_REVISION__ is not 0x0002" +#if __SILICON_REVISION__ != 0x0004 +#error "__SILICON_REVISION__ is not 0x0004" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c index 71d3bb87bae..7b1d2ff2d7f 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c @@ -10,8 +10,8 @@ #error "__ADSPBF54x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0002 -#error "__SILICON_REVISION__ is not 0x0002" +#if __SILICON_REVISION__ != 0x0004 +#error "__SILICON_REVISION__ is not 0x0004" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c b/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c index 201b1019b77..83c79de3ffd 100644 --- a/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c +++ b/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c @@ -10,8 +10,8 @@ #error "__ADSPBF54x__ is not defined" #endif -#if __SILICON_REVISION__ != 0x0002 -#error "__SILICON_REVISION__ is not 0x0002" +#if __SILICON_REVISION__ != 0x0004 +#error "__SILICON_REVISION__ is not 0x0004" #endif #ifndef __WORKAROUNDS_ENABLED diff --git a/gcc/testsuite/gcc.target/i386/asm-6.c b/gcc/testsuite/gcc.target/i386/asm-6.c index d69cf5d3df0..6aa37ef4276 100644 --- a/gcc/testsuite/gcc.target/i386/asm-6.c +++ b/gcc/testsuite/gcc.target/i386/asm-6.c @@ -3,7 +3,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fpic" { target fpic } } */ -/* { dg-xfail-if "" { i?86-pc-solaris2.1[0-9] && ilp32 } } */ int f0 (int, int, int, int, int); int f1 (void); diff --git a/gcc/testsuite/gcc.target/i386/avx-ceil-vec.c b/gcc/testsuite/gcc.target/i386/avx-ceil-vec.c new file mode 100644 index 00000000000..e917e31b4ef --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-ceil-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern double ceil (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = ceil (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != ceil (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-ceilf-vec.c b/gcc/testsuite/gcc.target/i386/avx-ceilf-vec.c new file mode 100644 index 00000000000..ef316214d8a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-ceilf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern float ceilf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = ceilf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != ceilf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-floor-vec.c b/gcc/testsuite/gcc.target/i386/avx-floor-vec.c new file mode 100644 index 00000000000..55f8f14c090 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-floor-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern double floor (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = floor (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != floor (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-floorf-vec.c b/gcc/testsuite/gcc.target/i386/avx-floorf-vec.c new file mode 100644 index 00000000000..00348114c8c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-floorf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern float floorf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = floorf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != floorf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-rint-vec.c b/gcc/testsuite/gcc.target/i386/avx-rint-vec.c new file mode 100644 index 00000000000..dc8c61017c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-rint-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern double rint (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = rint (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != rint (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-rintf-vec.c b/gcc/testsuite/gcc.target/i386/avx-rintf-vec.c new file mode 100644 index 00000000000..4d77bf25b29 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-rintf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern float rintf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = rintf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != rintf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-trunc-vec.c b/gcc/testsuite/gcc.target/i386/avx-trunc-vec.c new file mode 100644 index 00000000000..0b37eb4e04a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-trunc-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern double trunc (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = trunc (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != trunc (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-truncf-vec.c b/gcc/testsuite/gcc.target/i386/avx-truncf-vec.c new file mode 100644 index 00000000000..099ff824624 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-truncf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */ +/* { dg-require-effective-target avx } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "avx-check.h" + +#include <math.h> + +extern float truncf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +avx_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = truncf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != truncf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c b/gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c new file mode 100644 index 00000000000..9397729340c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c @@ -0,0 +1,8 @@ +/* { dg-do run { target ilp32 } } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O2 -mfpmath=sse -mavx -mtune=geode" } */ + +#define CHECK_H "avx-check.h" +#define TEST avx_test + +#include "sse4_1-insertps-3.c" diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c b/gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c new file mode 100644 index 00000000000..527b070f6b6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c @@ -0,0 +1,8 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O2 -mfpmath=sse -mavx" } */ + +#define CHECK_H "avx-check.h" +#define TEST avx_test + +#include "sse4_1-insertps-4.c" diff --git a/gcc/testsuite/gcc.target/i386/avx-vmaskmovdqu.c b/gcc/testsuite/gcc.target/i386/avx-vmaskmovdqu.c new file mode 100644 index 00000000000..24b5bba77d5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-vmaskmovdqu.c @@ -0,0 +1,8 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O2 -mavx" } */ + +#define CHECK_H "avx-check.h" +#define TEST avx_test + +#include "sse2-maskmovdqu.c" diff --git a/gcc/testsuite/gcc.target/i386/avx-vpinsrw-1.c b/gcc/testsuite/gcc.target/i386/avx-vpinsrw-1.c new file mode 100644 index 00000000000..5e1a7cb91c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-vpinsrw-1.c @@ -0,0 +1,8 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O2 -mavx" } */ + +#define CHECK_H "avx-check.h" +#define TEST avx_test + +#include "sse2-pinsrw.c" diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c new file mode 100644 index 00000000000..c909b9402cc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ + +#define N 1024 + +float a[N], b[N+3], c[N]; + +void +avx_test (void) +{ + int i; + + for (i = 0; i < N; i++) + c[i] = a[i] * b[i+3]; +} + +/* { dg-final { scan-assembler-not "\\*avx_movups256/1" } } */ +/* { dg-final { scan-assembler "\\*sse_movups/1" } } */ +/* { dg-final { scan-assembler "vinsertf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c new file mode 100644 index 00000000000..7d188e2b466 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ + +#define N 1024 + +char **ep; +char **fp; + +void +avx_test (void) +{ + int i; + char **ap; + char **bp; + char **cp; + + ap = ep; + bp = fp; + for (i = 128; i >= 0; i--) + { + *ap++ = *cp++; + *bp++ = 0; + } +} + +/* { dg-final { scan-assembler-not "\\*avx_movdqu256/1" } } */ +/* { dg-final { scan-assembler "\\*sse2_movdqu/1" } } */ +/* { dg-final { scan-assembler "vinsertf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-3.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-3.c new file mode 100644 index 00000000000..670305423fe --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-3.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ + +#define N 1024 + +double a[N], b[N+3], c[N]; + +void +avx_test (void) +{ + int i; + + for (i = 0; i < N; i++) + c[i] = a[i] * b[i+3]; +} + +/* { dg-final { scan-assembler-not "\\*avx_movupd256/1" } } */ +/* { dg-final { scan-assembler "\\*sse2_movupd/1" } } */ +/* { dg-final { scan-assembler "vinsertf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c new file mode 100644 index 00000000000..0d3ef333120 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -dp -mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store" } */ + +#define N 1024 + +float a[N], b[N+3]; + +void +avx_test (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i] = a[i+3] * 2; +} + +/* { dg-final { scan-assembler "\\*avx_movups256/1" } } */ +/* { dg-final { scan-assembler-not "\\*avx_movups/1" } } */ +/* { dg-final { scan-assembler-not "vinsertf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-5.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-5.c new file mode 100644 index 00000000000..153b66f8287 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-5.c @@ -0,0 +1,43 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ + +#include "avx-check.h" + +#define N 8 + +float a[N+3] = { -1, -1, -1, 24.43, 68.346, 43.35, + 546.46, 46.79, 82.78, 82.7, 9.4 }; +float b[N]; +float c[N]; + +void +foo (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i] = a[i+3] * 2; +} + +__attribute__ ((noinline)) +float +bar (float x) +{ + return x * 2; +} + +void +avx_test (void) +{ + int i; + + foo (); + + for (i = 0; i < N; i++) + c[i] = bar (a[i+3]); + + for (i = 0; i < N; i++) + if (b[i] != c[i]) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-6.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-6.c new file mode 100644 index 00000000000..2fa984cc4a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-6.c @@ -0,0 +1,42 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ + +#include "avx-check.h" + +#define N 4 + +double a[N+3] = { -1, -1, -1, 24.43, 68.346, 43.35, 546.46 }; +double b[N]; +double c[N]; + +void +foo (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i] = a[i+3] * 2; +} + +__attribute__ ((noinline)) +double +bar (double x) +{ + return x * 2; +} + +void +avx_test (void) +{ + int i; + + foo (); + + for (i = 0; i < N; i++) + c[i] = bar (a[i+3]); + + for (i = 0; i < N; i++) + if (b[i] != c[i]) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c new file mode 100644 index 00000000000..ad16a5329bf --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c @@ -0,0 +1,60 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ + +#include "avx-check.h" + +#define N 128 + +char **ep; +char **fp; +char **mp; +char **lp; + +__attribute__ ((noinline)) +void +foo (void) +{ + mp = (char **) malloc (N); + lp = (char **) malloc (N); + ep = (char **) malloc (N); + fp = (char **) malloc (N); +} + +void +avx_test (void) +{ + int i; + char **ap, **bp, **cp, **dp; + char *str = "STR"; + + foo (); + + cp = mp; + dp = lp; + + for (i = N; i >= 0; i--) + { + *cp++ = str; + *dp++ = str; + } + + ap = ep; + bp = fp; + cp = mp; + dp = lp; + + for (i = N; i >= 0; i--) + { + *ap++ = *cp++; + *bp++ = *dp++; + } + + for (i = N; i >= 0; i--) + { + if (strcmp (*--ap, "STR") != 0) + abort (); + if (strcmp (*--bp, "STR") != 0) + abort (); + } +} diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c new file mode 100644 index 00000000000..6af02a2202b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ + +#define N 1024 + +float a[N], b[N+3], c[N], d[N]; + +void +avx_test (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i+3] = a[i] * 10.0; + + for (i = 0; i < N; i++) + d[i] = c[i] * 20.0; +} + +/* { dg-final { scan-assembler-not "\\*avx_movups256/2" } } */ +/* { dg-final { scan-assembler "vmovups.*\\*movv4sf_internal/3" } } */ +/* { dg-final { scan-assembler "vextractf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c new file mode 100644 index 00000000000..d8ae5a90189 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ + +#define N 1024 + +char **ep; +char **fp; + +void +avx_test (void) +{ + int i; + char **ap; + char **bp; + char **cp; + + ap = ep; + bp = fp; + for (i = 128; i >= 0; i--) + { + *ap++ = *cp++; + *bp++ = 0; + } +} + +/* { dg-final { scan-assembler-not "\\*avx_movdqu256/2" } } */ +/* { dg-final { scan-assembler "vmovdqu.*\\*movv16qi_internal/3" } } */ +/* { dg-final { scan-assembler "vextractf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-3.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-3.c new file mode 100644 index 00000000000..65e820444e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-3.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ + +#define N 1024 + +double a[N], b[N+3], c[N], d[N]; + +void +avx_test (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i+3] = a[i] * 10.0; + + for (i = 0; i < N; i++) + d[i] = c[i] * 20.0; +} + +/* { dg-final { scan-assembler-not "\\*avx_movupd256/2" } } */ +/* { dg-final { scan-assembler "vmovupd.*\\*movv2df_internal/3" } } */ +/* { dg-final { scan-assembler "vextractf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c new file mode 100644 index 00000000000..96cca66ae9c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -dp -mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store" } */ + +#define N 1024 + +float a[N], b[N+3], c[N]; + +void +avx_test (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i+3] = a[i] * c[i]; +} + +/* { dg-final { scan-assembler "\\*avx_movups256/2" } } */ +/* { dg-final { scan-assembler-not "\\*avx_movups/2" } } */ +/* { dg-final { scan-assembler-not "\\*avx_movv4sf_internal/3" } } */ +/* { dg-final { scan-assembler-not "vextractf128" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c new file mode 100644 index 00000000000..642da3cf0ee --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c @@ -0,0 +1,42 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ + +#include "avx-check.h" + +#define N 8 + +float a[N] = { 24.43, 68.346, 43.35, 546.46, 46.79, 82.78, 82.7, 9.4 }; +float b[N+3]; +float c[N+3]; + +void +foo (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i+3] = a[i] * 2; +} + +__attribute__ ((noinline)) +float +bar (float x) +{ + return x * 2; +} + +void +avx_test (void) +{ + int i; + + foo (); + + for (i = 0; i < N; i++) + c[i+3] = bar (a[i]); + + for (i = 0; i < N; i++) + if (b[i+3] != c[i+3]) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c new file mode 100644 index 00000000000..a0de7a56f63 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c @@ -0,0 +1,42 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ + +#include "avx-check.h" + +#define N 4 + +double a[N] = { 24.43, 68.346, 43.35, 546.46 }; +double b[N+3]; +double c[N+3]; + +void +foo (void) +{ + int i; + + for (i = 0; i < N; i++) + b[i+3] = a[i] * 2; +} + +__attribute__ ((noinline)) +double +bar (double x) +{ + return x * 2; +} + +void +avx_test (void) +{ + int i; + + foo (); + + for (i = 0; i < N; i++) + c[i+3] = bar (a[i]); + + for (i = 0; i < N; i++) + if (b[i+3] != c[i+3]) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c new file mode 100644 index 00000000000..4272dc3cd0d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c @@ -0,0 +1,45 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ + +#include "avx-check.h" + +#define N 128 + +char **ep; +char **fp; + +__attribute__ ((noinline)) +void +foo (void) +{ + ep = (char **) malloc (N); + fp = (char **) malloc (N); +} + +void +avx_test (void) +{ + int i; + char **ap, **bp; + char *str = "STR"; + + foo (); + + ap = ep; + bp = fp; + + for (i = N; i >= 0; i--) + { + *ap++ = str; + *bp++ = str; + } + + for (i = N; i >= 0; i--) + { + if (strcmp (*--ap, "STR") != 0) + abort (); + if (strcmp (*--bp, "STR") != 0) + abort (); + } +} diff --git a/gcc/testsuite/gcc.target/i386/builtin-copysign.c b/gcc/testsuite/gcc.target/i386/builtin-copysign.c index c20a0b6cb49..175b931c7c8 100644 --- a/gcc/testsuite/gcc.target/i386/builtin-copysign.c +++ b/gcc/testsuite/gcc.target/i386/builtin-copysign.c @@ -11,6 +11,4 @@ MODE test5##CEXT(MODE a, MODE b) { return __builtin_copysign##CEXT(a, b); } TEST_SET (float, f) TEST_SET (double, ) TEST_SET (long double, l) -#if defined (__LP64__) TEST_SET (__float128, q) -#endif diff --git a/gcc/testsuite/gcc.target/i386/incoming-8.c b/gcc/testsuite/gcc.target/i386/incoming-8.c index 2dd8800fd6c..a4904fba373 100644 --- a/gcc/testsuite/gcc.target/i386/incoming-8.c +++ b/gcc/testsuite/gcc.target/i386/incoming-8.c @@ -1,6 +1,6 @@ /* PR target/40838 */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ -/* { dg-options "-w -mstackrealign -O3 -msse2 -mpreferred-stack-boundary=4" } */ +/* { dg-options "-w -mstackrealign -O3 -msse2 -mno-avx -mpreferred-stack-boundary=4" } */ float foo (float f) diff --git a/gcc/testsuite/gcc.target/i386/opt-1.c b/gcc/testsuite/gcc.target/i386/opt-1.c index 28e2ef38c34..2585236a6bc 100644 --- a/gcc/testsuite/gcc.target/i386/opt-1.c +++ b/gcc/testsuite/gcc.target/i386/opt-1.c @@ -1,7 +1,7 @@ /* Test the attribute((optimize)) really works. Do this test by checking whether we vectorize a simple loop. */ /* { dg-do compile } */ -/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */ +/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8 --param min-insn-to-prefetch-ratio=0" } */ /* { dg-final { scan-assembler "prefetcht0" } } */ /* { dg-final { scan-assembler "addps" } } */ /* { dg-final { scan-assembler "subss" } } */ diff --git a/gcc/testsuite/gcc.target/i386/opt-2.c b/gcc/testsuite/gcc.target/i386/opt-2.c index d2791e071c3..1fa18c1f978 100644 --- a/gcc/testsuite/gcc.target/i386/opt-2.c +++ b/gcc/testsuite/gcc.target/i386/opt-2.c @@ -1,7 +1,7 @@ /* Test the attribute((optimize)) really works. Do this test by checking whether we vectorize a simple loop. */ /* { dg-do compile } */ -/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */ +/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8 --param min-insn-to-prefetch-ratio=0" } */ /* { dg-final { scan-assembler "prefetcht0" } } */ /* { dg-final { scan-assembler "addps" } } */ /* { dg-final { scan-assembler "subss" } } */ diff --git a/gcc/testsuite/gcc.target/i386/parity-1.c b/gcc/testsuite/gcc.target/i386/parity-1.c index eaf41cf082d..1b0001ef2ad 100644 --- a/gcc/testsuite/gcc.target/i386/parity-1.c +++ b/gcc/testsuite/gcc.target/i386/parity-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8" } */ +/* { dg-options "-O2 -march=k8 -mno-popcnt" } */ /* { dg-final { scan-assembler "setnp" } } */ int foo(unsigned int x) diff --git a/gcc/testsuite/gcc.target/i386/parity-2.c b/gcc/testsuite/gcc.target/i386/parity-2.c index 03a80616528..9adca35a667 100644 --- a/gcc/testsuite/gcc.target/i386/parity-2.c +++ b/gcc/testsuite/gcc.target/i386/parity-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8" } */ +/* { dg-options "-O2 -march=k8 -mno-popcnt" } */ /* { dg-final { scan-assembler "setnp" } } */ int foo(unsigned long long int x) diff --git a/gcc/testsuite/gcc.target/i386/pr38824.c b/gcc/testsuite/gcc.target/i386/pr38824.c index 637abfde888..9fbfc502d6b 100644 --- a/gcc/testsuite/gcc.target/i386/pr38824.c +++ b/gcc/testsuite/gcc.target/i386/pr38824.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -msse" } */ +/* { dg-options "-O2 -msse -mno-sse2" } */ typedef float v4sf __attribute__ ((__vector_size__ (16))); diff --git a/gcc/testsuite/gcc.target/i386/pr46084.c b/gcc/testsuite/gcc.target/i386/pr46084.c index 88bcd1ca5e0..3ca22eb2923 100644 --- a/gcc/testsuite/gcc.target/i386/pr46084.c +++ b/gcc/testsuite/gcc.target/i386/pr46084.c @@ -1,7 +1,7 @@ /* This test needs to use setrlimit to set the stack size, so it can only run on Unix. */ /* { dg-do run { target *-*-linux* *-*-solaris* *-*-darwin* } } */ -/* { dg-require-effective-target avx } */ +/* { dg-require-effective-target avx_runtime } */ /* { dg-require-effective-target split_stack } */ /* { dg-options "-fsplit-stack -O2 -mavx" } */ diff --git a/gcc/testsuite/gcc.target/i386/pr47502-1.c b/gcc/testsuite/gcc.target/i386/pr47502-1.c new file mode 100644 index 00000000000..727afe944e5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr47502-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +void +foo (const void *xxxxx, void *yyyyy, long y) +{ + asm volatile ("" :: "c" ((xxxxx)), "d" ((yyyyy)), "S" (y)); +} diff --git a/gcc/testsuite/gcc.target/i386/pr47502-2.c b/gcc/testsuite/gcc.target/i386/pr47502-2.c new file mode 100644 index 00000000000..a8dc1ca0189 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr47502-2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-pic" } */ + +int +foo (int how, const void *set, void *oset) +{ + int resultvar; + asm volatile ("" + : "=a" (resultvar) + : "0" (14) , "b" (how), "c" ((set)), "d" ((oset)), "S" (65 / 8) : "memory", "cc"); + return resultvar; +} diff --git a/gcc/testsuite/gcc.target/i386/pr48037-1.c b/gcc/testsuite/gcc.target/i386/pr48037-1.c new file mode 100644 index 00000000000..30c81e7171d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48037-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O -fno-math-errno" } */ + +typedef double __m128d __attribute__((vector_size(16))); +__m128d vsqrt1 (__m128d const x) +{ + double const* __restrict__ const y = (double const*)&x; + double const a = __builtin_sqrt(y[0]); + double const b = __builtin_sqrt(y[1]); + return (__m128d) { a, b }; +} + +/* Verify we do not spill x to the stack. */ +/* { dg-final { scan-assembler-not "%rsp" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr48237.c b/gcc/testsuite/gcc.target/i386/pr48237.c new file mode 100644 index 00000000000..e20446eab04 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48237.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fcaller-saves -fschedule-insns2 -fselective-scheduling2 -mtune=core2" } */ + +union double_union +{ + double d; + int i[2]; +}; + +void bar (int, ...); + +void +foo (double d) +{ + union double_union du = { d }; + while (1) + { + du.i[1] -= 0x100000L; + bar (0, du.d); + du.d += d; + } +} diff --git a/gcc/testsuite/gcc.target/i386/pr48335-1.c b/gcc/testsuite/gcc.target/i386/pr48335-1.c new file mode 100644 index 00000000000..08c5284ea80 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48335-1.c @@ -0,0 +1,32 @@ +/* PR middle-end/48335 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-sra -msse2" } */ + +#include <emmintrin.h> + +typedef __float128 T __attribute__((may_alias)); + +struct S +{ + _Complex double d __attribute__((aligned (16))); +}; + +void bar (struct S); + +void +f1 (T x) +{ + struct S s; + *(T *) &s.d = x; + __real__ s.d *= 7.0; + bar (s); +} + +void +f2 (__m128d x) +{ + struct S s; + _mm_store_pd ((double *) &s.d, x); + __real__ s.d *= 7.0; + bar (s); +} diff --git a/gcc/testsuite/gcc.target/i386/pr48389.c b/gcc/testsuite/gcc.target/i386/pr48389.c new file mode 100644 index 00000000000..d43f664d8b4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48389.c @@ -0,0 +1,13 @@ +/* PR middle-end/48389 */ +/* { dg-do compile } */ +/* { dg-options "-O -mtune=pentiumpro -Wno-abi" } */ +/* { dg-require-effective-target ilp32 } */ +typedef float V2SF __attribute__ ((vector_size (128))); +V2SF foo (int x, V2SF a) +{ + V2SF b = {}; + if (x & 42) + b = a; + a += b; + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/pr48678.c b/gcc/testsuite/gcc.target/i386/pr48678.c new file mode 100644 index 00000000000..6f6727fffa2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48678.c @@ -0,0 +1,16 @@ +/* PR target/48678 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -msse2" } */ + +#include <emmintrin.h> + +typedef short T __attribute__((may_alias)); +struct S { __m128i d; }; + +__m128i +foo (short *x, struct S *y, __m128i *z) +{ + struct S s = *y; + ((T *) &s.d)[0] = *x; + return _mm_cmpeq_epi16 (s.d, *z); +} diff --git a/gcc/testsuite/gcc.target/i386/pr48708.c b/gcc/testsuite/gcc.target/i386/pr48708.c new file mode 100644 index 00000000000..355c2b2691f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48708.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -msse2" } */ + +#include <emmintrin.h> + +typedef long long T __attribute__((may_alias)); +struct S { __m128i d; }; + +__m128i +foo (long long *x, struct S *y, __m128i *z) +{ + struct S s = *y; + ((T *) &s.d)[0] = *x; + return _mm_cmpeq_epi16 (s.d, *z); +} diff --git a/gcc/testsuite/gcc.target/i386/pr48723.c b/gcc/testsuite/gcc.target/i386/pr48723.c new file mode 100644 index 00000000000..ad102090e9f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr48723.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-fstack-check -mavx" } */ + +struct S0 +{ + int f0, f1, f2, f3; +} g_106; + +struct S0 +func_99 () +{ + return (g_106); +} diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-divf-avx.c b/gcc/testsuite/gcc.target/i386/recip-vec-divf-avx.c index dfc4c73dfd6..8aeec20d5c5 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-divf-avx.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-divf-avx.c @@ -1,15 +1,15 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx -mtune=generic -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[32]; +float b[32]; +float r[32]; void t1(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = a[i] / b[i]; } diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-divf.c b/gcc/testsuite/gcc.target/i386/recip-vec-divf.c index 4bdbba79f34..0c0cd42ae8a 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-divf.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-divf.c @@ -1,15 +1,15 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[4]; +float b[4]; +float r[4]; void t1(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = a[i] / b[i]; } diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c index 5a8e6967b42..9cf3cc81be5 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c @@ -1,9 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx -mtune=generic -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[32]; +float b[32]; +float r[32]; extern float sqrtf (float); @@ -11,7 +11,7 @@ void t1(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = a[i] / sqrtf (b[i]); } @@ -19,7 +19,7 @@ void t2(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = sqrtf (a[i] / b[i]); } @@ -27,9 +27,8 @@ void t3(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = sqrtf (a[i]); } -/* Last loop is small enough to be fully unrolled. */ -/* { dg-final { scan-assembler-times "vrsqrtps\[ \\t\]+\[^\n\]*%ymm" 6 } } */ +/* { dg-final { scan-assembler-times "vrsqrtps\[ \\t\]+\[^\n\]*%ymm" 3 } } */ diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c index bcef700ec60..9ac9bd76ce9 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c @@ -1,9 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[4]; +float b[4]; +float r[4]; extern float sqrtf (float); @@ -11,7 +11,7 @@ void t1(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = a[i] / sqrtf (b[i]); } @@ -19,7 +19,7 @@ void t2(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = sqrtf (a[i] / b[i]); } @@ -27,7 +27,7 @@ void t3(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = sqrtf (a[i]); } diff --git a/gcc/testsuite/gcc.target/i386/sse-19.c b/gcc/testsuite/gcc.target/i386/sse-19.c index 7a49a98feab..3025567fd81 100644 --- a/gcc/testsuite/gcc.target/i386/sse-19.c +++ b/gcc/testsuite/gcc.target/i386/sse-19.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=x86-64" } } */ -/* { dg-options "-O3 -march=x86-64 -msse2" } */ +/* { dg-options "-O3 -march=x86-64 -msse2 -mno-ssse3" } */ /* { dg-final { scan-assembler "punpcklbw" } } */ extern void abort(); #include <emmintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c b/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c index db1fbd0a36c..abfe5f3761b 100644 --- a/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c +++ b/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c @@ -10,4 +10,4 @@ test (long long b) return _mm_cvtsi64_si128 (b); } -/* { dg-final { scan-assembler-times "\\*vec_concatv2di_rex64_sse4_1/3" 1 } } */ +/* { dg-final { scan-assembler-times "\\*vec_concatv2di_rex64_sse4_1/4" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/sse2-insvhi.c b/gcc/testsuite/gcc.target/i386/sse2-insvhi.c new file mode 100644 index 00000000000..03a287042f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse2-insvhi.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-options "-O2 -msse2" } */ + +#ifndef CHECK_H +#define CHECK_H "sse2-check.h" +#endif + +#ifndef TEST +#define TEST sse2_test +#endif + +#include CHECK_H + +#include <emmintrin.h> +#include <string.h> + +typedef short T __attribute__((may_alias)); +struct S { __m128i d; }; + +__m128i +__attribute__((noinline)) +foo (__m128i y, short x) +{ + struct S s; + + s.d = y; + ((T *) &s.d)[1] = x; + return s.d; +} + +static void +TEST (void) +{ + union + { + __m128i x; + unsigned int i[4]; + unsigned short s[8]; + } res, val, tmp; + unsigned short ins[4] = { 3, 4, 5, 6 }; + + val.i[0] = 0x35251505; + val.i[1] = 0x75655545; + val.i[2] = 0xB5A59585; + val.i[3] = 0xF5E5D5C5; + + res.x = foo (val.x, ins[3]); + + tmp.x = val.x; + tmp.s[1] = ins[3]; + if (memcmp (&tmp, &res, sizeof (tmp))) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/sse2-maskmovdqu.c b/gcc/testsuite/gcc.target/i386/sse2-maskmovdqu.c new file mode 100644 index 00000000000..b401c85b3bb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse2-maskmovdqu.c @@ -0,0 +1,44 @@ +/* { dg-do run } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-options "-O2 -msse2" } */ + +#ifndef CHECK_H +#define CHECK_H "sse2-check.h" +#endif + +#ifndef TEST +#define TEST sse2_test +#endif + +#include CHECK_H + +#include <emmintrin.h> + +#ifndef MASK +#define MASK 0x7986 +#endif + +#define mask_v(pos) (((MASK & (0x1 << (pos))) >> (pos)) << 7) + +void static +TEST (void) +{ + __m128i src, mask; + char s[16] = { 1,-2,3,-4,5,-6,7,-8,9,-10,11,-12,13,-14,15,-16 }; + char m[16]; + + char u[20] = { 0 }; + int i; + + for (i = 0; i < 16; i++) + m[i] = mask_v (i); + + src = _mm_loadu_si128 ((__m128i *)s); + mask = _mm_loadu_si128 ((__m128i *)m); + + _mm_maskmoveu_si128 (src, mask, u+3); + + for (i = 0; i < 16; i++) + if (u[i+3] != (m[i] ? s[i] : 0)) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/sse2-pinsrw.c b/gcc/testsuite/gcc.target/i386/sse2-pinsrw.c new file mode 100644 index 00000000000..16167437c6d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse2-pinsrw.c @@ -0,0 +1,86 @@ +/* { dg-do run } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-options "-O2 -msse2" } */ + +#ifndef CHECK_H +#define CHECK_H "sse2-check.h" +#endif + +#ifndef TEST +#define TEST sse2_test +#endif + +#include CHECK_H + +#include <emmintrin.h> +#include <string.h> + +#define msk0 0x00 +#define msk1 0x01 +#define msk2 0x02 +#define msk3 0x03 +#define msk4 0x04 +#define msk5 0x05 +#define msk6 0x06 +#define msk7 0x07 + +static void +TEST (void) +{ + union + { + __m128i x; + unsigned int i[4]; + unsigned short s[8]; + } res [8], val, tmp; + int masks[8]; + unsigned short ins[4] = { 3, 4, 5, 6 }; + int i; + + val.i[0] = 0x35251505; + val.i[1] = 0x75655545; + val.i[2] = 0xB5A59585; + val.i[3] = 0xF5E5D5C5; + + /* Check pinsrw imm8, r32, xmm. */ + res[0].x = _mm_insert_epi16 (val.x, ins[0], msk0); + res[1].x = _mm_insert_epi16 (val.x, ins[0], msk1); + res[2].x = _mm_insert_epi16 (val.x, ins[0], msk2); + res[3].x = _mm_insert_epi16 (val.x, ins[0], msk3); + res[4].x = _mm_insert_epi16 (val.x, ins[0], msk4); + res[5].x = _mm_insert_epi16 (val.x, ins[0], msk5); + res[6].x = _mm_insert_epi16 (val.x, ins[0], msk6); + res[7].x = _mm_insert_epi16 (val.x, ins[0], msk7); + + masks[0] = msk0; + masks[1] = msk1; + masks[2] = msk2; + masks[3] = msk3; + masks[4] = msk4; + masks[5] = msk5; + masks[6] = msk6; + masks[7] = msk7; + + for (i = 0; i < 8; i++) + { + tmp.x = val.x; + tmp.s[masks[i]] = ins[0]; + if (memcmp (&tmp, &res[i], sizeof (tmp))) + abort (); + } + + /* Check pinsrw imm8, m16, xmm. */ + for (i = 0; i < 8; i++) + { + res[i].x = _mm_insert_epi16 (val.x, ins[i % 2], msk0); + masks[i] = msk0; + } + + for (i = 0; i < 8; i++) + { + tmp.x = val.x; + tmp.s[masks[i]] = ins[i % 2]; + if (memcmp (&tmp, &res[i], sizeof (tmp))) + abort (); + } +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-ceil-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-ceil-vec.c new file mode 100644 index 00000000000..886dd77c206 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-ceil-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern double ceil (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = ceil (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != ceil (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-ceilf-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-ceilf-vec.c new file mode 100644 index 00000000000..41d59d74eac --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-ceilf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern float ceilf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = ceilf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != ceilf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-floor-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-floor-vec.c new file mode 100644 index 00000000000..02ebe62ec7b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-floor-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern double floor (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = floor (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != floor (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-floorf-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-floorf-vec.c new file mode 100644 index 00000000000..6704892df53 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-floorf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern float floorf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = floorf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != floorf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c new file mode 100644 index 00000000000..75a80733543 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c @@ -0,0 +1,5 @@ +/* { dg-do run { target ilp32 } } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-options "-O2 -msse4.1 -mtune=geode" } */ + +#include "sse4_1-insertps-2.c" diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c new file mode 100644 index 00000000000..30defca25e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c @@ -0,0 +1,92 @@ +/* { dg-do run } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-options "-O2 -msse4.1" } */ + +#ifndef CHECK_H +#define CHECK_H "sse4_1-check.h" +#endif + +#ifndef TEST +#define TEST sse4_1_test +#endif + +#include CHECK_H + +#include <smmintrin.h> +#include <string.h> + +#define msk0 0x41 +#define msk1 0x90 +#define msk2 0xe9 +#define msk3 0x70 + +#define msk4 0xFC +#define msk5 0x05 +#define msk6 0x0A +#define msk7 0x0F + +union + { + __m128 x; + float f[4]; + } val1; + +static void +TEST (void) +{ + union + { + __m128 x; + float f[4]; + } res[8], val2, tmp; + int masks[8]; + int i, j; + + val2.f[0] = 55.0; + val2.f[1] = 55.0; + val2.f[2] = 55.0; + val2.f[3] = 55.0; + + val1.f[0] = 1.; + val1.f[1] = 2.; + val1.f[2] = 3.; + val1.f[3] = 4.; + + asm volatile ("" : "+m" (val1)); + res[0].x = _mm_insert_ps (val2.x, val1.x, msk0); + asm volatile ("" : "+m" (val1)); + res[1].x = _mm_insert_ps (val2.x, val1.x, msk1); + asm volatile ("" : "+m" (val1)); + res[2].x = _mm_insert_ps (val2.x, val1.x, msk2); + asm volatile ("" : "+m" (val1)); + res[3].x = _mm_insert_ps (val2.x, val1.x, msk3); + + masks[0] = msk0; + masks[1] = msk1; + masks[2] = msk2; + masks[3] = msk3; + + for (i = 0; i < 4; i++) + { + asm volatile ("" : "+m" (val1)); + res[i + 4].x = _mm_insert_ps (val2.x, val1.x, msk4); + } + + masks[4] = msk4; + masks[5] = msk4; + masks[6] = msk4; + masks[7] = msk4; + + for (i=0; i < 8; i++) + { + tmp = val2; + tmp.f[(masks[i] & 0x30) >> 4] = val1.f[(masks[i] & 0xC0) >> 6]; + + for (j = 0; j < 4; j++) + if (masks[i] & (0x1 << j)) + tmp.f[j] = 0.f; + + if (memcmp (&res[i], &tmp, sizeof (tmp))) + abort (); + } +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insvdi.c b/gcc/testsuite/gcc.target/i386/sse4_1-insvdi.c new file mode 100644 index 00000000000..da090ba1582 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-insvdi.c @@ -0,0 +1,55 @@ +/* { dg-do run } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-options "-O2 -msse4.1" } */ + +#ifndef CHECK_H +#define CHECK_H "sse4_1-check.h" +#endif + +#ifndef TEST +#define TEST sse4_1_test +#endif + +#include CHECK_H + +#include <smmintrin.h> +#include <string.h> + +typedef long T __attribute__((may_alias)); +struct S { __m128i d; }; + +__m128i +__attribute__((noinline)) +foo (__m128i y, long x) +{ + struct S s; + + s.d = y; + ((T *) &s.d)[1] = x; + return s.d; +} + +static void +TEST (void) +{ + union + { + __m128i x; + unsigned int i[4]; + unsigned long l[2]; + } res, val, tmp; + unsigned long ins[4] = { 3, 4, 5, 6 }; + + val.i[0] = 0x35251505; + val.i[1] = 0x75655545; + val.i[2] = 0xB5A59585; + val.i[3] = 0xF5E5D5C5; + + res.x = foo (val.x, ins[3]); + + tmp.x = val.x; + tmp.l[1] = ins[3]; + if (memcmp (&tmp, &res, sizeof (tmp))) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insvqi.c b/gcc/testsuite/gcc.target/i386/sse4_1-insvqi.c new file mode 100644 index 00000000000..784201e2d94 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-insvqi.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-options "-O2 -msse4.1" } */ + +#ifndef CHECK_H +#define CHECK_H "sse4_1-check.h" +#endif + +#ifndef TEST +#define TEST sse4_1_test +#endif + +#include CHECK_H + +#include <smmintrin.h> +#include <string.h> + +typedef char T __attribute__((may_alias)); +struct S { __m128i d; }; + +__m128i +__attribute__((noinline)) +foo (__m128i y, char x) +{ + struct S s; + + s.d = y; + ((T *) &s.d)[1] = x; + return s.d; +} + +static void +TEST (void) +{ + union + { + __m128i x; + unsigned int i[4]; + unsigned char c[16]; + } res, val, tmp; + unsigned char ins[4] = { 3, 4, 5, 6 }; + + val.i[0] = 0x35251505; + val.i[1] = 0x75655545; + val.i[2] = 0xB5A59585; + val.i[3] = 0xF5E5D5C5; + + res.x = foo (val.x, ins[3]); + + tmp.x = val.x; + tmp.c[1] = ins[3]; + if (memcmp (&tmp, &res, sizeof (tmp))) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insvsi.c b/gcc/testsuite/gcc.target/i386/sse4_1-insvsi.c new file mode 100644 index 00000000000..569b8f269c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-insvsi.c @@ -0,0 +1,53 @@ +/* { dg-do run } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-options "-O2 -msse4.1" } */ + +#ifndef CHECK_H +#define CHECK_H "sse4_1-check.h" +#endif + +#ifndef TEST +#define TEST sse4_1_test +#endif + +#include CHECK_H + +#include <smmintrin.h> +#include <string.h> + +typedef int T __attribute__((may_alias)); +struct S { __m128i d; }; + +__m128i +__attribute__((noinline)) +foo (__m128i y, int x) +{ + struct S s; + + s.d = y; + ((T *) &s.d)[1] = x; + return s.d; +} + +static void +TEST (void) +{ + union + { + __m128i x; + unsigned int i[4]; + } res, val, tmp; + unsigned int ins[4] = { 3, 4, 5, 6 }; + + val.i[0] = 0x35251505; + val.i[1] = 0x75655545; + val.i[2] = 0xB5A59585; + val.i[3] = 0xF5E5D5C5; + + res.x = foo (val.x, ins[3]); + + tmp.x = val.x; + tmp.i[1] = ins[3]; + if (memcmp (&tmp, &res, sizeof (tmp))) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-rint-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-rint-vec.c new file mode 100644 index 00000000000..8df5717a23d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-rint-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern double rint (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = rint (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != rint (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-rintf-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-rintf-vec.c new file mode 100644 index 00000000000..9c97c35bed9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-rintf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern float rintf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = rintf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != rintf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-trunc-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-trunc-vec.c new file mode 100644 index 00000000000..e82dec93f88 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-trunc-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern double trunc (double); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (double *src) +{ + int i, sign = 1; + double f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + double a[NUM]; + double r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = trunc (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != trunc (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-truncf-vec.c b/gcc/testsuite/gcc.target/i386/sse4_1-truncf-vec.c new file mode 100644 index 00000000000..6a267ca94d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse4_1-truncf-vec.c @@ -0,0 +1,54 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ +/* { dg-require-effective-target sse4 } */ +/* { dg-skip-if "no M_PI" { vxworks_kernel } } */ + +#include "sse4_1-check.h" + +#include <math.h> + +extern float truncf (float); + +#define NUM 64 + +static void +__attribute__((__target__("fpmath=sse"))) +init_src (float *src) +{ + int i, sign = 1; + float f = rand (); + + for (i = 0; i < NUM; i++) + { + src[i] = (i + 1) * f * M_PI * sign; + if (i < (NUM / 2)) + { + if ((i % 6) == 0) + f = f * src[i]; + } + else if (i == (NUM / 2)) + f = rand (); + else if ((i % 6) == 0) + f = 1 / (f * (i + 1) * src[i] * M_PI * sign); + sign = -sign; + } +} + +static void +__attribute__((__target__("fpmath=387"))) +sse4_1_test (void) +{ + float a[NUM]; + float r[NUM]; + int i; + + init_src (a); + + for (i = 0; i < NUM; i++) + r[i] = truncf (a[i]); + + /* check results: */ + for (i = 0; i < NUM; i++) + if (r[i] != truncf (a[i])) + abort(); +} diff --git a/gcc/testsuite/gcc.target/i386/ssefn-1.c b/gcc/testsuite/gcc.target/i386/ssefn-1.c index bea6cb2bf0b..786a0835dc6 100644 --- a/gcc/testsuite/gcc.target/i386/ssefn-1.c +++ b/gcc/testsuite/gcc.target/i386/ssefn-1.c @@ -8,7 +8,7 @@ /* { dg-final { scan-assembler-not "movsd" } } */ /* { dg-final { scan-assembler-not "mulsd" } } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */ -/* { dg-options "-O2 -march=i386 -msse -mfpmath=sse -fno-inline" } */ +/* { dg-options "-O2 -march=i386 -msse -mno-sse2 -mfpmath=sse -fno-inline" } */ static float xs (void) { diff --git a/gcc/testsuite/gcc.target/i386/vecinit-1.c b/gcc/testsuite/gcc.target/i386/vecinit-1.c index a5091cd85f0..17e29598516 100644 --- a/gcc/testsuite/gcc.target/i386/vecinit-1.c +++ b/gcc/testsuite/gcc.target/i386/vecinit-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8 -msse2" } */ +/* { dg-options "-O2 -march=k8 -msse2 -mno-sse4" } */ #define vector __attribute__((vector_size(16))) diff --git a/gcc/testsuite/gcc.target/i386/vecinit-2.c b/gcc/testsuite/gcc.target/i386/vecinit-2.c index 52998a6bfc0..d7b910062d7 100644 --- a/gcc/testsuite/gcc.target/i386/vecinit-2.c +++ b/gcc/testsuite/gcc.target/i386/vecinit-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8 -msse2" } */ +/* { dg-options "-O2 -march=k8 -msse2 -mno-sse4" } */ #define vector __attribute__((vector_size(16))) diff --git a/gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_x.c b/gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_x.c index 076b399a384..38339cad894 100644 --- a/gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_x.c +++ b/gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_x.c @@ -89,7 +89,7 @@ extern _Complex double (*pcd10) (double, double); #define CHECK_RESULT(x, y) if ((x) != (y)) abort () #define CHECK_VOID_RESULT(x, y) CHECK_RESULT (((x), the_result), y) -/* Call functions through pointers and and check against expected results. */ +/* Call functions through pointers and check against expected results. */ void test (void) { diff --git a/gcc/testsuite/gcc.target/mips/madd-7.c b/gcc/testsuite/gcc.target/mips/madd-7.c index 93ed0fc6f06..b43d7207427 100644 --- a/gcc/testsuite/gcc.target/mips/madd-7.c +++ b/gcc/testsuite/gcc.target/mips/madd-7.c @@ -1,5 +1,4 @@ -/* -mlong32 added because of PR target/38598. */ -/* { dg-options "-O2 -march=5kc -mlong32" } */ +/* { dg-options "-O2 -march=5kc" } */ /* { dg-final { scan-assembler-not "\tmul\t" } } */ /* { dg-final { scan-assembler "\tmadd\t" } } */ diff --git a/gcc/testsuite/gcc.target/mips/msub-7.c b/gcc/testsuite/gcc.target/mips/msub-7.c index ca90cee9ea5..7ae96acb42e 100644 --- a/gcc/testsuite/gcc.target/mips/msub-7.c +++ b/gcc/testsuite/gcc.target/mips/msub-7.c @@ -1,5 +1,4 @@ -/* -mlong32 added because of PR target/38598. */ -/* { dg-options "-O2 -march=5kc -mlong32" } */ +/* { dg-options "-O2 -march=5kc" } */ /* { dg-final { scan-assembler-not "\tmul\t" } } */ /* { dg-final { scan-assembler "\tmsub\t" } } */ diff --git a/gcc/testsuite/gcc.target/mips/reg-var-1.c b/gcc/testsuite/gcc.target/mips/reg-var-1.c new file mode 100644 index 00000000000..d8b8118103a --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/reg-var-1.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ +register int g asm ("$18"); + +void __attribute__((noinline)) +test (void) +{ + g = g + 1; +} + +int +main (void) +{ + g = 2; + test (); + return g != 3; +} diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-pow.c b/gcc/testsuite/gcc.target/powerpc/ppc-pow.c index 1255d5c5966..e88125c1d98 100644 --- a/gcc/testsuite/gcc.target/powerpc/ppc-pow.c +++ b/gcc/testsuite/gcc.target/powerpc/ppc-pow.c @@ -2,8 +2,8 @@ /* { dg-options "-O2 -ffast-math -mcpu=power6" } */ /* { dg-final { scan-assembler-times "fsqrt" 3 } } */ /* { dg-final { scan-assembler-times "fmul" 1 } } */ -/* { dg-final { scan-assembler-times "bl pow" 1 } } */ -/* { dg-final { scan-assembler-times "bl sqrt" 1 } } */ +/* { dg-final { scan-assembler-times "bl? pow" 1 } } */ +/* { dg-final { scan-assembler-times "bl? sqrt" 1 } } */ double do_pow_0_75_default (double a) diff --git a/gcc/testsuite/gcc.target/powerpc/pr47755-2.c b/gcc/testsuite/gcc.target/powerpc/pr47755-2.c index 2180efdbe42..5edcc118eeb 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr47755-2.c +++ b/gcc/testsuite/gcc.target/powerpc/pr47755-2.c @@ -1,6 +1,6 @@ /* { dg-do run { target { powerpc*-*-* } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-require-effective-target vsx_hw } */ /* { dg-options "-O3 -mcpu=power7" } */ /* PR 47755: Make sure compiler generates correct code for various diff --git a/gcc/testsuite/gcc.target/powerpc/pr48053-3.c b/gcc/testsuite/gcc.target/powerpc/pr48053-3.c new file mode 100644 index 00000000000..399b3d3ea36 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48053-3.c @@ -0,0 +1,41 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7" } */ + +/* Cut down example from s_scalbnl that aborted on 32-bit when the fix for + 48053 went in to allow creating DImode 0's in VSX registers. */ + +typedef union +{ + long double value; + struct + { + unsigned long long msw; + unsigned long long lsw; + } parts64; + struct + { + unsigned int w0, w1, w2, w3; + } parts32; +} ieee854_long_double_shape_type; + +static const long double twolm54 = 5.55111512312578270212e-17; + +long double foo (long double x, int n) +{ + long long k, hx, lx; + ieee854_long_double_shape_type qw_u; + + qw_u.value = x; + hx = qw_u.parts64.msw; + lx = qw_u.parts64.lsw; + + k = ((hx >> 52) & 0x7ff) + n + 54; + + qw_u.parts64.msw = ((hx & 0x800fffffffffffffULL) | (k << 52)); + qw_u.parts64.lsw = lx; + x = qw_u.value; + + return x*twolm54; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr48192.c b/gcc/testsuite/gcc.target/powerpc/pr48192.c new file mode 100644 index 00000000000..5159260857c --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48192.c @@ -0,0 +1,49 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7 -std=gnu89" } */ + +/* Make sure that the conditional macros vector, bool, and pixel are not + considered as being defined. */ + +#ifdef bool +#error "bool is considered defined" +#endif + +#ifdef vector +#error "vector is considered defined" +#endif + +#ifdef pixel +#error "pixel is condsidered defined" +#endif + +#if defined(bool) +#error "bool is considered defined" +#endif + +#if defined(vector) +#error "vector is considered defined" +#endif + +#if defined(pixel) +#error "pixel is condsidered defined" +#endif + +#ifndef bool +#else +#error "bool is considered defined" +#endif + +#ifndef vector +#else +#error "vector is considered defined" +#endif + +#ifndef pixel +#else +#error "pixel is condsidered defined" +#endif + +#define bool long double +bool pixel = 0; diff --git a/gcc/testsuite/gcc.target/powerpc/pr48226.c b/gcc/testsuite/gcc.target/powerpc/pr48226.c new file mode 100644 index 00000000000..a436f1da5c1 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48226.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7" } */ + +/* The bug shows up if you compile with -maltivec or -mcpu=power7, due to one + of the vector's being eliminated due to rs6000_macro_to_expand being called + recursively. */ + +struct vector { + float v[4]; +}; + +struct vector vector = { 1.0, 2.0, 3.0, 4.0 }; diff --git a/gcc/testsuite/gcc.target/powerpc/pr48258-1.c b/gcc/testsuite/gcc.target/powerpc/pr48258-1.c new file mode 100644 index 00000000000..4f37815d384 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48258-1.c @@ -0,0 +1,57 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7 -mabi=altivec -ffast-math -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-times "xvaddsp" 3 } } */ +/* { dg-final { scan-assembler-times "xvminsp" 3 } } */ +/* { dg-final { scan-assembler-times "xvmaxsp" 3 } } */ +/* { dg-final { scan-assembler-times "xxsldwi" 6 } } */ +/* { dg-final { scan-assembler-times "xscvspdp" 3 } } */ +/* { dg-final { scan-assembler-not "stvewx" } } */ +/* { dg-final { scan-assembler-not "stvx" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxvw4x" } } */ + +#include <stddef.h> + +#ifndef SIZE +#define SIZE 1024 +#endif + +float values[SIZE] __attribute__((__aligned__(32))); + +float +vector_sum (void) +{ + size_t i; + float sum = 0.0f; + + for (i = 0; i < SIZE; i++) + sum += values[i]; + + return sum; +} + +float +vector_min (void) +{ + size_t i; + float min = values[0]; + + for (i = 0; i < SIZE; i++) + min = __builtin_fminf (min, values[i]); + + return min; +} + +float +vector_max (void) +{ + size_t i; + float max = values[0]; + + for (i = 0; i < SIZE; i++) + max = __builtin_fmaxf (max, values[i]); + + return max; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr48258-2.c b/gcc/testsuite/gcc.target/powerpc/pr48258-2.c new file mode 100644 index 00000000000..443fb624e30 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48258-2.c @@ -0,0 +1,58 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7 -mabi=altivec -ffast-math -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-times "xvadddp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmindp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmaxdp" 1 } } */ +/* { dg-final { scan-assembler-times "xsadddp" 1 } } */ +/* { dg-final { scan-assembler-times "xsmindp" 1 } } */ +/* { dg-final { scan-assembler-times "xsmaxdp" 1 } } */ +/* { dg-final { scan-assembler-not "xxsldwi" } } */ +/* { dg-final { scan-assembler-not "stvx" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxvw4x" } } */ + +#include <stddef.h> + +#ifndef SIZE +#define SIZE 1024 +#endif + +double values[SIZE] __attribute__((__aligned__(32))); + +double +vector_sum (void) +{ + size_t i; + double sum = 0.0; + + for (i = 0; i < SIZE; i++) + sum += values[i]; + + return sum; +} + +double +vector_min (void) +{ + size_t i; + double min = values[0]; + + for (i = 0; i < SIZE; i++) + min = __builtin_fmin (min, values[i]); + + return min; +} + +double +vector_max (void) +{ + size_t i; + double max = values[0]; + + for (i = 0; i < SIZE; i++) + max = __builtin_fmax (max, values[i]); + + return max; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr48857.c b/gcc/testsuite/gcc.target/powerpc/pr48857.c new file mode 100644 index 00000000000..e8201c037de --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48857.c @@ -0,0 +1,25 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -mcpu=power7 -mabi=altivec" } */ +/* { dg-final { scan-assembler-times "lxvd2x" 1 } } */ +/* { dg-final { scan-assembler-times "stxvd2x" 1 } } */ +/* { dg-final { scan-assembler-not "ld" } } */ +/* { dg-final { scan-assembler-not "lwz" } } */ +/* { dg-final { scan-assembler-not "stw" } } */ +/* { dg-final { scan-assembler-not "addi" } } */ + +typedef vector long long v2di_type; + +v2di_type +return_v2di (v2di_type *ptr) +{ + return *ptr; /* should generate lxvd2x 34,0,3. */ +} + +void +pass_v2di (v2di_type arg, v2di_type *ptr) +{ + *ptr = arg; /* should generate stxvd2x 34,0,{3,5}. */ +} + diff --git a/gcc/testsuite/gcc.target/rx/pack.c b/gcc/testsuite/gcc.target/rx/pack.c index 97c44f05d69..ce13b5021b2 100644 --- a/gcc/testsuite/gcc.target/rx/pack.c +++ b/gcc/testsuite/gcc.target/rx/pack.c @@ -4,10 +4,10 @@ typedef unsigned short INT16U; typedef struct tst_2 { - INT16U f0; // [+0] - INT16U * f1; // [+2] - INT16U f2; // [+6] - INT16U * f3; // [+8] + INT16U f0; /* [+0] */ + INT16U * f1; /* [+2] */ + INT16U f2; /* [+6] */ + INT16U * f3; /* [+8] */ } __attribute__ ((__packed__)) t2; #include <stddef.h> diff --git a/gcc/testsuite/gfortran.dg/bessel_1.f90 b/gcc/testsuite/gfortran.dg/bessel_1.f90 index 728c5ce49ca..fb1e19beef5 100644 --- a/gcc/testsuite/gfortran.dg/bessel_1.f90 +++ b/gcc/testsuite/gfortran.dg/bessel_1.f90 @@ -26,11 +26,11 @@ program test call check(bessel_yn (3,x4), bessel_yn (3,1.9_4)) contains - subroutine check_r4 (a, b) + subroutine check_r4 (a, b) ! { dg-warning "Extension: Internal procedure" } real(kind=4), intent(in) :: a, b if (abs(a - b) > 1.e-5 * abs(b)) call abort end subroutine - subroutine check_r8 (a, b) + subroutine check_r8 (a, b) ! { dg-warning "Extension: Internal procedure" } real(kind=8), intent(in) :: a, b if (abs(a - b) > 1.e-7 * abs(b)) call abort end subroutine diff --git a/gcc/testsuite/gfortran.dg/bessel_6.f90 b/gcc/testsuite/gfortran.dg/bessel_6.f90 index e760d4cdb74..eca92cbd756 100644 --- a/gcc/testsuite/gfortran.dg/bessel_6.f90 +++ b/gcc/testsuite/gfortran.dg/bessel_6.f90 @@ -1,4 +1,5 @@ ! { dg-do run { xfail spu-*-* } } +! { dg-add-options ieee } ! ! PR fortran/36158 ! PR fortran/33197 @@ -16,7 +17,7 @@ real,parameter :: myeps(size(values)) = epsilon(0.0) & ! more tolerant ! * [0, 5, 3, 4, 6, 7, 7, 5, 5, 6, 66, 4 ] integer,parameter :: mymax(size(values)) = & - [100, 17, 23, 21, 27, 28, 32, 35, 36, 41, 47, 37 ] + [100, 17, 23, 21, 27, 28, 32, 35, 31, 41, 47, 37 ] integer, parameter :: Nmax = 100 real :: rec(0:Nmax), lib(0:Nmax) integer :: i @@ -39,8 +40,9 @@ lib(0:mymax) = [ (BESSEL_JN(i, X), i=0,mymax) ] do i = 0, mymax ! print '(i2,2e17.9,e12.2,f18.10,2l3)', i, rec(i), lib(i), & ! rec(i)-lib(i), ((rec(i)-lib(i))/rec(i))/epsilon(x), & -! rec(i) == lib(i) .or. abs((rec(i)-lib(i))/rec(i)) < myeps -if (.not. (rec(i) == lib(i) .or. abs((rec(i)-lib(i))/rec(i)) < myeps)) & +! rec(i) == lib(i), abs((rec(i)-lib(i))/rec(i)) < myeps +if (rec(i) == lib(i)) CYCLE +if (abs((rec(i)-lib(i))/rec(i)) > myeps) & call abort() end do diff --git a/gcc/testsuite/gfortran.dg/bessel_7.f90 b/gcc/testsuite/gfortran.dg/bessel_7.f90 index 10a6e966dfa..78f1ff25128 100644 --- a/gcc/testsuite/gfortran.dg/bessel_7.f90 +++ b/gcc/testsuite/gfortran.dg/bessel_7.f90 @@ -1,4 +1,5 @@ ! { dg-do run { xfail *-*-mingw* spu-*-* } } +! { dg-add-options ieee } ! ! PR fortran/36158 ! PR fortran/33197 diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_22.f90 b/gcc/testsuite/gfortran.dg/bind_c_usage_22.f90 new file mode 100644 index 00000000000..861f8c7cfd8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_usage_22.f90 @@ -0,0 +1,64 @@ +! { dg-do compile } +! { dg-options "-std=f2008tr" } +! +! PR fortran/48858 +! PR fortran/48820 +! +! OPTIONAL + BIND(C) is allowed since TR 29113 +! + +! VALID +subroutine sub(z) bind(C) + use iso_c_binding + integer(c_int), value :: z +end subroutine sub + +! VALID since TR29113 +subroutine sub2(z) bind(C) + use iso_c_binding + integer(c_int), optional :: z +end subroutine sub2 + +! VALID since TR29113 +subroutine sub2a(z) bind(C) + use iso_c_binding + integer(c_int) :: z + optional :: z +end subroutine sub2a + +! VALID since TR29113 +subroutine sub2b(z) bind(C) + use iso_c_binding + optional :: z + integer(c_int) :: z +end subroutine sub2b + +! Invalid +subroutine sub3(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + integer(c_int), value, optional :: z +end subroutine sub3 + +! Invalid +subroutine sub3a(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + integer(c_int) :: z + optional :: z + value :: z +end subroutine sub3a + +! Invalid +subroutine sub3b(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + optional :: z + value :: z + integer(c_int) :: z +end subroutine sub3b + +! Invalid +subroutine sub3c(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + value :: z + integer(c_int) :: z + optional :: z +end subroutine sub3c diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_23.f90 b/gcc/testsuite/gfortran.dg/bind_c_usage_23.f90 new file mode 100644 index 00000000000..374f8129136 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_usage_23.f90 @@ -0,0 +1,64 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! PR fortran/48858 +! PR fortran/48820 +! +! OPTIONAL + BIND(C) is allowed since TR 29113 +! + +! VALID +subroutine sub(z) bind(C) + use iso_c_binding + integer(c_int), value :: z +end subroutine sub + +! VALID since TR29113 +subroutine sub2(z) bind(C) ! { dg-error "with OPTIONAL attribute in procedure" } + use iso_c_binding + integer(c_int), optional :: z +end subroutine sub2 + +! VALID since TR29113 +subroutine sub2a(z) bind(C) ! { dg-error "with OPTIONAL attribute in procedure" } + use iso_c_binding + integer(c_int) :: z + optional :: z +end subroutine sub2a + +! VALID since TR29113 +subroutine sub2b(z) bind(C) ! { dg-error "with OPTIONAL attribute in procedure" } + use iso_c_binding + optional :: z + integer(c_int) :: z +end subroutine sub2b + +! Invalid +subroutine sub3(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + integer(c_int), value, optional :: z +end subroutine sub3 + +! Invalid +subroutine sub3a(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + integer(c_int) :: z + optional :: z + value :: z +end subroutine sub3a + +! Invalid +subroutine sub3b(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + optional :: z + value :: z + integer(c_int) :: z +end subroutine sub3b + +! Invalid +subroutine sub3c(z) bind(C) ! { dg-error "cannot have both the OPTIONAL and the VALUE attribute" } + use iso_c_binding + value :: z + integer(c_int) :: z + optional :: z +end subroutine sub3c diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_24.f90 b/gcc/testsuite/gfortran.dg/bind_c_usage_24.f90 new file mode 100644 index 00000000000..703ab5f19fa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_usage_24.f90 @@ -0,0 +1,43 @@ +! { dg-do run } +! { dg-additional-sources bind_c_usage_24_c.c } +! +! PR fortran/48858 +! PR fortran/48820 +! +! TR 29113: BIND(C) with OPTIONAL +! +module m + use iso_c_binding + interface + subroutine c_proc (is_present, var) bind(C) + import + logical(c_bool), value :: is_present + integer(c_int), optional :: var + end subroutine + end interface +contains + subroutine subtest (is_present, var) bind(C) + logical(c_bool), intent(in), value :: is_present + integer(c_int), intent(inout), optional :: var + if (is_present) then + if (.not. present (var)) call abort () + if (var /= 43) call abort () + var = -45 + else + if (present (var)) call abort () + end if + end subroutine subtest +end module m + +program test + use m + implicit none + integer :: val + + val = 4 + call c_proc (.false._c_bool) + call c_proc (.true._c_bool, val) + if (val /= 7) call abort () +end program test + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_24_c.c b/gcc/testsuite/gfortran.dg/bind_c_usage_24_c.c new file mode 100644 index 00000000000..ffc90b728b5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_usage_24_c.c @@ -0,0 +1,24 @@ +/* Compiled and linked by bind_c.f90. */ + +#include <stdlib.h> + +void subtest (_Bool, int *); + +void +c_proc (_Bool present, int *val) +{ + int val2; + if (!present && val) + abort (); + else if (present) + { + if (!val) abort (); + if (*val != 4) abort (); + *val = 7; + } + + val2 = 43; + subtest (1, &val2); + subtest (0, NULL); + if (val2 != -45) abort (); +} diff --git a/gcc/testsuite/gfortran.dg/c_f_pointer_tests_3.f90 b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_3.f90 index 3b28f52b4e7..f7d6fa78eb4 100644 --- a/gcc/testsuite/gfortran.dg/c_f_pointer_tests_3.f90 +++ b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_3.f90 @@ -30,6 +30,6 @@ end program test ! { dg-final { scan-tree-dump-times " fptr = .integer.kind=4. .. cptr" 1 "original" } } ! ! Check c_f_procpointer -! { dg-final { scan-tree-dump-times " fprocptr = .integer.kind=4. .\\*<.*>. .void.. cfunptr;" 1 "original" } } +! { dg-final { scan-tree-dump-times " fprocptr = .integer.kind=4. .\\*<.*>. ... cfunptr;" 1 "original" } } ! ! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/char4_iunit_1.f03 b/gcc/testsuite/gfortran.dg/char4_iunit_1.f03 index 5b1b285adf2..f02cc1a7b5b 100644 --- a/gcc/testsuite/gfortran.dg/char4_iunit_1.f03 +++ b/gcc/testsuite/gfortran.dg/char4_iunit_1.f03 @@ -5,7 +5,7 @@ ! Test case prepared by Jerry DeLisle <jvdelisle@gcc.gnu.org> program char4_iunit_1 implicit none - character(kind=4,len=42) :: string + character(kind=4,len=44) :: string integer(kind=4) :: i,j real(kind=4) :: inf, nan, large @@ -24,11 +24,11 @@ program char4_iunit_1 write(string, *) .true., .false. , .true. if (string .ne. 4_" T F T ") call abort write(string, *) 1.2345e-06, 4.2846e+10_8 - if (string .ne. 4_" 1.23450002E-06 42846000000.000000 ") call abort + if (string .ne. 4_" 1.23450002E-06 42846000000.000000 ") call abort write(string, *) nan, inf - if (string .ne. 4_" NaN Infinity ") call abort + if (string .ne. 4_" NaN Infinity ") call abort write(string, '(10x,f3.1,3x,f9.1)') nan, inf - if (string .ne. 4_" NaN Infinity ") call abort + if (string .ne. 4_" NaN Infinity ") call abort write(string, *) (1.2, 3.4 ) - if (string .ne. 4_" ( 1.2000000 , 3.4000001 ) ") call abort + if (string .ne. 4_" ( 1.20000005 , 3.40000010 ) ") call abort end program char4_iunit_1 diff --git a/gcc/testsuite/gfortran.dg/char4_iunit_2.f03 b/gcc/testsuite/gfortran.dg/char4_iunit_2.f03 index 074321274ca..cbf0f7fbd3d 100644 --- a/gcc/testsuite/gfortran.dg/char4_iunit_2.f03 +++ b/gcc/testsuite/gfortran.dg/char4_iunit_2.f03 @@ -43,5 +43,5 @@ program char4_iunit_2 write(widestring,*)"test",i, x, str_default,& trim(str_char4) if (widestring .ne. & - k_" test 345 52.542999 0 hijklmnp qwertyuiopasd") call abort + k_" test 345 52.5429993 0 hijklmnp qwertyuiopasd") call abort end program char4_iunit_2 diff --git a/gcc/testsuite/gfortran.dg/character_comparison_8.f90 b/gcc/testsuite/gfortran.dg/character_comparison_8.f90 new file mode 100644 index 00000000000..54e31a6454b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/character_comparison_8.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +! { dg-options "-O -fdump-tree-original" } +! Check for compile-time optimization of LLE and friends. +program main + character(3) :: a + a = 'ab' + if (.not. LLE(a,a)) call abort + if (LLT(a,a)) call abort + if (.not. LGE(a,a)) call abort + if (LGT(a,a)) call abort +end program main +! { dg-final { scan-tree-dump-times "gfortran_compare_string" 0 "original" } } +! { dg-final { cleanup-tree-dump "original" } } + diff --git a/gcc/testsuite/gfortran.dg/class_42.f03 b/gcc/testsuite/gfortran.dg/class_42.f03 new file mode 100644 index 00000000000..dd59835cc84 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_42.f03 @@ -0,0 +1,16 @@ +! { dg-do compile } +! +! PR 48291: [4.6/4.7 Regression] [OOP] internal compiler error, new_symbol(): Symbol name too long +! +! Contributed by Adrian Prantl <adrian@llnl.gov> + +module Overload_AnException_Impl + type :: Overload_AnException_impl_t + end type +contains + subroutine ctor_impl(self) + class(Overload_AnException_impl_t) :: self + end subroutine +end module + +! { dg-final { cleanup-modules "Overload_AnException_Impl" } } diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp new file mode 100644 index 00000000000..c7e46f6bedc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp @@ -0,0 +1,76 @@ +# Copyright (C) 2011 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. +# +# Contributed by Tobias Burnus <burnus@net-b.de> + + +# Test coarray support. +# +# For the compilation tests, all files are compiles with the +# option -fcoarray=single and with -fcoarray=lib +# +# For the link and execution tests, for -fcoarray=lib the +# libcaf_single library is linked. Additionally, with the +# required settings another CAF library is used. + +# Load procedures from common libraries. +load_lib gfortran-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_FFLAGS +if ![info exists DEFAULT_FFLAGS] then { + set DEFAULT_FFLAGS " -pedantic-errors" +} + +dg-init + +global runtests +global DG_TORTURE_OPTIONS torture_with_loops + +torture-init +set-torture-options $DG_TORTURE_OPTIONS + +# Main loop. +foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $test] then { + continue + } + +# Enable if you want to test several options: +# # look if this is dg-do-run test, in which case +# # we cycle through the option list, otherwise we don't +# if [expr [search_for $test "dg-do run"]] { +# set option_list $torture_with_loops +# } else { +# set option_list [list { -O } ] +# } + set option_list [list { -O2 } ] + + set nshort [file tail [file dirname $test]]/[file tail $test] + + foreach flags $option_list { + verbose "Testing $nshort (single), $flags" 1 + dg-test $test "-fcoarray=single $flags" "" + } + + foreach flags $option_list { + verbose "Testing $nshort (libcaf_single), $flags" 1 + dg-test $test "-fcoarray=lib $flags -lcaf_single" "" + } +} +torture-finish +dg-finish diff --git a/gcc/testsuite/gfortran.dg/coarray/image_index_1.f90 b/gcc/testsuite/gfortran.dg/coarray/image_index_1.f90 new file mode 100644 index 00000000000..00e5e09a74f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/image_index_1.f90 @@ -0,0 +1,99 @@ +! { dg-do run } +! +! Run-time test for IMAGE_INDEX with cobounds only known at +! the compile time, suitable for any number of NUM_IMAGES() +! For compile-time cobounds, the -fcoarray=lib version still +! needs to run-time evalulation if image_index returns > 1 +! as image_index is 0 if the index would exceed num_images(). +! +! Please set num_images() to >= 13, if possible. +! +! PR fortran/18918 +! + +program test_image_index +implicit none +integer :: index1, index2, index3 +logical :: one + +integer, allocatable :: a(:)[:,:,:], b(:)[:,:], c(:,:)[:] +integer, save :: d(2)[-1:3, *] +integer, save :: e(2)[-1:-1, 3:*] + +one = num_images() == 1 + +allocate(a(1)[3:3, -4:-3, 88:*]) +allocate(b(2)[-1:0,0:*]) +allocate(c(3,3)[*]) + +index1 = image_index(a, [3, -4, 88] ) +index2 = image_index(b, [-1, 0] ) +index3 = image_index(c, [1] ) +if (index1 /= 1 .or. index2 /= 1 .or. index3 /= 1) call abort() + + +index1 = image_index(a, [3, -3, 88] ) +index2 = image_index(b, [0, 0] ) +index3 = image_index(c, [2] ) + +if (one .and. (index1 /= 0 .or. index2 /= 0 .or. index3 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 2 .or. index2 /= 2 .or. index3 /= 2)) & + call abort() + + +index1 = image_index(d, [-1, 1] ) +index2 = image_index(d, [0, 1] ) + +if (one .and. (index1 /= 1 .or. index2 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) & + call abort() + +index1 = image_index(e, [-1, 3] ) +index2 = image_index(e, [-1, 4] ) + +if (one .and. (index1 /= 1 .or. index2 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) & + call abort() + +call test(1, a,b,c) + +! The following test is in honour of the F2008 standard: +deallocate(a) +allocate(a (10) [10, 0:9, 0:*]) + +index1 = image_index(a, [1, 0, 0] ) +index2 = image_index(a, [3, 1, 2] ) ! = 213, yeah! +index3 = image_index(a, [3, 1, 0] ) ! = 13 + +if (num_images() < 13 .and. (index1 /= 1 .or. index2 /= 0 .or. index3 /= 0)) & + call abort() +if (num_images() >= 213 .and. (index1 /= 1 .or. index2 /= 213 .or. index3 /= 13)) & + call abort() +if (num_images() >= 13 .and. (index1 /= 1 .or. index2 /= 0 .or. index3 /= 13)) & + call abort() + + +contains +subroutine test(n, a, b, c) + integer :: n + integer :: a(1)[3*n:3*n, -4*n:-3*n, 88*n:*], b(2)[-1*n:0*n,0*n:*], c(3*n,3*n)[*] + + index1 = image_index(a, [3, -4, 88] ) + index2 = image_index(b, [-1, 0] ) + index3 = image_index(c, [1] ) + if (index1 /= 1 .or. index2 /= 1 .or. index3 /= 1) call abort() + + + index1 = image_index(a, [3, -3, 88] ) + index2 = image_index(b, [0, 0] ) + index3 = image_index(c, [2] ) + + if (one .and. (index1 /= 0 .or. index2 /= 0 .or. index3 /= 0)) & + call abort() + if (.not. one .and. (index1 /= 2 .or. index2 /= 2 .or. index3 /= 2)) & + call abort() +end subroutine test +end program test_image_index diff --git a/gcc/testsuite/gfortran.dg/coarray/this_image_1.f90 b/gcc/testsuite/gfortran.dg/coarray/this_image_1.f90 new file mode 100644 index 00000000000..9ee4b153231 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/this_image_1.f90 @@ -0,0 +1,196 @@ +! { dg-do run } +! +! PR fortran/18918 +! +! this_image(coarray) run test, +! expecially for num_images > 1 +! +! Tested are values up to num_images == 8, +! higher values are OK, but not tested for +! +implicit none +integer :: a(1)[2:2, 3:4, 7:*] +integer :: b(:)[:, :,:] +allocatable :: b +integer :: i + +if (this_image(A, dim=1) /= 2) call abort() +i = 1 +if (this_image(A, dim=i) /= 2) call abort() + +select case (this_image()) + case (1) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 7) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 7) call abort() + if (any (this_image(A) /= [2,3,7])) call abort() + + case (2) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 7) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 7) call abort() + if (any (this_image(A) /= [2,4,7])) call abort() + + case (3) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 8) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 8) call abort() + if (any (this_image(A) /= [2,3,8])) call abort() + + case (4) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 8) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 8) call abort() + if (any (this_image(A) /= [2,4,8])) call abort() + + case (5) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 9) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 9) call abort() + if (any (this_image(A) /= [2,3,9])) call abort() + + case (6) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 9) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 9) call abort() + if (any (this_image(A) /= [2,4,9])) call abort() + + case (7) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 10) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 10) call abort() + if (any (this_image(A) /= [2,3,10])) call abort() + + case (8) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 10) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 10) call abort() + if (any (this_image(A) /= [2,4,10])) call abort() +end select + + +allocate (b(3)[-1:0,2:4,*]) + +select case (this_image()) + case (1) + if (this_image(B, dim=1) /= -1) call abort() + if (this_image(B, dim=2) /= 2) call abort() + if (this_image(B, dim=3) /= 1) call abort() + i = 1 + if (this_image(B, dim=i) /= -1) call abort() + i = 2 + if (this_image(B, dim=i) /= 2) call abort() + i = 3 + if (this_image(B, dim=i) /= 1) call abort() + if (any (this_image(B) /= [-1,2,1])) call abort() + + case (2) + if (this_image(B, dim=1) /= 0) call abort() + if (this_image(B, dim=2) /= 2) call abort() + if (this_image(B, dim=3) /= 1) call abort() + i = 1 + if (this_image(B, dim=i) /= 0) call abort() + i = 2 + if (this_image(B, dim=i) /= 2) call abort() + i = 3 + if (this_image(B, dim=i) /= 1) call abort() + if (any (this_image(B) /= [0,2,1])) call abort() + + case (3) + if (this_image(B, dim=1) /= -1) call abort() + if (this_image(B, dim=2) /= 3) call abort() + if (this_image(B, dim=3) /= 1) call abort() + i = 1 + if (this_image(B, dim=i) /= -1) call abort() + i = 2 + if (this_image(B, dim=i) /= 3) call abort() + i = 3 + if (this_image(B, dim=i) /= 1) call abort() + if (any (this_image(B) /= [-1,3,1])) call abort() + + case (4) + if (this_image(B, dim=1) /= 0) call abort() + if (this_image(B, dim=2) /= 3) call abort() + if (this_image(B, dim=3) /= 1) call abort() + i = 1 + if (this_image(B, dim=i) /= 0) call abort() + i = 2 + if (this_image(B, dim=i) /= 3) call abort() + i = 3 + if (this_image(B, dim=i) /= 1) call abort() + if (any (this_image(B) /= [0,3,1])) call abort() + + case (5) + if (this_image(B, dim=1) /= -1) call abort() + if (this_image(B, dim=2) /= 4) call abort() + if (this_image(B, dim=3) /= 1) call abort() + i = 1 + if (this_image(B, dim=i) /= -1) call abort() + i = 2 + if (this_image(B, dim=i) /= 4) call abort() + i = 3 + if (this_image(B, dim=i) /= 1) call abort() + if (any (this_image(B) /= [-1,4,1])) call abort() + + case (6) + if (this_image(B, dim=1) /= 0) call abort() + if (this_image(B, dim=2) /= 4) call abort() + if (this_image(B, dim=3) /= 1) call abort() + i = 1 + if (this_image(B, dim=i) /= 0) call abort() + i = 2 + if (this_image(B, dim=i) /= 4) call abort() + i = 3 + if (this_image(B, dim=i) /= 1) call abort() + if (any (this_image(B) /= [0,4,1])) call abort() + + case (7) + if (this_image(B, dim=1) /= -1) call abort() + if (this_image(B, dim=2) /= 2) call abort() + if (this_image(B, dim=3) /= 2) call abort() + i = 1 + if (this_image(B, dim=i) /= -1) call abort() + i = 2 + if (this_image(B, dim=i) /= 2) call abort() + i = 3 + if (this_image(B, dim=i) /= 2) call abort() + if (any (this_image(B) /= [-1,2,2])) call abort() + + case (8) + if (this_image(B, dim=1) /= 0) call abort() + if (this_image(B, dim=2) /= 2) call abort() + if (this_image(B, dim=3) /= 2) call abort() + i = 1 + if (this_image(B, dim=i) /= 0) call abort() + i = 2 + if (this_image(B, dim=i) /= 2) call abort() + i = 3 + if (this_image(B, dim=i) /= 2) call abort() + if (any (this_image(B) /= [0,2,2])) call abort() +end select + +end diff --git a/gcc/testsuite/gfortran.dg/coarray/this_image_2.f90 b/gcc/testsuite/gfortran.dg/coarray/this_image_2.f90 new file mode 100644 index 00000000000..d5a5eef8de1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/this_image_2.f90 @@ -0,0 +1,125 @@ +! { dg-do run } +! +! PR fortran/18918 +! +! Version for scalar coarrays +! +! this_image(coarray) run test, +! expecially for num_images > 1 +! +! Tested are values up to num_images == 8, +! higher values are OK, but not tested for +! +implicit none +integer :: a[2:2, 3:4, 7:*] +integer :: i + +if (this_image(A, dim=1) /= 2) call abort() +i = 1 +if (this_image(A, dim=i) /= 2) call abort() + +select case (this_image()) + case (1) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 7) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 7) call abort() + if (any (this_image(A) /= [2,3,7])) call abort() + + case (2) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 7) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 7) call abort() + if (any (this_image(A) /= [2,4,7])) call abort() + + case (3) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 8) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 8) call abort() + if (any (this_image(A) /= [2,3,8])) call abort() + + case (4) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 8) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 8) call abort() + if (any (this_image(A) /= [2,4,8])) call abort() + + case (5) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 9) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 9) call abort() + if (any (this_image(A) /= [2,3,9])) call abort() + + case (6) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 9) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 9) call abort() + if (any (this_image(A) /= [2,4,9])) call abort() + + case (7) + if (this_image(A, dim=2) /= 3) call abort() + if (this_image(A, dim=3) /= 10) call abort() + i = 2 + if (this_image(A, dim=i) /= 3) call abort() + i = 3 + if (this_image(A, dim=i) /= 10) call abort() + if (any (this_image(A) /= [2,3,10])) call abort() + + case (8) + if (this_image(A, dim=2) /= 4) call abort() + if (this_image(A, dim=3) /= 10) call abort() + i = 2 + if (this_image(A, dim=i) /= 4) call abort() + i = 3 + if (this_image(A, dim=i) /= 10) call abort() + if (any (this_image(A) /= [2,4,10])) call abort() +end select + +contains + +subroutine test_image_index +implicit none +integer :: index1, index2, index3 +logical :: one + +integer, save :: d(2)[-1:3, *] +integer, save :: e(2)[-1:-1, 3:*] + +one = num_images() == 1 + +index1 = image_index(d, [-1, 1] ) +index2 = image_index(d, [0, 1] ) + +if (one .and. (index1 /= 1 .or. index2 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) & + call abort() + +index1 = image_index(e, [-1, 3] ) +index2 = image_index(e, [-1, 4] ) + +if (one .and. (index1 /= 1 .or. index2 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) & + call abort() + +end subroutine test_image_index + +end diff --git a/gcc/testsuite/gfortran.dg/coarray_10.f90 b/gcc/testsuite/gfortran.dg/coarray_10.f90 index 6ee425d7bf9..99f5782e35b 100644 --- a/gcc/testsuite/gfortran.dg/coarray_10.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_10.f90 @@ -11,8 +11,8 @@ subroutine image_idx_test1() WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1]) WRITE (*,*) IMAGE_INDEX (array, [0,0,3,1]) ! { dg-error "for dimension 1, SUB has 0 and COARRAY lower bound is 1" } WRITE (*,*) IMAGE_INDEX (array, [1,2,9,0]) ! { dg-error "for dimension 3, SUB has 9 and COARRAY upper bound is 8" } - WRITE (*,*) IMAGE_INDEX (array, [2,0,3]) ! { dg-error "Too few elements" } - WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1,1])! { dg-error "Too many elements" } + WRITE (*,*) IMAGE_INDEX (array, [2,0,3]) ! { dg-error "array elements of the SUB argument to IMAGE_INDEX at .1. shall be 4" } + WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1,1])! { dg-error "array elements of the SUB argument to IMAGE_INDEX at .1. shall be 4" } end subroutine subroutine this_image_check() @@ -44,3 +44,9 @@ subroutine rank_mismatch() A(1)[1,1] = 1 ! { dg-error "Too few codimensions" } A(1)[1,1:1] = 1 ! { dg-error "Too few codimensions" } end subroutine rank_mismatch + +subroutine rank_mismatch2() + implicit none + integer, allocatable:: A(:)[:,:,:] + allocate(A(1)[7:8,4:*]) ! { dg-error "Unexpected .*. for codimension 2 of 3" } +end subroutine rank_mismatch2 diff --git a/gcc/testsuite/gfortran.dg/coarray_13.f90 b/gcc/testsuite/gfortran.dg/coarray_13.f90 index bbd1ad49173..6283fa02c57 100644 --- a/gcc/testsuite/gfortran.dg/coarray_13.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_13.f90 @@ -1,19 +1,149 @@ ! { dg-do run } -! { dg-options "-fcoarray=single" } +! { dg-options "-fcoarray=single -fcheck=bounds" } ! ! Coarray support -- allocatable array coarrays +! -- intrinsic procedures ! PR fortran/18918 ! PR fortran/43931 ! program test implicit none + integer,allocatable :: B(:)[:] + call one() + call two() + allocate(B(3)[-4:*]) + call three(3,B,1) + call three_a(3,B) + call three_b(3,B) + call four(B) + call five() contains subroutine one() integer, allocatable :: a(:)[:,:,:] allocate(a(1)[-4:9,8,4:*]) + + if (this_image(a,dim=1) /= -4_8) call abort() + if (lcobound (a,dim=1) /= -4_8) call abort() + if (ucobound (a,dim=1) /= 9_8) call abort() + + if (this_image(a,dim=2) /= 1_8) call abort() + if (lcobound (a,dim=2) /= 1_8) call abort() + if (ucobound (a,dim=2) /= 8_8) call abort() + + if (this_image(a,dim=3) /= 4_8) call abort() + if (lcobound (a,dim=3) /= 4_8) call abort() + if (ucobound (a,dim=3) /= 4_8) call abort() + + if (any(this_image(a) /= [-4_8, 1_8, 4_8])) call abort() + if (any(lcobound (a) /= [-4_8, 1_8, 4_8])) call abort() + if (any(ucobound (a) /= [9_8, 8_8, 4_8])) call abort() end subroutine one - subroutine four(C) - integer, allocatable :: C(:)[:] - end subroutine four + + subroutine two() + integer, allocatable :: a(:)[:,:,:] + allocate(a(1)[-4:9,8,4:*]) + + if (this_image(a,dim=1) /= -4) call abort() + if (lcobound (a,dim=1) /= -4) call abort() + if (ucobound (a,dim=1) /= 9) call abort() + + if (this_image(a,dim=2) /= 1) call abort() + if (lcobound (a,dim=2) /= 1) call abort() + if (ucobound (a,dim=2) /= 8) call abort() + + if (this_image(a,dim=3) /= 4) call abort() + if (lcobound (a,dim=3) /= 4) call abort() + if (ucobound (a,dim=3) /= 4) call abort() + + if (any(this_image(a) /= [-4, 1, 4])) call abort() + if (any(lcobound (a) /= [-4, 1, 4])) call abort() + if (any(ucobound (a) /= [9, 8, 4])) call abort() + end subroutine two + + subroutine three(n,A, n2) + integer :: n, n2 + integer :: A(3)[n:*] + + A(1) = 42 + if (A(1) /= 42) call abort() + A(1)[n2] = -42 + if (A(1)[n2] /= -42) call abort() + + if (this_image(A,dim=1) /= n) call abort() + if (lcobound (A,dim=1) /= n) call abort() + if (ucobound (A,dim=1) /= n) call abort() + + if (any(this_image(A) /= n)) call abort() + if (any(lcobound (A) /= n)) call abort() + if (any(ucobound (A) /= n)) call abort() + end subroutine three + + subroutine three_a(n,A) + integer :: n + integer :: A(3)[n+2:n+5,n-1:*] + + A(1) = 42 + if (A(1) /= 42) call abort() + A(1)[4,n] = -42 + if (A(1)[4,n] /= -42) call abort() + + if (this_image(A,dim=1) /= n+2) call abort() + if (lcobound (A,dim=1) /= n+2) call abort() + if (ucobound (A,dim=1) /= n+5) call abort() + + if (this_image(A,dim=2) /= n-1) call abort() + if (lcobound (A,dim=2) /= n-1) call abort() + if (ucobound (A,dim=2) /= n-1) call abort() + + if (any(this_image(A) /= [n+2,n-1])) call abort() + if (any(lcobound (A) /= [n+2,n-1])) call abort() + if (any(ucobound (A) /= [n+5,n-1])) call abort() + end subroutine three_a + + subroutine three_b(n,A) + integer :: n + integer :: A(-1:3,0:4,-2:5,-4:7)[n+2:n+5,n-1:*] + + A(-1,0,-2,-4) = 42 + if (A(-1,0,-2,-4) /= 42) call abort() + A(1,0,-2,-4) = 99 + if (A(1,0,-2,-4) /= 99) call abort() + + if (this_image(A,dim=1) /= n+2) call abort() + if (lcobound (A,dim=1) /= n+2) call abort() + if (ucobound (A,dim=1) /= n+5) call abort() + + if (this_image(A,dim=2) /= n-1) call abort() + if (lcobound (A,dim=2) /= n-1) call abort() + if (ucobound (A,dim=2) /= n-1) call abort() + + if (any(this_image(A) /= [n+2,n-1])) call abort() + if (any(lcobound (A) /= [n+2,n-1])) call abort() + if (any(ucobound (A) /= [n+5,n-1])) call abort() + end subroutine three_b + + subroutine four(A) + integer, allocatable :: A(:)[:] + if (this_image(A,dim=1) /= -4_8) call abort() + if (lcobound (A,dim=1) /= -4_8) call abort() + if (ucobound (A,dim=1) /= -4_8) call abort() + end subroutine four + + subroutine five() + integer, save :: foo(2)[5:7,4:*] + integer :: i + + i = 1 + foo(1)[5,4] = 42 + if (foo(1)[5,4] /= 42) call abort() + if (this_image(foo,dim=i) /= 5) call abort() + if (lcobound(foo,dim=i) /= 5) call abort() + if (ucobound(foo,dim=i) /= 7) call abort() + + i = 2 + if (this_image(foo,dim=i) /= 4) call abort() + if (lcobound(foo,dim=i) /= 4) call abort() + if (ucobound(foo,dim=i) /= 4) call abort() + end subroutine five end program test diff --git a/gcc/testsuite/gfortran.dg/coarray_15.f90 b/gcc/testsuite/gfortran.dg/coarray_15.f90 new file mode 100644 index 00000000000..0aecb2f4e11 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_15.f90 @@ -0,0 +1,112 @@ +! { dg-do run } +! { dg-options "-fcoarray=single" } +! +! PR fortran/18918 +! +! Contributed by John Reid. +! +program ex2 + implicit none + real, allocatable :: z(:)[:] + integer :: image + character(len=128) :: str + + allocate(z(3)[*]) + write(*,*) 'z allocated on image',this_image() + sync all + if (this_image()==1) then + z = 1.2 + do image = 2, num_images() ! { dg-warning "will be executed zero times" } + write(*,*) 'Assigning z(:) on image',image + z(:)[image] = z + end do + end if + sync all + + str = repeat('X', len(str)) + write(str,*) 'z=',z(:),' on image',this_image() + if (str /= " z= 1.20000005 1.20000005 1.20000005 on image 1") & + call abort + + str = repeat('X', len(str)) + write(str,*) 'z=',z,' on image',this_image() + if (str /= " z= 1.20000005 1.20000005 1.20000005 on image 1") & + call abort + + str = repeat('X', len(str)) + write(str,*) 'z=',z(1:3)[this_image()],' on image',this_image() + if (str /= " z= 1.20000005 1.20000005 1.20000005 on image 1") & + call abort + + call ex2a() + call ex5() +end + +subroutine ex2a() + implicit none + real, allocatable :: z(:,:)[:,:] + integer :: image + character(len=128) :: str + + allocate(z(2,2)[1,*]) + write(*,*) 'z allocated on image',this_image() + sync all + if (this_image()==1) then + z = 1.2 + do image = 2, num_images() ! { dg-warning "will be executed zero times" } + write(*,*) 'Assigning z(:) on image',image + z(:,:)[1,image] = z + end do + end if + sync all + + str = repeat('X', len(str)) + write(str,*) 'z=',z(:,:),' on image',this_image() + if (str /= " z= 1.20000005 1.20000005 1.20000005 1.20000005 on image 1") & + call abort + + str = repeat('X', len(str)) + write(str,*) 'z=',z,' on image',this_image() + if (str /= " z= 1.20000005 1.20000005 1.20000005 1.20000005 on image 1") & + call abort +end subroutine ex2a + +subroutine ex5 + implicit none + integer :: me + real, save :: w(4)[*] + character(len=128) :: str + + me = this_image() + w = me + + str = repeat('X', len(str)) + write(str,*) 'In main on image',this_image(), 'w= ',w + if (str /= " In main on image 1 w= 1.00000000 1.00000000 1.00000000 1.00000000") & + call abort + + str = repeat('X', len(str)) + write(str,*) 'In main on image',this_image(), 'w= ',w(1:4) + if (str /= " In main on image 1 w= 1.00000000 1.00000000 1.00000000 1.00000000") & + call abort + + str = repeat('X', len(str)) + write(str,*) 'In main on image',this_image(), 'w= ',w(:)[1] + if (str /= " In main on image 1 w= 1.00000000 1.00000000 1.00000000 1.00000000") & + call abort + + sync all + call ex5_sub(me,w) +end subroutine ex5 + +subroutine ex5_sub(n,w) + implicit none + integer :: n + real :: w(n) + character(len=75) :: str + + str = repeat('X', len(str)) + write(str,*) 'In sub on image',this_image(), 'w= ',w + if (str /= " In sub on image 1 w= 1.00000000") & + call abort +end subroutine ex5_sub diff --git a/gcc/testsuite/gfortran.dg/coarray_16.f90 b/gcc/testsuite/gfortran.dg/coarray_16.f90 new file mode 100644 index 00000000000..282e8706848 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_16.f90 @@ -0,0 +1,100 @@ +! { dg-do run } +! { dg-options "-fcoarray=single" } +! +! Run-time test for IMAGE_INDEX with cobounds only known at +! the compile time, suitable for any number of NUM_IMAGES() +! For compile-time cobounds, the -fcoarray=lib version still +! needs to run-time evalulation if image_index returns > 1 +! as image_index is 0 if the index would exceed num_images(). +! +! Please set num_images() to >= 13, if possible. +! +! PR fortran/18918 +! + +program test_image_index +implicit none +integer :: index1, index2, index3 +logical :: one + +integer, allocatable :: a(:)[:,:,:], b(:)[:,:], c(:,:)[:] +integer, save :: d(2)[-1:3, *] +integer, save :: e(2)[-1:-1, 3:*] + +one = num_images() == 1 + +allocate(a(1)[3:3, -4:-3, 88:*]) +allocate(b(2)[-1:0,0:*]) +allocate(c(3,3)[*]) + +index1 = image_index(a, [3, -4, 88] ) +index2 = image_index(b, [-1, 0] ) +index3 = image_index(c, [1] ) +if (index1 /= 1 .or. index2 /= 1 .or. index3 /= 1) call abort() + + +index1 = image_index(a, [3, -3, 88] ) +index2 = image_index(b, [0, 0] ) +index3 = image_index(c, [2] ) + +if (one .and. (index1 /= 0 .or. index2 /= 0 .or. index3 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 2 .or. index2 /= 2 .or. index3 /= 2)) & + call abort() + + +index1 = image_index(d, [-1, 1] ) +index2 = image_index(d, [0, 1] ) + +if (one .and. (index1 /= 1 .or. index2 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) & + call abort() + +index1 = image_index(e, [-1, 3] ) +index2 = image_index(e, [-1, 4] ) + +if (one .and. (index1 /= 1 .or. index2 /= 0)) & + call abort() +if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) & + call abort() + +call test(1, a,b,c) + +! The following test is in honour of the F2008 standard: +deallocate(a) +allocate(a (10) [10, 0:9, 0:*]) + +index1 = image_index(a, [1, 0, 0] ) +index2 = image_index(a, [3, 1, 2] ) ! = 213, yeah! +index3 = image_index(a, [3, 1, 0] ) ! = 13 + +if (num_images() < 13 .and. (index1 /= 1 .or. index2 /= 0 .or. index3 /= 0)) & + call abort() +if (num_images() >= 213 .and. (index1 /= 1 .or. index2 /= 213 .or. index3 /= 13)) & + call abort() +if (num_images() >= 13 .and. (index1 /= 1 .or. index2 /= 0 .or. index3 /= 13)) & + call abort() + + +contains +subroutine test(n, a, b, c) + integer :: n + integer :: a(1)[3*n:3*n, -4*n:-3*n, 88*n:*], b(2)[-1*n:0*n,0*n:*], c(3*n,3*n)[*] + + index1 = image_index(a, [3, -4, 88] ) + index2 = image_index(b, [-1, 0] ) + index3 = image_index(c, [1] ) + if (index1 /= 1 .or. index2 /= 1 .or. index3 /= 1) call abort() + + + index1 = image_index(a, [3, -3, 88] ) + index2 = image_index(b, [0, 0] ) + index3 = image_index(c, [2] ) + + if (one .and. (index1 /= 0 .or. index2 /= 0 .or. index3 /= 0)) & + call abort() + if (.not. one .and. (index1 /= 2 .or. index2 /= 2 .or. index3 /= 2)) & + call abort() +end subroutine test +end program test_image_index diff --git a/gcc/testsuite/gfortran.dg/coarray_17.f90 b/gcc/testsuite/gfortran.dg/coarray_17.f90 new file mode 100644 index 00000000000..ad6da29f1a3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_17.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! Two simple diagnostics, which were initially not thought of +! +! General coarray PR: PR fortran/18918 +! + +subroutine one + integer, allocatable :: a(:)[:,:] ! corank = 2 + integer :: index,nn1,nn2,nn3,mm0 + + allocate(a(mm0)[nn1:nn2,nn3,*]) ! { dg-error "Too many codimensions at .1., expected 2 not 3" } +end subroutine one + +subroutine two + integer, allocatable :: a(:)[:,:,:], b(:)[:,:], c(:)[:] + index1 = image_index(a, [2, 1, 1] ) !OK + index2 = image_index(b, [2, 1, 1] ) ! { dg-error "array elements of the SUB argument to IMAGE_INDEX at .1. shall be 2 .corank. not 3" } + index3 = image_index(c, [1] ) !OK +end subroutine two diff --git a/gcc/testsuite/gfortran.dg/coarray_18.f90 b/gcc/testsuite/gfortran.dg/coarray_18.f90 new file mode 100644 index 00000000000..474e9391edb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_18.f90 @@ -0,0 +1,39 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! Prevent ICE when exceeding the maximal number of allowed +! dimensions (normal + codimensions). +! +! Fortran 2008 allows (co)arrays with 15 ranks +! Currently, gfortran only supports 7, cf. PR 37577 +! Thus, the program is valid Fortran 2008 ... +! +! See also general coarray PR 18918 +! +! Test case taken from Leibniz-Rechenzentrum (LRZ)'s +! fortran_tests with thanks to Reinhold Bader. +! + +program ar + implicit none + integer :: ic(2)[*] + integer :: id(2,2)[2,*] + integer :: ie(2,2,2)[2,2,*] + integer :: ig(2,2,2,2)[2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ih(2,2,2,2,2)[2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ij(2,2,2,2,2,2)[2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ik(2,2,2,2,2,2,2)[2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: il[2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: im[2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: in[2,2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: io[2,2,2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + real :: x2(2,2,4)[2,*] + complex :: c2(4,2)[2,*] + double precision :: d2(1,5,9)[2,*] + character(len=1) :: ch2(2)[2,*] + character(len=2) :: ch22(-5:4)[2,*] + logical :: l2(17)[2,*] + if (this_image() == 1) then + write(*,*) 'OK' + end if +end program diff --git a/gcc/testsuite/gfortran.dg/coarray_19.f90 b/gcc/testsuite/gfortran.dg/coarray_19.f90 new file mode 100644 index 00000000000..cbb1dd20d8f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_19.f90 @@ -0,0 +1,27 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! PR fortran/18918 +! + +! Was failing before as the "x%a()[]" was +! regarded as coindexed +subroutine test2() + type t + integer, allocatable :: a(:)[:] + end type t + type(t), SAVE :: x + allocate(x%a(1)[*]) +end subroutine test2 + + +module m + integer, allocatable :: a(:)[:] +end module m + +! Was failing as "a" was allocatable but +! as->cotype was not AS_DEFERERED. +use m +end + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 b/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 index 887c9625ac7..592e4d283f1 100644 --- a/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 +++ b/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-options "-fcray-pointer" } +! { dg-options "-fcray-pointer -ffloat-store" } ! ! Test the fix for PR36528 in which the Cray pointer was not passed ! correctly to 'euler' so that an undefined reference to fcn was diff --git a/gcc/testsuite/gfortran.dg/endfile_3.f90 b/gcc/testsuite/gfortran.dg/endfile_3.f90 index 0c413145c5d..3e90dda6141 100644 --- a/gcc/testsuite/gfortran.dg/endfile_3.f90 +++ b/gcc/testsuite/gfortran.dg/endfile_3.f90 @@ -1,4 +1,4 @@ -! { dg-do run } +! { dg-do run { target fd_truncate } } ! pr44477 READ/WRITE not allowed after ENDFILE !------------------------------------------- open(10, form='formatted', & diff --git a/gcc/testsuite/gfortran.dg/endfile_4.f90 b/gcc/testsuite/gfortran.dg/endfile_4.f90 index a2462c9f878..351643781d0 100644 --- a/gcc/testsuite/gfortran.dg/endfile_4.f90 +++ b/gcc/testsuite/gfortran.dg/endfile_4.f90 @@ -1,4 +1,4 @@ -! { dg-do run } +! { dg-do run { target fd_truncate } } ! pr44477 ENDFILE not allowed after ENDFILE !------------------------------------------- open(10, form='formatted', & diff --git a/gcc/testsuite/gfortran.dg/erfc_scaled_1.f90 b/gcc/testsuite/gfortran.dg/erfc_scaled_1.f90 index 8a114e60ef9..eeb54c829dc 100644 --- a/gcc/testsuite/gfortran.dg/erfc_scaled_1.f90 +++ b/gcc/testsuite/gfortran.dg/erfc_scaled_1.f90 @@ -1,4 +1,8 @@ ! { dg-do run } +! +! { dg-options "" } +! Do not run with -pedantic checks enabled as "check" +! contains internal procedures which is a vendor extension program test implicit none diff --git a/gcc/testsuite/gfortran.dg/f2003_io_5.f03 b/gcc/testsuite/gfortran.dg/f2003_io_5.f03 index b816ded69c5..c064e0cf3c1 100644 --- a/gcc/testsuite/gfortran.dg/f2003_io_5.f03 +++ b/gcc/testsuite/gfortran.dg/f2003_io_5.f03 @@ -5,7 +5,7 @@ integer :: i real :: a(10) = [ (i*1.3, i=1,10) ] real :: b(10) complex :: c -character(34) :: complex +character(36) :: complex namelist /nm/ a open(99,file="mynml",form="formatted",decimal="point",status="replace") @@ -18,9 +18,9 @@ close(99, status="delete") c = (3.123,4.456) write(complex,*,decimal="comma") c -if (complex.ne." ( 3,1229999 ; 4,4559999 )") call abort +if (complex.ne." ( 3,12299991 ; 4,45599985 )") call abort c = (0.0, 0.0) read(complex,*,decimal="comma") c -if (complex.ne." ( 3,1229999 ; 4,4559999 )") call abort +if (complex.ne." ( 3,12299991 ; 4,45599985 )") call abort end diff --git a/gcc/testsuite/gfortran.dg/fmt_cache_1.f b/gcc/testsuite/gfortran.dg/fmt_cache_1.f index 41de3f0d705..b9b9fe8ddc9 100644 --- a/gcc/testsuite/gfortran.dg/fmt_cache_1.f +++ b/gcc/testsuite/gfortran.dg/fmt_cache_1.f @@ -1,11 +1,12 @@ -! { dg-do run } +! { dg-do run { target fd_truncate } } ! pr40662 segfaults when specific format is invoked twice. ! pr40330 incorrect io. ! test case derived from pr40662, <jvdelisle@gcc.gnu.org> program astap - character(40) teststring - arlxca = 0.0 - open(10, status="scratch") + implicit none + character(34) :: teststring + real(4) :: arlxca = 0.0 + open(10) write(10,40) arlxca write(10,40) arlxca 40 format(t4,"arlxca = ",1pg13.6,t27,"arlxcc = ",g13.6,t53, @@ -21,13 +22,12 @@ . "ebalnc = ",g13.6,t79,"ebalsa = ",g13.6,t105, . "ebalsc = ",g13.6) rewind 10 - rewind 10 teststring = "" read(10,'(a)') teststring - if (teststring.ne." arlxca = 0.00000 arlxcc = ")call abort + if (teststring.ne." arlxca = 0.00000 arlxcc =")call abort teststring = "" read(10,'(a)') teststring - if (teststring.ne." arlxca = 0.00000 arlxcc = ")call abort + if (teststring.ne." arlxca = 0.00000 arlxcc =")call abort end program astap diff --git a/gcc/testsuite/gfortran.dg/fmt_g.f b/gcc/testsuite/gfortran.dg/fmt_g.f index 55b094ae07e..cb73492829e 100644 --- a/gcc/testsuite/gfortran.dg/fmt_g.f +++ b/gcc/testsuite/gfortran.dg/fmt_g.f @@ -31,13 +31,13 @@ WRITE(buffer,"(G12.5E5,'<')") -10000. if (buffer.ne."************<") call abort WRITE(buffer,"(G13.5E5,'<')") -10000. - if (buffer.ne."-10000. <") call abort + if (buffer.ne."*************<") call abort WRITE(buffer,"(G14.5E5,'<')") -10000. - if (buffer.ne." -10000. <") call abort + if (buffer.ne."-10000. <") call abort WRITE(buffer,"(G15.5E5,'<')") -10000. - if (buffer.ne." -10000. <") call abort + if (buffer.ne." -10000. <") call abort WRITE(buffer,"(G16.5E5,'<')") -10000. - if (buffer.ne." -10000. <") call abort + if (buffer.ne." -10000. <") call abort STOP END diff --git a/gcc/testsuite/gfortran.dg/fmt_g0_1.f08 b/gcc/testsuite/gfortran.dg/fmt_g0_1.f08 index 2e7fc1877a4..ead6f81b28a 100644 --- a/gcc/testsuite/gfortran.dg/fmt_g0_1.f08 +++ b/gcc/testsuite/gfortran.dg/fmt_g0_1.f08 @@ -2,19 +2,19 @@ ! PR36420 Fortran 2008: g0 edit descriptor ! Test case provided by Jerry DeLisle <jvdelisle@gcc.gnu.org> character(25) :: string = "(g0,g0,g0)" - character(33) :: buffer + character(50) :: buffer write(buffer, '(g0,g0,g0)') ':',12340,':' if (buffer.ne.":12340:") call abort write(buffer, string) ':',0,':' if (buffer.ne.":0:") call abort - write(buffer, string) ':',1.0/3.0,':' - if (buffer.ne.":.33333334:") call abort - write(buffer, '(1x,a,g0,a)') ':',1.0/3.0,':' - if (buffer.ne." :.33333334:") call abort + write(buffer, string) ':',1.0_8/3.0_8,':' + if (buffer.ne.":.33333333333333331:") call abort + write(buffer, '(1x,a,g0,a)') ':',1.0_8/3.0_8,':' + if (buffer.ne." :.33333333333333331:") call abort write(buffer, string) ':',"hello",':' - if (buffer.ne.":hello:") call abort + if (buffer.ne.":hello:") call abort write(buffer, "(g0,g0,g0,g0)") ':',.true.,.false.,':' if (buffer.ne.":TF:") call abort - write(buffer, "(g0,g0,',',g0,g0)") '(',( 1.2345, 2.4567 ),')' - if (buffer.ne."(1.2345001,2.4567001)") call abort + write(buffer, "(g0,g0,',',g0,g0)") '(',( 1.2345_8, 2.4567_8 ),')' + if (buffer.ne."(1.2344999999999999,2.4567000000000001)") call abort end diff --git a/gcc/testsuite/gfortran.dg/fmt_g0_5.f08 b/gcc/testsuite/gfortran.dg/fmt_g0_5.f08 new file mode 100644 index 00000000000..3de84846605 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/fmt_g0_5.f08 @@ -0,0 +1,39 @@ +! { dg-do run } +! { dg-add-options ieee } +! PR48589 Invalid G0/G0.d editing for NaN/infinity +! Test case by Thomas Henlich +program test_g0_special + + call check_all("(g10.3)", "(f10.3)") + call check_all("(g10.3e3)", "(f10.3)") + call check_all("(spg10.3)", "(spf10.3)") + call check_all("(spg10.3e3)", "(spf10.3)") + !print *, "-----------------------------------" + call check_all("(g0)", "(f0.0)") + call check_all("(g0.15)", "(f0.0)") + call check_all("(spg0)", "(spf0.0)") + call check_all("(spg0.15)", "(spf0.0)") +contains + subroutine check_all(fmt1, fmt2) + character(len=*), intent(in) :: fmt1, fmt2 + real(8) :: one = 1.0D0, zero = 0.0D0, nan, pinf, minf + + nan = zero / zero + pinf = one / zero + minf = -one / zero + call check_equal(fmt1, fmt2, nan) + call check_equal(fmt1, fmt2, pinf) + call check_equal(fmt1, fmt2, minf) + end subroutine check_all + subroutine check_equal(fmt1, fmt2, r) + real(8), intent(in) :: r + character(len=*), intent(in) :: fmt1, fmt2 + character(len=80) :: s1, s2 + + write(s1, fmt1) r + write(s2, fmt2) r + if (s1 /= s2) call abort + !if (s1 /= s2) print "(6a)", trim(fmt1), ": '", trim(s1), "' /= '", trim(s2), "'" + !print "(6a)", trim(fmt1), ": '", trim(s1), "' /= '", trim(s2), "'" + end subroutine check_equal +end program test_g0_special diff --git a/gcc/testsuite/gfortran.dg/fmt_g0_6.f08 b/gcc/testsuite/gfortran.dg/fmt_g0_6.f08 new file mode 100644 index 00000000000..982412a4631 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/fmt_g0_6.f08 @@ -0,0 +1,83 @@ +! { dg-do run } +! { dg-options "-ffloat-store" } +! PR48602 Invalid F conversion of G descriptor for values close to powers of 10 +! Test case provided by Thomas Henlich +program test_g0fr + use iso_fortran_env + implicit none + integer, parameter :: RT = REAL64 + + call check_all(0.0_RT, 15, 2, 0) + call check_all(0.991_RT, 15, 2, 0) + call check_all(0.995_RT, 15, 2, 0) + call check_all(0.996_RT, 15, 2, 0) + call check_all(0.999_RT, 15, 2, 0) +contains + subroutine check_all(val, w, d, e) + real(kind=RT), intent(in) :: val + integer, intent(in) :: w + integer, intent(in) :: d + integer, intent(in) :: e + + call check_f_fmt(val, 'C', w, d, e) + call check_f_fmt(val, 'U', w, d, e) + call check_f_fmt(val, 'D', w, d, e) + end subroutine check_all + + subroutine check_f_fmt(val, roundmode, w, d, e) + real(kind=RT), intent(in) :: val + character, intent(in) :: roundmode + integer, intent(in) :: w + integer, intent(in) :: d + integer, intent(in) :: e + character(len=80) :: fmt_f, fmt_g + character(len=80) :: s_f, s_g + real(kind=RT) :: mag, lower, upper + real(kind=RT) :: r + integer :: n, dec + + mag = abs(val) + if (e == 0) then + n = 4 + else + n = e + 2 + end if + select case (roundmode) + case('U') + r = 1.0_RT + case('D') + r = 0.0_RT + case('C') + r = 0.5_RT + end select + + if (mag == 0) then + write(fmt_f, "('R', a, ',F', i0, '.', i0, ',', i0, 'X')") roundmode, w - n, d - 1, n + else + do dec = d, 0, -1 + lower = 10.0_RT ** (d - 1 - dec) - r * 10.0_RT ** (- dec - 1) + upper = 10.0_RT ** (d - dec) - r * 10.0_RT ** (- dec) + if (lower <= mag .and. mag < upper) then + write(fmt_f, "('R', a, ',F', i0, '.', i0, ',', i0, 'X')") roundmode, w - n, dec, n + exit + end if + end do + end if + if (len_trim(fmt_f) == 0) then + ! e editing + return + end if + if (e == 0) then + write(fmt_g, "('R', a, ',G', i0, '.', i0)") roundmode, w, d + else + write(fmt_g, "('R', a, ',G', i0, '.', i0, 'e', i0)") roundmode, w, d, e + end if + write(s_g, "('''', " // trim(fmt_g) // ",'''')") val + write(s_f, "('''', " // trim(fmt_f) // ",'''')") val + if (s_g /= s_f) call abort + !if (s_g /= s_f) then + !print "(a,g0,a,g0)", "lower=", lower, " upper=", upper + ! print "(a, ' /= ', a, ' ', a, '/', a, ':', g0)", trim(s_g), trim(s_f), trim(fmt_g), trim(fmt_f), val + !end if + end subroutine check_f_fmt +end program test_g0fr diff --git a/gcc/testsuite/gfortran.dg/ftell_3.f90 b/gcc/testsuite/gfortran.dg/ftell_3.f90 index 16875d812a8..3e4681b58f5 100644 --- a/gcc/testsuite/gfortran.dg/ftell_3.f90 +++ b/gcc/testsuite/gfortran.dg/ftell_3.f90 @@ -1,4 +1,4 @@ -! { dg-do run } +! { dg-do run { target fd_truncate } } ! PR43605 FTELL intrinsic returns incorrect position ! Contributed by Janne Blomqvist, Manfred Schwarb ! and Dominique d'Humieres. diff --git a/gcc/testsuite/gfortran.dg/func_result_1.f90 b/gcc/testsuite/gfortran.dg/func_result_1.f90 index ce3c2e4e685..51f5cd4ca9e 100644 --- a/gcc/testsuite/gfortran.dg/func_result_1.f90 +++ b/gcc/testsuite/gfortran.dg/func_result_1.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! From PR 19673 : We didn't dereference the the result from POINTER +! From PR 19673 : We didn't dereference the result from POINTER ! functions with a RESULT clause program ret_ptr if (foo(99) /= bar(99)) call abort () diff --git a/gcc/testsuite/gfortran.dg/func_result_6.f90 b/gcc/testsuite/gfortran.dg/func_result_6.f90 index e64a2ef7abc..e8347be587d 100644 --- a/gcc/testsuite/gfortran.dg/func_result_6.f90 +++ b/gcc/testsuite/gfortran.dg/func_result_6.f90 @@ -63,7 +63,7 @@ if (ptr /= 2) call abort() bar = gen() if (ptr /= 77) call abort() contains - function foo() + function foo() ! { dg-warning "Extension: Internal procedure .foo. in generic interface" } integer, allocatable :: foo(:) allocate(foo(2)) foo = [33, 77] diff --git a/gcc/testsuite/gfortran.dg/function_optimize_1.f90 b/gcc/testsuite/gfortran.dg/function_optimize_1.f90 new file mode 100644 index 00000000000..b023121831b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_optimize_1.f90 @@ -0,0 +1,47 @@ +! { dg-do compile } +! { dg-options "-O -fdump-tree-original -Warray-temporaries" } +program main + implicit none + real, dimension(2,2) :: a, b, c, d + integer :: i + real :: x, z + character(60) :: line + real, external :: ext_func + interface + elemental function element(x) + real, intent(in) :: x + real :: elem + end function element + pure function mypure(x) + real, intent(in) :: x + integer :: mypure + end function mypure + elemental impure function elem_impure(x) + real, intent(in) :: x + real :: elem_impure + end function elem_impure + end interface + + data a /2., 3., 5., 7./ + data b /11., 13., 17., 23./ + write (unit=line, fmt='(4F7.2)') matmul(a,b) & + & + matmul(a,b) ! { dg-warning "Creating array temporary" } + z = sin(x) + cos(x) + sin(x) + cos(x) + print *,z + x = ext_func(a) + 23 + ext_func(a) + print *,d,x + z = element(x) + element(x) + print *,z + i = mypure(x) - mypure(x) + print *,i + z = elem_impure(x) - elem_impure(x) + print *,z +end program main +! { dg-final { scan-tree-dump-times "matmul_r4" 1 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_sinf" 1 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_cosf" 1 "original" } } +! { dg-final { scan-tree-dump-times "ext_func" 2 "original" } } +! { dg-final { scan-tree-dump-times "element" 1 "original" } } +! { dg-final { scan-tree-dump-times "mypure" 1 "original" } } +! { dg-final { scan-tree-dump-times "elem_impure" 2 "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/function_optimize_2.f90 b/gcc/testsuite/gfortran.dg/function_optimize_2.f90 new file mode 100644 index 00000000000..8105661b8f5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_optimize_2.f90 @@ -0,0 +1,47 @@ +! { dg-do compile } +! { dg-options "-O -faggressive-function-elimination -fdump-tree-original" } +program main + implicit none + real, dimension(2,2) :: a, b, c, d + real :: x, z + integer :: i + character(60) :: line + real, external :: ext_func + interface + elemental function element(x) + real, intent(in) :: x + real :: elem + end function element + pure function mypure(x) + real, intent(in) :: x + integer :: mypure + end function mypure + elemental impure function elem_impure(x) + real, intent(in) :: x + real :: elem_impure + end function elem_impure + end interface + + data a /2., 3., 5., 7./ + data b /11., 13., 17., 23./ + write (unit=line, fmt='(4F7.2)') matmul(a,b) + matmul(a,b) + x = 1.2 + z = sin(x) + cos(x) + sin(x) + cos(x) + print *,z + x = ext_func(a) + 23 + ext_func(a) + print *,d,x + z = element(x) + element(x) + print *,z + i = mypure(x) - mypure(x) + print *,i + z = elem_impure(x) - elem_impure(x) + print *,z +end program main +! { dg-final { scan-tree-dump-times "matmul_r4" 1 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_sinf" 1 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_cosf" 1 "original" } } +! { dg-final { scan-tree-dump-times "ext_func" 1 "original" } } +! { dg-final { scan-tree-dump-times "element" 1 "original" } } +! { dg-final { scan-tree-dump-times "mypure" 1 "original" } } +! { dg-final { scan-tree-dump-times "elem_impure" 1 "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/function_optimize_3.f90 b/gcc/testsuite/gfortran.dg/function_optimize_3.f90 new file mode 100644 index 00000000000..71381f4c953 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_optimize_3.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-O" } +! PR 48352 - variable elimination in a DO loop caused segfaults. +! Test case contributed by Joost VandeVondele +program main + INTEGER, DIMENSION(:), POINTER :: a + DO I=1,MIN(SIZE(a),SIZE(a)) + ENDDO +END program main diff --git a/gcc/testsuite/gfortran.dg/function_optimize_4.f90 b/gcc/testsuite/gfortran.dg/function_optimize_4.f90 new file mode 100644 index 00000000000..20fc46d3078 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_optimize_4.f90 @@ -0,0 +1,20 @@ +! { dg-do run } +! { dg-options "-O" } +! PR 48412 - function elimination got temporary varibles in the wrong order. +! Test case contributed by Joost VandeVondele. + +INTEGER FUNCTION S1(m,ma,lx) +INTEGER :: m,ma,lx + +IF (((m < 0).AND.(MODULO(ABS(ma-lx),2) == 1)).OR.& + ((m > 0).AND.(MODULO(ABS(ma-lx),2) == 0))) THEN + S1=1 +ELSE + S1=0 +ENDIF + +END FUNCTION + +INTEGER :: s1 +IF (S1(1,2,1).NE.0) CALL ABORT() +END diff --git a/gcc/testsuite/gfortran.dg/function_optimize_5.f90 b/gcc/testsuite/gfortran.dg/function_optimize_5.f90 new file mode 100644 index 00000000000..427b12684dc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_optimize_5.f90 @@ -0,0 +1,41 @@ +! { dg-do compile } +! { dg-options "-ffrontend-optimize -Wfunction-elimination" } +! Check the -ffrontend-optimize (in the absence of -O) and +! -Wfunction-elimination options. +program main + implicit none + real, dimension(2,2) :: a, b, c, d + integer :: i + real :: x, z + character(60) :: line + real, external :: ext_func + interface + elemental function element(x) + real, intent(in) :: x + real :: elem + end function element + pure function mypure(x) + real, intent(in) :: x + integer :: mypure + end function mypure + elemental impure function elem_impure(x) + real, intent(in) :: x + real :: elem_impure + end function elem_impure + end interface + + data a /2., 3., 5., 7./ + data b /11., 13., 17., 23./ + write (unit=line, fmt='(4F7.2)') matmul(a,b) & ! { dg-warning "Removing call to function 'matmul'" } + & + matmul(a,b) + z = sin(x) + 2.0 + sin(x) ! { dg-warning "Removing call to function 'sin'" } + print *,z + x = ext_func(a) + 23 + ext_func(a) + print *,d,x + z = element(x) + element(x) ! { dg-warning "Removing call to function 'element'" } + print *,z + i = mypure(x) - mypure(x) ! { dg-warning "Removing call to function 'mypure'" } + print *,i + z = elem_impure(x) - elem_impure(x) + print *,z +end program main diff --git a/gcc/testsuite/gfortran.dg/function_optimize_6.f90 b/gcc/testsuite/gfortran.dg/function_optimize_6.f90 new file mode 100644 index 00000000000..cda7ab06283 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_optimize_6.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-options "-O -fdump-tree-original" } +! PR 48405 - function elimnination in a DO loop should work. +program main + interface + pure function mypure() + integer :: mypure + end function mypure + end interface + DO I=1,mypure() + mypure() + ENDDO +END program main +! { dg-final { scan-tree-dump-times "mypure" 1 "original" } } +! { dg-final { cleanup-tree-dump "original" } } + + diff --git a/gcc/testsuite/gfortran.dg/g77/cabs.f b/gcc/testsuite/gfortran.dg/g77/cabs.f index d4090121679..998327b6e67 100644 --- a/gcc/testsuite/gfortran.dg/g77/cabs.f +++ b/gcc/testsuite/gfortran.dg/g77/cabs.f @@ -1,4 +1,5 @@ -c { dg-do run { xfail mips-sgi-irix6* } } PR 16292 +c { dg-do run } +c { dg-xfail-run-if "PR target/16292" { mips-sgi-irix6* } { -O0 } } program cabs_1 complex z0 real r0 diff --git a/gcc/testsuite/gfortran.dg/gomp/pr48117.f90 b/gcc/testsuite/gfortran.dg/gomp/pr48117.f90 new file mode 100644 index 00000000000..bc8ad9bc35e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr48117.f90 @@ -0,0 +1,11 @@ +! PR fortran/48117 +! { dg-do compile } +! { dg-options "-O2 -fopenmp" } + +subroutine foo(x) + character(len=*), optional :: x + character(len=80) :: v + !$omp master + if (present(x)) v = adjustl(x) + !$omp end master +end subroutine foo diff --git a/gcc/testsuite/gfortran.dg/gomp/pr48611.f90 b/gcc/testsuite/gfortran.dg/gomp/pr48611.f90 new file mode 100644 index 00000000000..643cc5c3efe --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr48611.f90 @@ -0,0 +1,12 @@ +! PR tree-optimization/48611 +! { dg-do compile } +! { dg-options "-Os -fopenmp -fexceptions -fno-tree-ccp -fno-tree-copy-prop" } + + integer, allocatable :: a(:) + logical :: l +!$omp parallel private (a) reduction (.or.:l) + do i = 1, 7 + a(:) = i + end do +!$omp end parallel +end diff --git a/gcc/testsuite/gfortran.dg/gomp/pr48794.f90 b/gcc/testsuite/gfortran.dg/gomp/pr48794.f90 new file mode 100644 index 00000000000..11edb0bb498 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr48794.f90 @@ -0,0 +1,12 @@ +! PR tree-optimization/48794 +! { dg-do compile } +! { dg-options "-Os -fopenmp -fexceptions -fno-tree-ccp -fno-tree-copy-prop" } + + integer, allocatable :: a(:) + logical :: l + if (allocated (a)) call abort +!$omp parallel private (a) reduction (.or.:l) + do i = 1, 7 + end do +!$omp end parallel +end diff --git a/gcc/testsuite/gfortran.dg/guality/guality.exp b/gcc/testsuite/gfortran.dg/guality/guality.exp index 2444d8de7b8..8bb19a54b15 100644 --- a/gcc/testsuite/gfortran.dg/guality/guality.exp +++ b/gcc/testsuite/gfortran.dg/guality/guality.exp @@ -4,7 +4,8 @@ load_lib gfortran-dg.exp load_lib gcc-gdb-test.exp # Disable on darwin until radr://7264615 is resolved. -if { [istarget *-*-darwin*] } { +# Disable on Tru64 UNIX (PR testsuite/48251). +if { [istarget *-*-darwin*] || [istarget alpha*-dec-osf*] } { return } diff --git a/gcc/testsuite/gfortran.dg/hypot_1.f90 b/gcc/testsuite/gfortran.dg/hypot_1.f90 index 59022fab93c..0c1c6e2ae17 100644 --- a/gcc/testsuite/gfortran.dg/hypot_1.f90 +++ b/gcc/testsuite/gfortran.dg/hypot_1.f90 @@ -18,11 +18,11 @@ program test call check(hypot(x4,y4), hypot(1.9_4,-2.1_4)) contains - subroutine check_r4 (a, b) + subroutine check_r4 (a, b) ! { dg-warning "Extension: Internal procedure" } real(kind=4), intent(in) :: a, b if (abs(a - b) > 1.e-5 * abs(b)) call abort end subroutine - subroutine check_r8 (a, b) + subroutine check_r8 (a, b) ! { dg-warning "Extension: Internal procedure" } real(kind=8), intent(in) :: a, b if (abs(a - b) > 1.e-7 * abs(b)) call abort end subroutine diff --git a/gcc/testsuite/gfortran.dg/import9.f90 b/gcc/testsuite/gfortran.dg/import9.f90 new file mode 100644 index 00000000000..4ed5cdf88e3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/import9.f90 @@ -0,0 +1,30 @@ +! { dg-do compile } +! +! PR fortran/48821 +! +! Contributed by Daniel Carrera +! + +contains + pure subroutine rk4_vec(t, Y, dY, h) + real, intent(inout) :: t, Y(:) + real, intent(in) :: h + real, dimension(size(Y)) :: k1, k2, k3, k4 + + interface + pure function dY(t0, y0) + import :: Y + real, intent(in) :: t0, y0(size(Y)) + real :: dY(size(y0)) + end function + end interface + + k1 = dY(t, Y) + k2 = dY(t + h/2, Y + k1*h/2) + k3 = dY(t + h/2, Y + k2*h/2) + k4 = dY(t + h , Y + k3*h) + + Y = Y + (k1 + 2*k2 + 2*k3 + k4) * h/6 + t = t + h + end subroutine +end diff --git a/gcc/testsuite/gfortran.dg/interface_35.f90 b/gcc/testsuite/gfortran.dg/interface_35.f90 new file mode 100644 index 00000000000..20aa4af786d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_35.f90 @@ -0,0 +1,79 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! PR fortran/48112 (module_m) +! PR fortran/48279 (sidl_string_array, s_Hard) +! +! Contributed by mhp77@gmx.at (module_m) +! and Adrian Prantl (sidl_string_array, s_Hard) +! + +module module_m + interface test + function test1( ) result( test ) + integer :: test + end function test1 + end interface test +end module module_m + +! ----- + +module sidl_string_array + type sidl_string_1d + end type sidl_string_1d + interface set + module procedure & + setg1_p + end interface +contains + subroutine setg1_p(array, index, val) + type(sidl_string_1d), intent(inout) :: array + end subroutine setg1_p +end module sidl_string_array + +module s_Hard + use sidl_string_array + type :: s_Hard_t + integer(8) :: dummy + end type s_Hard_t + interface set_d_interface + end interface + interface get_d_string + module procedure get_d_string_p + end interface + contains ! Derived type member access functions + type(sidl_string_1d) function get_d_string_p(s) + type(s_Hard_t), intent(in) :: s + end function get_d_string_p + subroutine set_d_objectArray_p(s, d_objectArray) + end subroutine set_d_objectArray_p +end module s_Hard + +subroutine initHard(h, ex) + use s_Hard + type(s_Hard_t), intent(inout) :: h + call set(get_d_string(h), 0, 'Three') ! { dg-error "There is no specific subroutine for the generic" } +end subroutine initHard + +! ----- + + interface get + procedure get1 + end interface + + integer :: h + call set1 (get (h)) + +contains + + subroutine set1 (a) + integer, intent(in) :: a + end subroutine + + integer function get1 (s) ! { dg-error "Extension: Internal procedure .get1. in generic interface .get." } + integer :: s + end function + +end + +! { dg-final { cleanup-modules "module_m module_m2 s_hard sidl_string_array" } } diff --git a/gcc/testsuite/gfortran.dg/interface_36.f90 b/gcc/testsuite/gfortran.dg/interface_36.f90 new file mode 100644 index 00000000000..503229134ab --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_36.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR fortran/48800 +! +! Contributed by Daniel Carrera +! + pure function runge_kutta_step(t, r_, dr, h) result(res) + real, intent(in) :: t, r_(:), h + real, dimension(:), allocatable :: k1, k2, k3, k4, res + integer :: N + + interface + pure function dr(t, r_) ! { dg-error "cannot have a deferred shape" } + real, intent(in) :: t, r_(:) + real :: dr(:) + end function + end interface + + N = size(r_) + allocate(k1(N),k2(N),k3(N),k4(N),res(N)) + + k1 = dr(t, r_) + k2 = dr(t + h/2, r_ + k1*h/2) + k3 = dr(t + h/2, r_ + k2*h/2) + k4 = dr(t + h , r_ + k3*h) + + res = r_ + (k1 + 2*k2 + 2*k3 + k4) * h/6 + end function diff --git a/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 b/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 index 535e8842549..d55af2905d5 100644 --- a/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 +++ b/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 @@ -16,7 +16,7 @@ contains - subroutine op_assign_VS_CH (var, exp) + subroutine op_assign_VS_CH (var, exp) ! { dg-warning "Extension: Internal procedure" } type(varying_string), intent(out) :: var character(LEN=*), intent(in) :: exp end subroutine diff --git a/gcc/testsuite/gfortran.dg/missing_derived_type_1.f90 b/gcc/testsuite/gfortran.dg/missing_derived_type_1.f90 index 49c1ec8cedf..c890927179c 100644 --- a/gcc/testsuite/gfortran.dg/missing_derived_type_1.f90 +++ b/gcc/testsuite/gfortran.dg/missing_derived_type_1.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! Tests the fix for PR29364, in which the the absence of the derived type +! Tests the fix for PR29364, in which the absence of the derived type ! 'nonexist' was not diagnosed. ! ! Contributed by Tobias Burnus <tobias.burnus@physik.fu-berlin.de> diff --git a/gcc/testsuite/gfortran.dg/module_md5_1.f90 b/gcc/testsuite/gfortran.dg/module_md5_1.f90 index e725b4b767e..f146cd2e204 100644 --- a/gcc/testsuite/gfortran.dg/module_md5_1.f90 +++ b/gcc/testsuite/gfortran.dg/module_md5_1.f90 @@ -10,5 +10,5 @@ program test use foo print *, pi end program test -! { dg-final { scan-module "foo" "MD5:5632bcd379cf023bf7e663e91d52fa12" } } +! { dg-final { scan-module "foo" "MD5:12a205c48fe46315a609823f15986377" } } ! { dg-final { cleanup-modules "foo" } } diff --git a/gcc/testsuite/gfortran.dg/namelist_65.f90 b/gcc/testsuite/gfortran.dg/namelist_65.f90 index 6ef8ca493a5..7efbe7083a3 100644 --- a/gcc/testsuite/gfortran.dg/namelist_65.f90 +++ b/gcc/testsuite/gfortran.dg/namelist_65.f90 @@ -14,9 +14,9 @@ enddo write(out,nl1) if (out(1).ne."&NL1") call abort -if (out(2).ne." A= 1.0000000 ,") call abort -if (out(3).ne." B= 2.0000000 ,") call abort -if (out(4).ne." C= 3.0000000 ,") call abort +if (out(2).ne." A= 1.00000000 ,") call abort +if (out(3).ne." B= 2.00000000 ,") call abort +if (out(4).ne." C= 3.00000000 ,") call abort if (out(5).ne." /") call abort end program oneline diff --git a/gcc/testsuite/gfortran.dg/namelist_66.f90 b/gcc/testsuite/gfortran.dg/namelist_66.f90 index 912261b4dc6..d779ea7b735 100644 --- a/gcc/testsuite/gfortran.dg/namelist_66.f90 +++ b/gcc/testsuite/gfortran.dg/namelist_66.f90 @@ -1,4 +1,4 @@ -! { dg-do run } +! { dg-do run { target fd_truncate } } ! PR46010 Failure to read these two examples of namelists type ptracer character(len = 2) :: sname diff --git a/gcc/testsuite/gfortran.dg/namelist_print_1.f b/gcc/testsuite/gfortran.dg/namelist_print_1.f index abc8aec6cdc..2e5de8305b8 100644 --- a/gcc/testsuite/gfortran.dg/namelist_print_1.f +++ b/gcc/testsuite/gfortran.dg/namelist_print_1.f @@ -9,5 +9,5 @@ namelist /mynml/ x x = 1 ! ( dg-output "^" } - print mynml ! { dg-output "&MYNML(\n|\r\n|\r) X= 1.0000000 ,(\n|\r\n|\r) /(\n|\r\n|\r)" } + print mynml ! { dg-output "&MYNML(\n|\r\n|\r) X= 1.00000000 ,(\n|\r\n|\r) /(\n|\r\n|\r)" } end diff --git a/gcc/testsuite/gfortran.dg/pr42108.f90 b/gcc/testsuite/gfortran.dg/pr42108.f90 index e97dc3756f8..9a0a2532a78 100644 --- a/gcc/testsuite/gfortran.dg/pr42108.f90 +++ b/gcc/testsuite/gfortran.dg/pr42108.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-O2 -fdump-tree-fre" } +! { dg-options "-O2 -fdump-tree-fre1" } subroutine eval(foo1,foo2,foo3,foo4,x,n,nnd) implicit real*8 (a-h,o-z) @@ -23,5 +23,5 @@ end subroutine eval ! There should be only one load from n left -! { dg-final { scan-tree-dump-times "\\*n_" 1 "fre" } } -! { dg-final { cleanup-tree-dump "fre" } } +! { dg-final { scan-tree-dump-times "\\*n_" 1 "fre1" } } +! { dg-final { cleanup-tree-dump "fre1" } } diff --git a/gcc/testsuite/gfortran.dg/pr47878.f90 b/gcc/testsuite/gfortran.dg/pr47878.f90 index 9cc4a086031..c9227f40007 100644 --- a/gcc/testsuite/gfortran.dg/pr47878.f90 +++ b/gcc/testsuite/gfortran.dg/pr47878.f90 @@ -1,5 +1,5 @@ ! PR fortran/47878 -! { dg-do run } +! { dg-do run { target fd_truncate } } integer :: a(5) open (99, recl = 40) write (99, '(5i3)') 1, 2, 3 diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 index d4773686090..57660c7b70e 100644 --- a/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 @@ -35,12 +35,12 @@ o1%ppc => o2%ppc ! { dg-error "Type/kind mismatch" } contains - real function f1(a,b) + real function f1(a,b) ! { dg-warning "Extension: Internal procedure" } real,intent(in) :: a,b f1 = a + b end function - integer function f2(a,b) + integer function f2(a,b) ! { dg-warning "Extension: Internal procedure" } real,intent(in) :: a,b f2 = a - b end function diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 index c000896d549..a21916bc844 100644 --- a/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 @@ -19,7 +19,7 @@ contains - elemental subroutine op_assign (str, ch) + elemental subroutine op_assign (str, ch) ! { dg-warning "Extension: Internal procedure" } type(nf_t), intent(out) :: str character(len=*), intent(in) :: ch end subroutine diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_32.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_32.f90 new file mode 100644 index 00000000000..eda972a4548 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_32.f90 @@ -0,0 +1,37 @@ +! { dg-do compile } +! +! PR 48095: [OOP] Invalid assignment to procedure pointer component not rejected +! +! Contributed by Arjen Markus <arjen.markus895@gmail.com> + +module m + + implicit none + + type :: rectangle + procedure(get_area), pointer :: get_special_area + end type rectangle + + abstract interface + real function get_area( this ) + import :: rectangle + class(rectangle), intent(in) :: this + end function get_area + end interface + +contains + + real function get_my_area( this ) + type(rectangle), intent(in) :: this + get_my_area = 3.0 + end function get_my_area + +end module + + +use m +type(rectangle) :: rect +rect%get_special_area => get_my_area ! { dg-error "Interface mismatch in procedure pointer assignment" } +end + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/real_const_3.f90 b/gcc/testsuite/gfortran.dg/real_const_3.f90 index 9f3f5d837d7..e4b5de7e46e 100644 --- a/gcc/testsuite/gfortran.dg/real_const_3.f90 +++ b/gcc/testsuite/gfortran.dg/real_const_3.f90 @@ -42,15 +42,15 @@ program main if (trim(adjustl(str)) .ne. 'NaN') call abort write(str,*) z - if (trim(adjustl(str)) .ne. '( NaN, NaN)') call abort + if (trim(adjustl(str)) .ne. '( NaN, NaN)') call abort write(str,*) z2 - if (trim(adjustl(str)) .ne. '( NaN, NaN)') call abort + if (trim(adjustl(str)) .ne. '( NaN, NaN)') call abort write(str,*) z3 - if (trim(adjustl(str)) .ne. '( Infinity, -Infinity)') call abort + if (trim(adjustl(str)) .ne. '( Infinity, -Infinity)') call abort write(str,*) z4 - if (trim(adjustl(str)) .ne. '( 0.0000000 , -0.0000000 )') call abort + if (trim(adjustl(str)) .ne. '( 0.00000000 , -0.00000000 )') call abort end program main diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_6.f03 b/gcc/testsuite/gfortran.dg/realloc_on_assign_6.f03 new file mode 100644 index 00000000000..7c170ebce27 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_6.f03 @@ -0,0 +1,129 @@ +! { dg-do compile } +! Test the fix for PR48456 and PR48360 in which the backend +! declarations for components were not located in the automatic +! reallocation on assignments, thereby causing ICEs. +! +! Contributed by Keith Refson <krefson@googlemail.com> +! and Douglas Foulds <mixnmaster@gmail.com> +! +! This is PR48360 + +module m + type mm + real, dimension(3,3) :: h0 + end type mm +end module m + +module gf33 + + real, allocatable, save, dimension(:,:) :: hmat + +contains + subroutine assignit + + use m + implicit none + + type(mm) :: mmv + + hmat = mmv%h0 + end subroutine assignit +end module gf33 + +! This is PR48456 + +module custom_type + +integer, parameter :: dp = kind(0.d0) + +type :: my_type_sub + real(dp), dimension(5) :: some_vector +end type my_type_sub + +type :: my_type + type(my_type_sub) :: some_element +end type my_type + +end module custom_type + +module custom_interfaces + +interface + subroutine store_data_subroutine(vec_size) + implicit none + integer, intent(in) :: vec_size + integer :: k + end subroutine store_data_subroutine +end interface + +end module custom_interfaces + +module store_data_test + +use custom_type + +save +type(my_type), dimension(:), allocatable :: some_type_to_save + +end module store_data_test + +program test + +use store_data_test + +integer :: vec_size + +vec_size = 2 + +call store_data_subroutine(vec_size) +call print_after_transfer() + +end program test + +subroutine store_data_subroutine(vec_size) + +use custom_type +use store_data_test + +implicit none + +integer, intent(in) :: vec_size +integer :: k + +allocate(some_type_to_save(vec_size)) + +do k = 1,vec_size + + some_type_to_save(k)%some_element%some_vector(1) = 1.0_dp + some_type_to_save(k)%some_element%some_vector(2) = 2.0_dp + some_type_to_save(k)%some_element%some_vector(3) = 3.0_dp + some_type_to_save(k)%some_element%some_vector(4) = 4.0_dp + some_type_to_save(k)%some_element%some_vector(5) = 5.0_dp + +end do + +end subroutine store_data_subroutine + +subroutine print_after_transfer() + +use custom_type +use store_data_test + +implicit none + +real(dp), dimension(:), allocatable :: C_vec +integer :: k + +allocate(C_vec(5)) + +do k = 1,size(some_type_to_save) + + C_vec = some_type_to_save(k)%some_element%some_vector + print *, "C_vec", C_vec + +end do + +end subroutine print_after_transfer +! { dg-final { cleanup-modules "m gf33" } } +! { dg-final { cleanup-modules "custom_type custom_interfaces" } } +! { dg-final { cleanup-modules "store_data_test" } } diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_7.f03 b/gcc/testsuite/gfortran.dg/realloc_on_assign_7.f03 new file mode 100644 index 00000000000..f871d273942 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_7.f03 @@ -0,0 +1,84 @@ +! { dg-do run } +! Check the fix for PR48462 in which the assignments involving matmul +! seg faulted because a was automatically freed before the assignment. +! Since it is related, the test for the fix of PR48746 has been added +! as a subroutine by that name. +! +! Contributed by John Nedney <ortp21@gmail.com> +! +program main + implicit none + integer, parameter :: dp = kind(0.0d0) + real(kind=dp), allocatable :: delta(:,:) + real(kind=dp), allocatable, target :: a(:,:) + real(kind=dp), pointer :: aptr(:,:) + + allocate(a(3,3)) + aptr => a + + call foo + if (.not. associated (aptr, a)) call abort () ! reallocated to same size - remains associated + call bar + if (.not. associated (aptr, a)) call abort () ! reallocated to smaller size - remains associated + call foobar + if (associated (aptr, a)) call abort () ! reallocated to larger size - disassociates + + call pr48746 +contains +! +! Original reduced version from comment #2 + subroutine foo + implicit none + real(kind=dp), allocatable :: b(:,:) + + allocate(b(3,3)) + allocate(delta(3,3)) + + a = reshape ([1d0, 2d0, 3d0, 4d0, 5d0, 6d0, 7d0, 8d0, 9d0], [3,3]) + b = reshape ([1d0, 0d0, 0d0, 0d0, 1d0, 0d0, 0d0, 0d0, 1d0], [3,3]) + + a = matmul( matmul( a, b ), b ) + delta = (a - reshape ([1d0, 2d0, 3d0, 4d0, 5d0, 6d0, 7d0, 8d0, 9d0], [3,3]))**2 + if (any (delta > 1d-12)) call abort + if (any (lbound (a) .ne. [1, 1])) call abort + end subroutine +! +! Check that all is well when the shape of 'a' changes. + subroutine bar + implicit none + real(kind=dp), allocatable :: a(:,:) + real(kind=dp), allocatable :: b(:,:) + + b = reshape ([1d0, 1d0, 1d0], [3,1]) + a = reshape ([1d0, 2d0, 3d0, 4d0, 5d0, 6d0, 7d0, 8d0, 9d0], [3,3]) + + a = matmul( a, matmul( a, b ) ) + + delta = (a - reshape ([198d0, 243d0, 288d0], [3,1]))**2 + if (any (delta > 1d-12)) call abort + if (any (lbound (a) .ne. [1, 1])) call abort + end subroutine + subroutine foobar + integer :: i + a = reshape ([(real(i, dp), i = 1, 100)],[10,10]) + end subroutine + subroutine pr48746 +! This is a further wrinkle on the original problem and came about +! because the dtype field of the result argument, passed to matmul, +! was not being set. This is needed by matmul for the rank. +! +! Contributed by Thomas Koenig <tkoenig@gcc.gnu.org> +! + implicit none + integer, parameter :: m=10, n=12, count=4 + real :: optmatmul(m, n) + real :: a(m, count), b(count, n), c(m, n) + real, dimension(:,:), allocatable :: tmp + call random_number(a) + call random_number(b) + tmp = matmul(a,b) + if (any (lbound (tmp) .ne. [1,1])) call abort + if (any (ubound (tmp) .ne. [10,12])) call abort + end subroutine +end program main + diff --git a/gcc/testsuite/gfortran.dg/round_3.f08 b/gcc/testsuite/gfortran.dg/round_3.f08 new file mode 100644 index 00000000000..8b03ce562f1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/round_3.f08 @@ -0,0 +1,99 @@ +! { dg-do run } +! PR48615 Invalid UP/DOWN rounding with E and ES descriptors +! Test case provided by Thomas Henlich. +program pr48615 + call checkfmt("(RU,F17.0)", 2.5, " 3.") + call checkfmt("(RU,-1P,F17.1)", 2.5, " 0.3") + call checkfmt("(RU,E17.1)", 2.5, " 0.3E+01") + call checkfmt("(RU,1P,E17.0)", 2.5, " 3.E+00") + call checkfmt("(RU,ES17.0)", 2.5, " 3.E+00") + call checkfmt("(RU,EN17.0)", 2.5, " 3.E+00") + call checkfmt("(RU,F2.0)", 2.0, "2.") + call checkfmt("(RU,F6.4)", 2.0, "2.0000") + call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") + call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") + call checkfmt("(RU,1P,E10.4E2)", 2.5, "2.5000E+00") + call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") + call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05") + + call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0. + call checkfmt("(RD,F3.0)", -0.09, "-1.") ! -0. + call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3. + call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3. + call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001 + call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001 + call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00 + call checkfmt("(RD,1P,E7.0E2)", -2.0, "-2.E+00") ! -3.E+00 + call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00 + call checkfmt("(RD,1P,E8.1E2)", -2.5, "-2.5E+00") ! -2.6E+00 + call checkfmt("(RU,1P,E10.4E2)", 2.5, "2.5000E+00") ! 2.5001E+00 + call checkfmt("(RD,1P,E11.4E2)", -2.5, "-2.5000E+00") ! -2.5001E+00 + call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00 + call checkfmt("(RD,1P,G7.0E2)", -2.0, "-2.E+00") ! -3.E+00 + call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05") ! 2.3457E+05 + call checkfmt("(RD,1P,G11.4E2)", -2.3456e5, "-2.3456E+05") ! -2.3457E+05 + + call checkfmt("(RD,F17.0)", 2.5, " 2.") + call checkfmt("(RD,-1P,F17.1)", 2.5, " 0.2") + call checkfmt("(RD,E17.1)", 2.5, " 0.2E+01") + call checkfmt("(RD,1P,E17.0)", 2.5, " 2.E+00") + call checkfmt("(RD,ES17.0)", 2.5, " 2.E+00") + call checkfmt("(RD,EN17.0)", 2.5, " 2.E+00") + + call checkfmt("(RC,F17.0)", 2.5, " 3.") + call checkfmt("(RC,-1P,F17.1)", 2.5, " 0.3") + call checkfmt("(RC,E17.1)", 2.5, " 0.3E+01") + call checkfmt("(RC,1P,E17.0)", 2.5, " 3.E+00") + call checkfmt("(RC,ES17.0)", 2.5, " 3.E+00") + call checkfmt("(RC,EN17.0)", 2.5, " 3.E+00") + + call checkfmt("(RN,F17.0)", 2.5, " 2.") + call checkfmt("(RN,-1P,F17.1)", 2.5, " 0.2") + call checkfmt("(RN,E17.1)", 2.5, " 0.2E+01") + call checkfmt("(RN,1P,E17.0)", 2.5, " 2.E+00") + call checkfmt("(RN,ES17.0)", 2.5, " 2.E+00") + call checkfmt("(RN,EN17.0)", 2.5, " 2.E+00") + + call checkfmt("(RZ,F17.0)", 2.5, " 2.") + call checkfmt("(RZ,-1P,F17.1)", 2.5, " 0.2") + call checkfmt("(RZ,E17.1)", 2.5, " 0.2E+01") + call checkfmt("(RZ,1P,E17.0)", 2.5, " 2.E+00") + call checkfmt("(RZ,ES17.0)", 2.5, " 2.E+00") + call checkfmt("(RZ,EN17.0)", 2.5, " 2.E+00") + + call checkfmt("(RZ,F17.0)", -2.5, " -2.") + call checkfmt("(RZ,-1P,F17.1)", -2.5, " -0.2") + call checkfmt("(RZ,E17.1)", -2.5, " -0.2E+01") + call checkfmt("(RZ,1P,E17.0)", -2.5, " -2.E+00") + call checkfmt("(RZ,ES17.0)", -2.5, " -2.E+00") + call checkfmt("(RZ,EN17.0)", -2.5, " -2.E+00") + + call checkfmt("(RN,F17.0)", -2.5, " -2.") + call checkfmt("(RN,-1P,F17.1)", -2.5, " -0.2") + call checkfmt("(RN,E17.1)", -2.5, " -0.2E+01") + call checkfmt("(RN,1P,E17.0)", -2.5, " -2.E+00") + call checkfmt("(RN,ES17.0)", -2.5, " -2.E+00") + call checkfmt("(RN,EN17.0)", -2.5, " -2.E+00") + + call checkfmt("(RC,F17.0)", -2.5, " -3.") + call checkfmt("(RC,-1P,F17.1)", -2.5, " -0.3") + call checkfmt("(RC,E17.1)", -2.5, " -0.3E+01") + call checkfmt("(RC,1P,E17.0)", -2.5, " -3.E+00") + call checkfmt("(RC,ES17.0)", -2.5, " -3.E+00") + call checkfmt("(RC,EN17.0)", -2.5, " -3.E+00") + + call checkfmt("(RU,E17.1)", nearest(2.0, 1.0), " 0.3E+01") + call checkfmt("(RD,E17.1)", nearest(3.0, -1.0), " 0.2E+01") + +contains + subroutine checkfmt(fmt, x, cmp) + character(len=*), intent(in) :: fmt + real, intent(in) :: x + character(len=*), intent(in) :: cmp + character(len=20) :: s + + write(s, fmt) x + if (s /= cmp) call abort + !if (s /= cmp) print "(a,1x,a,' expected: ',1x)", fmt, s, cmp + end subroutine +end program diff --git a/gcc/testsuite/gfortran.dg/scratch_1.f90 b/gcc/testsuite/gfortran.dg/scratch_1.f90 new file mode 100644 index 00000000000..1547bfe8c5b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/scratch_1.f90 @@ -0,0 +1,8 @@ +! { dg-do run } +! Check that we can open more than 26 scratch files concurrently + integer :: i + do i = 1, 30 + print *, i + open(100+i,status="scratch") + end do +end diff --git a/gcc/testsuite/gfortran.dg/trim_optimize_5.f90 b/gcc/testsuite/gfortran.dg/trim_optimize_5.f90 new file mode 100644 index 00000000000..70a85d601d4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/trim_optimize_5.f90 @@ -0,0 +1,21 @@ +! { dg-do run } +! { dg-options "-O -fdump-tree-original" } +! PR 47065 - replace trim with substring expressions even with references. +program main + use foo + implicit none + type t + character(len=2) :: x + end type t + type(t) :: a + character(len=3) :: b + character(len=10) :: line + a%x = 'a' + write(unit=line,fmt='(A,A)') trim(a%x),"X" + if (line /= 'aX ') call abort + b = 'ab' + write (unit=line,fmt='(A,A)') trim(b),"Y" + if (line /= 'abY ') call abort +end program main +! { dg-final { scan-tree-dump-times "string_len_trim" 2 "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/trim_optimize_6.f90 b/gcc/testsuite/gfortran.dg/trim_optimize_6.f90 new file mode 100644 index 00000000000..2303bb4ef78 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/trim_optimize_6.f90 @@ -0,0 +1,25 @@ +! { dg-do run } +! PR 47065 - make sure that impure functions are not evaluated twice when +! replacing calls to trim with expression(1:len_trim) +module foo + implicit none +contains + function f() + integer :: f + integer :: s=0 + s = s + 1 + f = s + end function f +end module foo + +program main + use foo + implicit none + character(len=10) :: line + character(len=4) :: b(2) + b(1) = 'a' + b(2) = 'bc' + write(unit=line,fmt='(A,A)') trim(b(f())), "X" + if (line /= "aX ") call abort + if (f() .ne. 2) call abort +end program main diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_22.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_22.f90 new file mode 100644 index 00000000000..f7691c5f283 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_22.f90 @@ -0,0 +1,49 @@ +! { dg-do compile } +! +! PR fortran/48810 +! +! Contributed by Andrew Baldwin +! + module qtest + type foobar + integer :: x + contains + private + procedure :: gimmex + generic, public :: getx => gimmex + end type foobar + contains + function gimmex(foo) + class (foobar) :: foo + integer :: gimmex + gimmex = foo%x + end function gimmex + end module qtest + + module qtestPriv + type foobarPriv + integer :: x + contains + private + procedure :: gimmexPriv + generic, private :: getxPriv => gimmexPriv + end type foobarPriv + contains + function gimmexPriv(foo) + class (foobarPriv) :: foo + integer :: gimmex + gimmex = foo%x + end function gimmexPriv + end module qtestPriv + + program quicktest + use qtest + use qtestPriv + type (foobar) :: foo + type (foobarPriv) :: fooPriv + integer :: bar + bar = foo%getx() ! OK + bar = fooPriv%getxPriv() ! { dg-error " is PRIVATE " } + end program quicktest + +! { dg-final { cleanup-modules "qtest qtestpriv" } } diff --git a/gcc/testsuite/gfortran.dg/use_rename_1.f90 b/gcc/testsuite/gfortran.dg/use_rename_1.f90 index 01645f678b6..2e9a3c8652a 100644 --- a/gcc/testsuite/gfortran.dg/use_rename_1.f90 +++ b/gcc/testsuite/gfortran.dg/use_rename_1.f90 @@ -1,6 +1,6 @@ ! { dg-do compile } ! Tests the fix for PR34854, in which the second of the two subroutines would fail -! because the the type declaration of nmoltype_phase would incorrectly conflict +! because the type declaration of nmoltype_phase would incorrectly conflict ! with the type given to the module variable of the same name. ! ! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> diff --git a/gcc/testsuite/gfortran.dg/whole_file_33.f90 b/gcc/testsuite/gfortran.dg/whole_file_33.f90 new file mode 100644 index 00000000000..31faeaa0992 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/whole_file_33.f90 @@ -0,0 +1,50 @@ +! { dg-do compile } +! +! PR fortran/48588 +! +! Contributed by Andres Legarra. +! + +MODULE LA_PRECISION +IMPLICIT NONE +INTEGER, PARAMETER :: dp = KIND(1.0D0) +END MODULE LA_PRECISION + +module lapack90 +INTERFACE + SUBROUTINE DGESV_F90( A, B, IPIV, INFO ) + USE la_precision, ONLY: wp => dp + IMPLICIT NONE + INTEGER, INTENT(OUT), OPTIONAL :: INFO + INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:) + REAL(WP), INTENT(IN OUT) :: A(:,:), B(:,:) + END SUBROUTINE DGESV_F90 +END INTERFACE +end module + +SUBROUTINE DGESV_F90( A, B, IPIV, INFO ) + USE la_precision, ONLY: wp => dp + IMPLICIT NONE + INTEGER, INTENT(OUT), OPTIONAL :: INFO + INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:) + REAL(WP), INTENT(IN OUT) :: A(:,:), B(:,:) +END SUBROUTINE DGESV_F90 + +MODULE DENSEOP + USE LAPACK90 + implicit none + integer, parameter :: r8 = SELECTED_REAL_KIND( 15, 307 ) + real(r8)::denseop_tol=1.d-50 + + CONTAINS + + SUBROUTINE GEINV8 (x) + real(r8)::x(:,:) + real(r8),allocatable::x_o(:,:) + allocate(x_o(size(x,1),size(x,1))) + CALL dgesv_f90(x,x_o) + x=x_o + END SUBROUTINE GEINV8 +END MODULE DENSEOP + +! { dg-final { cleanup-modules "la_precision lapack90 denseop" } } diff --git a/gcc/testsuite/gfortran.dg/whole_file_34.f90 b/gcc/testsuite/gfortran.dg/whole_file_34.f90 new file mode 100644 index 00000000000..9b421e004ae --- /dev/null +++ b/gcc/testsuite/gfortran.dg/whole_file_34.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! +! PR fortran/48788 +! +! Contributed by Zdenek Sojka +! +function foo () +end function foo + character(4), external :: foo ! { dg-error "Return type mismatch of function" } + character(4) :: x + x = foo () +END diff --git a/gcc/testsuite/gnat.dg/aggr17.adb b/gcc/testsuite/gnat.dg/aggr17.adb new file mode 100644 index 00000000000..3ba41985f72 --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr17.adb @@ -0,0 +1,28 @@ +-- { dg-do compile }
+-- { dg-options "-gnatws" }
+
+procedure Aggr17 is
+
+ type Enum is (A, B);
+
+ type Rec (D : Enum := Enum'First) is record
+ case D is
+ when A => X : Integer;
+ when B => null;
+ end case;
+ end record;
+ for Rec'Size use 128;
+ pragma Volatile (Rec);
+
+ type Config_T (D : Enum := Enum'First) is record
+ N : Natural;
+ R : Rec (D);
+ end record;
+
+ C : constant Config_T := (D => A, N => 1, R => (D => A, X => 0));
+
+ type Arr is array (Natural range 1 .. C.N) of Boolean;
+
+begin
+ null;
+end;
diff --git a/gcc/testsuite/gnat.dg/aggr18.adb b/gcc/testsuite/gnat.dg/aggr18.adb new file mode 100644 index 00000000000..511add8a17d --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr18.adb @@ -0,0 +1,28 @@ +-- { dg-do compile }
+-- { dg-options "-gnatws" }
+
+procedure Aggr18 is
+
+ type Enum is (A, B);
+
+ type Rec (D : Enum := Enum'First) is record
+ case D is
+ when A => X : Integer;
+ when B => null;
+ end case;
+ end record;
+ for Rec'Size use 128;
+ pragma Volatile (Rec);
+
+ type Config_T (D : Enum := Enum'First) is record
+ N : Natural;
+ R : Rec (D);
+ end record;
+
+ C : Config_T := (D => A, N => 1, R => (D => A, X => 0));
+
+ type Arr is array (Natural range 1 .. C.N) of Boolean;
+
+begin
+ null;
+end;
diff --git a/gcc/testsuite/gnat.dg/array14.adb b/gcc/testsuite/gnat.dg/array14.adb new file mode 100644 index 00000000000..aed29015a9a --- /dev/null +++ b/gcc/testsuite/gnat.dg/array14.adb @@ -0,0 +1,35 @@ +-- { dg-do compile }
+-- { dg-options "-gnatws" }
+
+with Array14_Pkg; use Array14_Pkg;
+
+package body Array14 is
+
+ package Nested is
+
+ Length : constant SSE.Storage_Count := Length2;
+
+ subtype Encoded_Index_Type is SSE.Storage_Count range 1 .. Length;
+ subtype Encoded_Type is SSE.Storage_Array (Encoded_Index_Type'Range);
+
+ procedure Encode (Input : in Integer; Output : out Encoded_Type);
+
+ end;
+
+ package body Nested is
+
+ procedure Encode (Input : in Integer; Output : out Encoded_Type) is
+ begin
+ Encode2 (Input, Output);
+ end;
+
+ end;
+
+ procedure Init is
+ O : Nested.Encoded_Type;
+ for O'Alignment use 4;
+ begin
+ null;
+ end;
+
+end Array14;
diff --git a/gcc/testsuite/gnat.dg/array14.ads b/gcc/testsuite/gnat.dg/array14.ads new file mode 100644 index 00000000000..9d38eeb8895 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array14.ads @@ -0,0 +1,5 @@ +package Array14 is
+
+ procedure Init;
+
+end Array14;
diff --git a/gcc/testsuite/gnat.dg/array14_pkg.ads b/gcc/testsuite/gnat.dg/array14_pkg.ads new file mode 100644 index 00000000000..804090586e3 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array14_pkg.ads @@ -0,0 +1,16 @@ +with System.Storage_Elements;
+
+package Array14_Pkg is
+
+ package SSE renames System.Storage_Elements;
+
+ function Parity_Byte_Count return SSE.Storage_Count;
+
+ Length2 : constant SSE.Storage_Count := Parity_Byte_Count;
+
+ subtype Encoded_Index_Type2 is SSE.Storage_Count range 1 .. Length2;
+ subtype Encoded_Type2 is SSE.Storage_Array (Encoded_Index_Type2'Range);
+
+ procedure Encode2 (Input : in Integer; Output : out Encoded_Type2);
+
+end Array14_Pkg;
diff --git a/gcc/testsuite/gnat.dg/array15.adb b/gcc/testsuite/gnat.dg/array15.adb new file mode 100644 index 00000000000..eb51f37c5ae --- /dev/null +++ b/gcc/testsuite/gnat.dg/array15.adb @@ -0,0 +1,24 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatws" } + +package body Array15 is + + type Arr is array (Natural range <>) of Integer; + + Table : Arr (1 .. 4); + + N : Natural := 1; + + procedure Zero is + begin + N := 0; + end; + + function F (I : Integer) return Integer is + A1 : Arr := (1 => I); + A2 : Arr := Table (1 .. N) & A1; + begin + return A2 (I); + end; + +end Array15; diff --git a/gcc/testsuite/gnat.dg/array15.ads b/gcc/testsuite/gnat.dg/array15.ads new file mode 100644 index 00000000000..c5c2087a62f --- /dev/null +++ b/gcc/testsuite/gnat.dg/array15.ads @@ -0,0 +1,5 @@ +package Array15 is + + function F (I : Integer) return Integer; + +end Array15; diff --git a/gcc/testsuite/gnat.dg/array16.adb b/gcc/testsuite/gnat.dg/array16.adb new file mode 100644 index 00000000000..18abf8f8199 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array16.adb @@ -0,0 +1,22 @@ +package body Array16 is + + function F1 (A : access My_T1) return My_T1 is + begin + return A.all; + end; + + function F2 (A : access My_T2) return My_T2 is + begin + return A.all; + end; + + procedure Proc (A : access My_T1; B : access My_T2) is + L1 : My_T1 := F1(A); + L2 : My_T2 := F2(B); + begin + if L1.D = 0 and then L2(1) = 0 then + raise Program_Error; + end if; + end; + +end Array16; diff --git a/gcc/testsuite/gnat.dg/array16.ads b/gcc/testsuite/gnat.dg/array16.ads new file mode 100644 index 00000000000..69452c98f3a --- /dev/null +++ b/gcc/testsuite/gnat.dg/array16.ads @@ -0,0 +1,31 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatn -fdump-tree-optimized" } + +with Array16_Pkg; + +package Array16 is + + type T1 (D : Integer) is record + case D is + when 1 => I : Integer; + when others => null; + end case; + end record; + + type Arr is array (Integer range <>) of Integer; + + type My_T1 is new T1 (Array16_Pkg.N); + type My_T2 is new Arr (1 .. Integer'Min (2, Array16_Pkg.N)); + + function F1 (A : access My_T1) return My_T1; + pragma Inline (F1); + + function F2 (A : access My_T2) return My_T2; + pragma Inline (F2); + + procedure Proc (A : access My_T1; B : access My_T2); + +end Array16; + +-- { dg-final { scan-tree-dump-not "secondary_stack" "optimized" } } +-- { dg-final { cleanup-tree-dump "optimized" } } diff --git a/gcc/testsuite/gnat.dg/array16_pkg.ads b/gcc/testsuite/gnat.dg/array16_pkg.ads new file mode 100644 index 00000000000..93447978cd4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array16_pkg.ads @@ -0,0 +1,5 @@ +package Array16_Pkg is + + function N return Integer; + +end Array16_Pkg; diff --git a/gcc/testsuite/gnat.dg/debug2.adb b/gcc/testsuite/gnat.dg/debug2.adb new file mode 100644 index 00000000000..f962243d6c3 --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug2.adb @@ -0,0 +1,40 @@ +-- { dg-do compile } +-- { dg-options "-g" } + +with Debug2_Pkg; use Debug2_Pkg; + +package body Debug2 is + + procedure Proc is + + function F return String_List_Ptr is + begin + return new String_List'(Singleton); + end; + + A : String_List_Ptr := F; + + begin + null; + end; + + function Get return Integer is + begin + return 0; + end; + + Failed : exception; + + A: String_Ptr; + +begin + + declare + Server_Args : Integer; + begin + Server_Args := Get; + exception + when X : Failed => A := To_Heap; + end; + +end Debug2; diff --git a/gcc/testsuite/gnat.dg/debug2.ads b/gcc/testsuite/gnat.dg/debug2.ads new file mode 100644 index 00000000000..dbdf5346dec --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug2.ads @@ -0,0 +1,5 @@ +package Debug2 is + + procedure Proc; + +end Debug2; diff --git a/gcc/testsuite/gnat.dg/debug2_pkg.ads b/gcc/testsuite/gnat.dg/debug2_pkg.ads new file mode 100644 index 00000000000..fc68249b821 --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug2_pkg.ads @@ -0,0 +1,19 @@ +package Debug2_Pkg is + + type String_Ptr is access all String; + + function To_Heap return String_Ptr; + + type String_List(Chars_Length: Positive) is private; + + type String_List_Ptr is access constant String_List; + + function Singleton return String_List; + +private + + type String_List(Chars_Length: Positive) is record + Chars: String(1..Chars_Length); + end record; + +end Debug2_Pkg; diff --git a/gcc/testsuite/gnat.dg/debug3.adb b/gcc/testsuite/gnat.dg/debug3.adb new file mode 100644 index 00000000000..6ed6b1a3d5a --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug3.adb @@ -0,0 +1,31 @@ +-- { dg-do compile } +-- { dg-options "-g" } + +with Ada.Unchecked_Conversion; +with System; + +package body Debug3 is + + type Rec is record + I : Integer; + end record; + for Rec'Alignment use 1; + + type Ptr is access Rec; + + function To_Ptr is new Ada.Unchecked_Conversion(System.Address, Ptr); + + procedure Proc is + + function Get (S1 : String) return Ptr is + begin + return To_Ptr (S1'Address); + end; + + M : Ptr; + + begin + M := Get (""); + end; + +end Debug3; diff --git a/gcc/testsuite/gnat.dg/debug3.ads b/gcc/testsuite/gnat.dg/debug3.ads new file mode 100644 index 00000000000..89d57cb62f1 --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug3.ads @@ -0,0 +1,5 @@ +package Debug3 is + + procedure Proc; + +end Debug3; diff --git a/gcc/testsuite/gnat.dg/derived_type2.adb b/gcc/testsuite/gnat.dg/derived_type2.adb new file mode 100644 index 00000000000..607eb0b22c4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/derived_type2.adb @@ -0,0 +1,40 @@ +-- { dg-do run } +-- { dg-options "-gnatws" } + +procedure Derived_Type2 is + + package Pkg is + + type Parent (B : Boolean := True) is record + case B is + when True => S : String (1 .. 5); + when False => F : Float; + end case; + end record; + + function Create (X : Parent) return Parent; + + end Pkg; + + package body Pkg is + + function Create (X : Parent) return Parent is + begin + return (True, "12345"); + end; + + end Pkg; + + use Pkg; + + type T is new Parent (True); + + X : T; + +begin + + if Create (X).B /= True then + raise Program_Error; + end if; + +end; diff --git a/gcc/testsuite/gnat.dg/discr26.adb b/gcc/testsuite/gnat.dg/discr26.adb new file mode 100644 index 00000000000..2d498889bf8 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr26.adb @@ -0,0 +1,19 @@ +-- { dg-do compile } +-- { dg-options "-gnatws" } + +package body Discr26 is + + function F1 return My_T1 is + R: My_T1; + begin + return R; + end; + + procedure Proc is + begin + if F1.D = 0 then + raise Program_Error; + end if; + end; + +end Discr26; diff --git a/gcc/testsuite/gnat.dg/discr26.ads b/gcc/testsuite/gnat.dg/discr26.ads new file mode 100644 index 00000000000..5a428f2bfed --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr26.ads @@ -0,0 +1,16 @@ +with Discr26_Pkg; + +package Discr26 is + + type T1 (D : Integer) is record + case D is + when 1 => I : Integer; + when others => null; + end case; + end record; + + type My_T1 is new T1 (Discr26_Pkg.N); + + procedure Proc; + +end Discr26; diff --git a/gcc/testsuite/gnat.dg/discr26_pkg.ads b/gcc/testsuite/gnat.dg/discr26_pkg.ads new file mode 100644 index 00000000000..ca775eb5d61 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr26_pkg.ads @@ -0,0 +1,5 @@ +package Discr26_Pkg is + + function N return Integer; + +end Discr26_Pkg; diff --git a/gcc/testsuite/gnat.dg/discr27.adb b/gcc/testsuite/gnat.dg/discr27.adb new file mode 100644 index 00000000000..875fe435b66 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr27.adb @@ -0,0 +1,33 @@ +-- { dg-do compile }
+
+package body Discr27 is
+
+ subtype Index is Positive range 1..4096;
+
+ function F return String is
+ S : String(1..1) := (others =>'w');
+ begin
+ return S;
+ end;
+
+ type Enum is (One, Two);
+
+ type Rec (D : Enum := One; Len : Index := 1) is record
+ case D is
+ when One => I : Integer;
+ when Two => A : String(1..Len);
+ end case;
+ end record;
+
+ procedure Nothing is
+ M : constant String := F;
+ C : constant Rec := (Two, M'Length, M);
+ begin
+ null;
+ end;
+
+ procedure Proc is begin
+ null;
+ end;
+
+end Discr27;
diff --git a/gcc/testsuite/gnat.dg/discr27.ads b/gcc/testsuite/gnat.dg/discr27.ads new file mode 100644 index 00000000000..247134a9916 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr27.ads @@ -0,0 +1,5 @@ +package Discr27 is
+
+ procedure Proc;
+
+end Discr27;
diff --git a/gcc/testsuite/gnat.dg/discr28.adb b/gcc/testsuite/gnat.dg/discr28.adb new file mode 100644 index 00000000000..97ca8cd68b7 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr28.adb @@ -0,0 +1,25 @@ +-- { dg-do compile } + +package body Discr28 is + + procedure Dummy (E : Rec) is + begin + null; + end; + + function F return Rec is + begin + return Default_Rec; + end; + + procedure Proc1 is + begin + Dummy (F); + end; + + procedure Proc2 is + begin + Dummy (F); + end; + +end Discr28; diff --git a/gcc/testsuite/gnat.dg/discr28.ads b/gcc/testsuite/gnat.dg/discr28.ads new file mode 100644 index 00000000000..3288b52bfcb --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr28.ads @@ -0,0 +1,19 @@ +with Discr28_Pkg; + +package Discr28 is + + type Enum is (One, Two); + + type Rec (D : Enum := One) is record + case D is + when One => null; + when Two => S : String (1 .. Discr28_Pkg.N); + end case; + end record; + + Default_Rec : constant Rec := (D => One); + + procedure Proc1; + procedure Proc2; + +end Discr28; diff --git a/gcc/testsuite/gnat.dg/discr28_pkg.ads b/gcc/testsuite/gnat.dg/discr28_pkg.ads new file mode 100644 index 00000000000..f6be834eedc --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr28_pkg.ads @@ -0,0 +1,5 @@ +package Discr28_Pkg is + + function N return Natural; + +end Discr28_Pkg; diff --git a/gcc/testsuite/gnat.dg/discr29.adb b/gcc/testsuite/gnat.dg/discr29.adb new file mode 100644 index 00000000000..56047c9cf6e --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr29.adb @@ -0,0 +1,8 @@ +package body Discr29 is + + procedure Proc (R : out Rec3) is + begin + R := (False, Tmp); + end; + +end Discr29; diff --git a/gcc/testsuite/gnat.dg/discr29.ads b/gcc/testsuite/gnat.dg/discr29.ads new file mode 100644 index 00000000000..a205bc1e0dd --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr29.ads @@ -0,0 +1,27 @@ +-- { dg-do compile } + +package Discr29 is + + type Rec1 is record + I1 : Integer; + I2 : Integer; + I3 : Integer; + end record; + + type Rec2 is tagged record + I1 : Integer; + I2 : Integer; + end record; + + type Rec3 (D : Boolean) is record + case D is + when True => A : Rec1; + when False => B : Rec2; + end case; + end record; + + procedure Proc (R : out Rec3); + + Tmp : Rec2; + +end Discr29; diff --git a/gcc/testsuite/gnat.dg/discr30.adb b/gcc/testsuite/gnat.dg/discr30.adb new file mode 100644 index 00000000000..b3bf10013b6 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr30.adb @@ -0,0 +1,50 @@ +-- PR ada/48844 +-- Reported by Georg Bauhaus <bauhaus@futureapps.de> */ + +-- { dg-do compile } + +procedure Discr30 is + + generic + type Source is private; + type Target is private; + function Conversion (S : Source) return Target; + + function Conversion (S : Source) return Target is + type Source_Wrapper is tagged record + S : Source; + end record; + type Target_Wrapper is tagged record + T : Target; + end record; + + type Selector is (Source_Field, Target_Field); + type Magic (Sel : Selector := Target_Field) is record + case Sel is + when Source_Field => S : Source_Wrapper; + when Target_Field => T : Target_Wrapper; + end case; + end record; + + M : Magic; + + function Convert (T : Target_Wrapper) return Target is + begin + M := (Sel => Source_Field, S => (S => S)); + return T.T; + end Convert; + + begin + return Convert (M.T); + end Conversion; + + type Integer_Access is access all Integer; + + I : aliased Integer; + I_Access : Integer_Access := I'Access; + + function Convert is new Conversion (Integer_Access, Integer); + +begin + I := Convert (I_Access); +end; diff --git a/gcc/testsuite/gnat.dg/limited_with2.adb b/gcc/testsuite/gnat.dg/limited_with2.adb new file mode 100644 index 00000000000..b9c5417a627 --- /dev/null +++ b/gcc/testsuite/gnat.dg/limited_with2.adb @@ -0,0 +1,12 @@ +-- { dg-do compile } + +with Limited_With2_Pkg2; + +package body Limited_With2 is + + function Func (Val : Rec1) return Limited_With2_Pkg1.Rec2 is + begin + return Val.F; + end; + +end Limited_With2; diff --git a/gcc/testsuite/gnat.dg/limited_with2.ads b/gcc/testsuite/gnat.dg/limited_with2.ads new file mode 100644 index 00000000000..4f076d4b8ec --- /dev/null +++ b/gcc/testsuite/gnat.dg/limited_with2.ads @@ -0,0 +1,11 @@ +with Limited_With2_Pkg1; + +package Limited_With2 is + + type Rec1 is record + F : Limited_With2_Pkg1.Rec2; + end record; + + function Func (Val : Rec1) return Limited_With2_Pkg1.Rec2; + +end Limited_With2; diff --git a/gcc/testsuite/gnat.dg/limited_with2_pkg1.ads b/gcc/testsuite/gnat.dg/limited_with2_pkg1.ads new file mode 100644 index 00000000000..d821fa3a6d6 --- /dev/null +++ b/gcc/testsuite/gnat.dg/limited_with2_pkg1.ads @@ -0,0 +1,9 @@ +limited with Limited_With2_Pkg2; + +package Limited_With2_Pkg1 is + + type Rec2 is record + F : access Limited_With2_Pkg2.Rec3; + end record; + +end Limited_With2_Pkg1; diff --git a/gcc/testsuite/gnat.dg/limited_with2_pkg2.ads b/gcc/testsuite/gnat.dg/limited_with2_pkg2.ads new file mode 100644 index 00000000000..c2d1012e3ab --- /dev/null +++ b/gcc/testsuite/gnat.dg/limited_with2_pkg2.ads @@ -0,0 +1,9 @@ +with Limited_With2; + +package Limited_With2_Pkg2 is + + type Rec3 is record + F : Limited_With2.Rec1; + end record; + +end Limited_With2_Pkg2; diff --git a/gcc/testsuite/gnat.dg/opt15.adb b/gcc/testsuite/gnat.dg/opt15.adb new file mode 100644 index 00000000000..eadc25d7023 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt15.adb @@ -0,0 +1,12 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatn -fdump-tree-optimized" } + +with Opt15_Pkg; use Opt15_Pkg; + +procedure Opt15 is +begin + Trace_Inlined; +end; + +-- { dg-final { scan-tree-dump-not "trace_inlined" "optimized" } } +-- { dg-final { cleanup-tree-dump "optimized" } } diff --git a/gcc/testsuite/gnat.dg/opt15_pkg.adb b/gcc/testsuite/gnat.dg/opt15_pkg.adb new file mode 100644 index 00000000000..ebb1d263e81 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt15_pkg.adb @@ -0,0 +1,13 @@ +package body Opt15_Pkg is + + procedure Trace_Non_Inlined is + begin + raise Program_Error; + end; + + procedure Trace_Inlined is + begin + Trace_Non_Inlined; + end; + +end Opt15_Pkg; diff --git a/gcc/testsuite/gnat.dg/opt15_pkg.ads b/gcc/testsuite/gnat.dg/opt15_pkg.ads new file mode 100644 index 00000000000..f1d0302033d --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt15_pkg.ads @@ -0,0 +1,6 @@ +package Opt15_Pkg is + + procedure Trace_Inlined; + pragma Inline (Trace_Inlined); + +end Opt15_Pkg; diff --git a/gcc/testsuite/gnat.dg/opt16.adb b/gcc/testsuite/gnat.dg/opt16.adb new file mode 100644 index 00000000000..d8e93bda2a1 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt16.adb @@ -0,0 +1,33 @@ +-- { dg-do compile } +-- { dg-options "-O2 -gnatws" } + +procedure Opt16 is + + generic + type T (<>) is private; + V, V1 : T; + with function F1 (X : T) return T; + package GP is + R : Boolean := F1 (V) = V1; + end GP; + + type AB is array (Boolean range <>) of Boolean; + +begin + for I1 in Boolean loop + for I2 in Boolean loop + declare + B1 : Boolean := I1; + B2 : Boolean := I2; + AB1 : AB (Boolean) := (I1, I2); + T : AB (B1 .. B2) := (B1 .. B2 => True); + F : AB (B1 .. B2) := (B1 .. B2 => False); + + package P is new GP (AB, AB1, NOT AB1, "NOT"); + + begin + null; + end; + end loop; + end loop; +end; diff --git a/gcc/testsuite/gnat.dg/return3.adb b/gcc/testsuite/gnat.dg/return3.adb new file mode 100644 index 00000000000..0f6e3fc64d4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/return3.adb @@ -0,0 +1,9 @@ +-- { dg-do compile { target *-*-linux* } } +-- { dg-options "-gdwarf-2" } + +procedure Return3 is +begin + return; +end; + +-- { dg-final { scan-assembler "loc 1 6" } } diff --git a/gcc/testsuite/gnat.dg/specs/aggr2.ads b/gcc/testsuite/gnat.dg/specs/aggr2.ads new file mode 100644 index 00000000000..8f7ea871733 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/aggr2.ads @@ -0,0 +1,14 @@ +-- { dg-do compile } + +package Aggr2 is + + type Buffer is array (Positive range <>) of Boolean; + for Buffer'Alignment use 4; + + type Buffer_Ptr is access Buffer; + + subtype My_Buffer is Buffer (1 .. 2); + + P : Buffer_Ptr := new My_Buffer'(Others => False); + +end Aggr2; diff --git a/gcc/testsuite/gnat.dg/specs/elab2.ads b/gcc/testsuite/gnat.dg/specs/elab2.ads new file mode 100644 index 00000000000..005871b08a4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/elab2.ads @@ -0,0 +1,20 @@ +-- { dg-do compile } + +with Elab2_Pkg; use Elab2_Pkg; + +package Elab2 is + + type Num is (One, Two); + + type Rec2 (D : Index_Type := 0) is record + Data : Rec1(D); + end record; + + type Rec3 (D : Num) is record + case D is + when One => R : Rec2; + when others => null; + end case; + end record; + +end Elab2; diff --git a/gcc/testsuite/gnat.dg/specs/elab2_pkg.ads b/gcc/testsuite/gnat.dg/specs/elab2_pkg.ads new file mode 100644 index 00000000000..8d40cd1de9d --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/elab2_pkg.ads @@ -0,0 +1,18 @@ +-- { dg-excess-errors "no code generated" } + +package Elab2_Pkg is + + function Get_Value (S : String) return Integer; + + Max_Limit : constant array(1..2) of Integer := + (1 => Get_Value ("One"), 2 => Get_Value ("Two")); + + type Index_Type is new Natural range 0 .. Max_Limit(1); + + type Array_Type is array (Index_Type range <>) of Natural; + + type Rec1(D : Index_Type) is record + A : Array_Type(1 .. D); + end record; + +end Elab2_Pkg; diff --git a/gcc/testsuite/gnat.dg/volatile5.adb b/gcc/testsuite/gnat.dg/volatile5.adb new file mode 100644 index 00000000000..24527a50004 --- /dev/null +++ b/gcc/testsuite/gnat.dg/volatile5.adb @@ -0,0 +1,16 @@ +-- { dg-do compile } + +with Volatile5_Pkg; use Volatile5_Pkg; + +procedure Volatile5 is + + A : Rec; + + procedure Proc is + begin + A := F; + end; + +begin + Proc; +end; diff --git a/gcc/testsuite/gnat.dg/volatile5_pkg.ads b/gcc/testsuite/gnat.dg/volatile5_pkg.ads new file mode 100644 index 00000000000..71a0c8046a3 --- /dev/null +++ b/gcc/testsuite/gnat.dg/volatile5_pkg.ads @@ -0,0 +1,11 @@ +package Volatile5_Pkg is + + type Rec is record + I : Integer; + end record; + pragma Volatile(Rec); + + function F return Rec; + +end Volatile5_Pkg; +--
\ No newline at end of file diff --git a/gcc/testsuite/go.test/go-test.exp b/gcc/testsuite/go.test/go-test.exp index 19cc0dfc4d3..f0285a25cff 100644 --- a/gcc/testsuite/go.test/go-test.exp +++ b/gcc/testsuite/go.test/go-test.exp @@ -35,7 +35,7 @@ load_lib go-dg.exp load_lib go-torture.exp # Implement errchk -proc errchk { test } { +proc errchk { test opts } { global dg-do-what-default global DEFAULT_GOCFLAGS global runtests @@ -51,6 +51,10 @@ proc errchk { test } { set fdout [open $filename w] fconfigure $fdout -encoding binary while { [gets $fdin copy_line] >= 0 } { + if [string match "*////*" $copy_line] { + puts $fdout $copy_line + continue + } regsub "// \(GCCGO_\)?ERROR \"\(\[^\"\]*\)\".*$" $copy_line "// \{ dg-error \"\\2\" \}" out_line if [string match "*dg-error*.\**" $out_line] { # I worked out the right number of backslashes by @@ -65,6 +69,14 @@ proc errchk { test } { set index [string first "dg-error" $out_line] regsub -start $index -all "\}\(.\)" $out_line "\\\\\[\\\}\\\\\]\\1" out_line } + if [string match "*dg-error*\(*" $out_line] { + set index [string first "dg-error" $out_line] + regsub -start $index -all "\\\\\\\(" $out_line "\\\\\[\\\(\\\\\]" out_line + } + if [string match "*dg-error*\)*\}" $out_line] { + set index [string first "dg-error" $out_line] + regsub -start $index -all "\\\\\\\)\(.\)" $out_line "\\\\\[\\\)\\\\\]\\1" out_line + } if [string match "*dg-error*\[.\]*" $out_line] { set index [string first "dg-error" $out_line] regsub -all "\\\[\\.\\\]" $out_line "\\\\\[.\\\\\]" out_line @@ -76,7 +88,7 @@ proc errchk { test } { set hold_runtests $runtests set runtests "go-test.exp" - go-dg-runtest $filename "-fno-show-column $DEFAULT_GOCFLAGS" + go-dg-runtest $filename "-fno-show-column $DEFAULT_GOCFLAGS $opts" set runtests $hold_runtests file delete $filename @@ -111,6 +123,9 @@ proc go-set-goarch { } { global target_triplet switch -glob $target_triplet { + "alpha*-*-*" { + set goarch "alpha" + } "arm*-*-*" - "ep9312*-*-*" - "strongarm*-*-*" - @@ -125,11 +140,41 @@ proc go-set-goarch { } { set goarch "amd64" } } + "mips*-*-*" { + if [check_no_compiler_messages mipso32 assembly { + #if _MIPS_SIM != _ABIO32 + #error FOO + #endif + }] { + set goarch "mipso32" + } elseif [check_no_compiler_messages mipsn32 assembly { + #if _MIPS_SIM != _ABIN32 + #error FOO + #endif + }] { + set goarch "mipsn32" + } elseif [check_no_compiler_messages mipsn64 assembly { + #if _MIPS_SIM != _ABI64 + #error FOO + #endif + }] { + set goarch "mipsn64" + } elseif [check_no_compiler_messages mipso64 assembly { + #if _MIPS_SIM != _ABIO64 + #error FOO + #endif + }] { + set goarch "mipso64" + } else { + perror "$target_triplet: unrecognized MIPS ABI" + return "" + } + } "sparc*-*-*" { if [check_effective_target_ilp32] { set goarch "sparc" } else { - set goarch "sparcv9" + set goarch "sparc64" } } default { @@ -336,7 +381,8 @@ proc go-gc-tests { } { "// \$G \$D/\$F.go && \$L \$F.\$A || echo BUG*" \ $test_line] \ || [string match "// \$G \$F.go && \$L \$F.\$A #*" \ - $test_line] } { + $test_line] + || $test_line == "// \$G \$D/\$F.go && \$L \$F.\$A" } { # This is a vanilla compile and link test. set dg-do-what-default "link" go-dg-runtest $test "-w $DEFAULT_GOCFLAGS" @@ -387,7 +433,7 @@ proc go-gc-tests { } { $test_line] \ || [string match "// errchk \$G \$D/\$F.go || echo BUG*" \ $test_line] } { - errchk $test + errchk $test "" } elseif { [string match \ "// \$G \$D/\$F.dir/bug0.go && \$G \$D/\$F.dir/bug1.go || echo BUG*" \ $test_line] } { @@ -421,7 +467,7 @@ proc go-gc-tests { } { regsub "\\.go$" $test ".dir/$name1" file1 dg-test -keep-output $file1 "-O" "-w $DEFAULT_GOCFLAGS" regsub "\\.go$" $test ".dir/$name2" file2 - errchk $file2 + errchk $file2 "" file delete "[file rootname [file tail $file1]].o" set runtests $hold_runtests } elseif { [string match \ @@ -464,7 +510,7 @@ proc go-gc-tests { } { regsub "\\.go$" $test ".dir/bug1.go" file2 dg-test -keep-output $file2 "-O" "-w $DEFAULT_GOCFLAGS" regsub "\\.go$" $test ".dir/bug2.go" file3 - errchk $file3 + errchk $file3 "" file delete "[file rootname [file tail $file1]].o" file delete "[file rootname [file tail $file2]].o" set runtests $hold_runtests @@ -544,6 +590,33 @@ proc go-gc-tests { } { file delete $ofile1 $ofile2 $output_file set runtests $hold_runtests } elseif { [string match \ + "// \$G \$D/\$F.dir/lib.go && \$G \$D/\$F.dir/main.go && \$L main.\$A && ./\$A.out || echo BUG*" \ + $test_line ] } { + set hold_runtests $runtests + set runtests "go-test.exp" + set dg-do-what-default "assemble" + regsub "\\.go$" $test ".dir/lib.go" file1 + dg-test -keep-output $file1 "-O" "-w $DEFAULT_GOCFLAGS" + set ofile1 "[file rootname [file tail $file1]].o" + regsub "\\.go$" $test ".dir/main.go" file2 + dg-test -keep-output $file2 "-O" "-w $DEFAULT_GOCFLAGS" + set ofile2 "[file rootname [file tail $file2]].o" + set dg-do-what-default "link" + set output_file "./[file rootname [file tail $file2]].exe" + set comp_output [go_target_compile "$ofile1 $ofile2" \ + $output_file "executable" "$DEFAULT_GOCFLAGS"] + set comp_output [go-dg-prune $target_triplet $comp_output] + if [string match "" $comp_output] { + set result [go_load "$output_file" "" ""] + set status [lindex $result 0] + $status $name + } else { + verbose -log $comp_output + fail $name + } + file delete $ofile1 $ofile2 $output_file + set runtests $hold_runtests + } elseif { [string match \ "// \$G \$D/\$F.dir/chanbug.go && \$G -I. \$D/\$F.dir/chanbug2.go" \ $test_line] } { set hold_runtests $runtests @@ -570,7 +643,7 @@ proc go-gc-tests { } { regsub "\\.go$" $test ".dir/x.go" file1 dg-test -keep-output $file1 "-O" "-w $DEFAULT_GOCFLAGS" regsub "\\.go$" $test ".dir/y.go" file2 - errchk $file2 + errchk $file2 "" file delete "[file rootname [file tail $file1]].o" set runtests $hold_runtests } elseif { [string match "// true*" $test_line] } { @@ -594,7 +667,7 @@ proc go-gc-tests { } { dg-test -keep-output $file2 "-O" "-w $DEFAULT_GOCFLAGS" set ofile2 "[file rootname [file tail $file2]].o" regsub "\\.go$" $test ".dir/bug3.go" file3 - errchk $file3 + errchk $file3 "" set output_file "./[file rootname [file tail $test]].exe" set comp_output [go_target_compile "$ofile0 $ofile1 $ofile2" \ $output_file "executable" "$DEFAULT_GOCFLAGS"] @@ -658,7 +731,7 @@ proc go-gc-tests { } { } file delete $output_file } elseif { $test_line == "// \$G \$D/\$F.go && \$L \$F.\$A &&" \ - && $test_line2 == "// ./\$A.out -pass 0 >tmp.go && \$G tmp.go && \$L -o tmp1.\$A tmp.\$A && ./tmp1.\$A &&" \ + && $test_line2 == "// ./\$A.out -pass 0 >tmp.go && \$G tmp.go && \$L -o \$A.out1 tmp.\$A && ./\$A.out1 &&" \ && $test_line3 == "// ./\$A.out -pass 1 >tmp.go && errchk \$G -e tmp.go &&" \ && $test_line4 == "// ./\$A.out -pass 2 >tmp.go && errchk \$G -e tmp.go" } { set go_execute_args "" @@ -679,13 +752,13 @@ proc go-gc-tests { } { fail "$name execution 1" } else { pass "$name execution 1" - errchk tmp.go + errchk tmp.go "" } if { [catch "exec $output_file -pass 2 >tmp.go"] != 0 } { fail "$name execution 2" } else { pass "$name execution 2" - errchk tmp.go + errchk tmp.go "" } file delete tmp.go } @@ -705,11 +778,63 @@ proc go-gc-tests { } { } else { pass "$name execution" file delete tmp.x - errchk tmp.go + errchk tmp.go "" + } + } + file delete $output_file + set runtests $hold_runtests + } elseif { [string match \ + "// \$G \$D/\$F.dir/p.go && \$G \$D/\$F.dir/main.go && \$L main.\$A && ! ./\$A.out || echo BUG*" \ + $test_line] } { + set hold_runtests $runtests + set runtests "go-test.exp" + set dg-do-what-default "assemble" + regsub "\\.go$" $test ".dir/p.go" file1 + dg-test -keep-output $file1 "-O" "-w $DEFAULT_GOCFLAGS" + set ofile1 "[file rootname [file tail $file1]].o" + regsub "\\.go$" $test ".dir/main.go" file2 + dg-test -keep-output $file2 "-O" "-w $DEFAULT_GOCFLAGS" + set ofile2 "[file rootname [file tail $file2]].o" + set output_file "./[file rootname [file tail $test]].exe" + set comp_output [go_target_compile "$ofile1 $ofile2" \ + $output_file "executable" "$DEFAULT_GOCFLAGS"] + set comp_output [go-dg-prune $target_triplet $comp_output] + if [string match "" $comp_output] { + setup_xfail "*-*-*" + set result [go_load "$output_file" "" ""] + set status [lindex $result 0] + $status $name + } else { + verbose -log $comp_output + fali $name + } + file delete $ofile1 $ofile2 $output_file + set runtests $hold_runtests + } elseif { $test_line == "// \$G \$D/\$F.go && \$L \$F.\$A && ./\$A.out >tmp.go &&" + && $test_line2 == "// \$G tmp.go && \$L tmp.\$A && ./\$A.out || echo BUG: select5" } { + set go_execute_args "" + set hold_runtests $runtests + set runtests "go-test.exp" + set dg-do-what-default "link" + dg-test -keep-output $test "-O" "-w $DEFAULT_GOCFLAGS" + set output_file "./[file rootname [file tail $test]].exe" + set base "[file rootname [file tail $test]]" + if [isnative] { + if { [catch "exec $output_file > $base-out.go"] != 0 } { + fail "$name execution" + } else { + pass "$name execution" + file delete $base-out.x + go-torture-execute "./$base-out.go" } + # file delete $base-out.go } file delete $output_file set runtests $hold_runtests + } elseif { $test_line == "// errchk \$G -e \$D/\$F.dir/\[ab\].go" } { + regsub "\\.go$" $test ".dir/a.go" file1 + regsub "\\.go$" $test ".dir/b.go" file2 + errchk "$file1" "$file2" } elseif { $test_line == "// # generated by cmplxdivide.c" } { # Ignore. } elseif { $test_line == "// \$G \$D/bug302.dir/p.go && gopack grc pp.a p.\$A && \$G \$D/bug302.dir/main.go" \ diff --git a/gcc/testsuite/go.test/test/append.go b/gcc/testsuite/go.test/test/append.go new file mode 100644 index 00000000000..96421c36b89 --- /dev/null +++ b/gcc/testsuite/go.test/test/append.go @@ -0,0 +1,227 @@ +// $G $F.go && $L $F.$A && ./$A.out + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Semi-exhaustive test for append() + +package main + +import ( + "fmt" + "reflect" +) + + +func verify(name string, result, expected interface{}) { + if !reflect.DeepEqual(result, expected) { + panic(name) + } +} + + +func main() { + for _, t := range tests { + verify(t.name, t.result, t.expected) + } + verifyStruct() + verifyInterface() +} + + +var tests = []struct { + name string + result, expected interface{} +}{ + {"bool a", append([]bool{}), []bool{}}, + {"bool b", append([]bool{}, true), []bool{true}}, + {"bool c", append([]bool{}, true, false, true, true), []bool{true, false, true, true}}, + + {"bool d", append([]bool{true, false, true}), []bool{true, false, true}}, + {"bool e", append([]bool{true, false, true}, false), []bool{true, false, true, false}}, + {"bool f", append([]bool{true, false, true}, false, false, false), []bool{true, false, true, false, false, false}}, + + {"bool g", append([]bool{}, []bool{true}...), []bool{true}}, + {"bool h", append([]bool{}, []bool{true, false, true, false}...), []bool{true, false, true, false}}, + + {"bool i", append([]bool{true, false, true}, []bool{true}...), []bool{true, false, true, true}}, + {"bool j", append([]bool{true, false, true}, []bool{true, true, true}...), []bool{true, false, true, true, true, true}}, + + + {"byte a", append([]byte{}), []byte{}}, + {"byte b", append([]byte{}, 0), []byte{0}}, + {"byte c", append([]byte{}, 0, 1, 2, 3), []byte{0, 1, 2, 3}}, + + {"byte d", append([]byte{0, 1, 2}), []byte{0, 1, 2}}, + {"byte e", append([]byte{0, 1, 2}, 3), []byte{0, 1, 2, 3}}, + {"byte f", append([]byte{0, 1, 2}, 3, 4, 5), []byte{0, 1, 2, 3, 4, 5}}, + + {"byte g", append([]byte{}, []byte{0}...), []byte{0}}, + {"byte h", append([]byte{}, []byte{0, 1, 2, 3}...), []byte{0, 1, 2, 3}}, + + {"byte i", append([]byte{0, 1, 2}, []byte{3}...), []byte{0, 1, 2, 3}}, + {"byte j", append([]byte{0, 1, 2}, []byte{3, 4, 5}...), []byte{0, 1, 2, 3, 4, 5}}, + + + {"int16 a", append([]int16{}), []int16{}}, + {"int16 b", append([]int16{}, 0), []int16{0}}, + {"int16 c", append([]int16{}, 0, 1, 2, 3), []int16{0, 1, 2, 3}}, + + {"int16 d", append([]int16{0, 1, 2}), []int16{0, 1, 2}}, + {"int16 e", append([]int16{0, 1, 2}, 3), []int16{0, 1, 2, 3}}, + {"int16 f", append([]int16{0, 1, 2}, 3, 4, 5), []int16{0, 1, 2, 3, 4, 5}}, + + {"int16 g", append([]int16{}, []int16{0}...), []int16{0}}, + {"int16 h", append([]int16{}, []int16{0, 1, 2, 3}...), []int16{0, 1, 2, 3}}, + + {"int16 i", append([]int16{0, 1, 2}, []int16{3}...), []int16{0, 1, 2, 3}}, + {"int16 j", append([]int16{0, 1, 2}, []int16{3, 4, 5}...), []int16{0, 1, 2, 3, 4, 5}}, + + + {"uint32 a", append([]uint32{}), []uint32{}}, + {"uint32 b", append([]uint32{}, 0), []uint32{0}}, + {"uint32 c", append([]uint32{}, 0, 1, 2, 3), []uint32{0, 1, 2, 3}}, + + {"uint32 d", append([]uint32{0, 1, 2}), []uint32{0, 1, 2}}, + {"uint32 e", append([]uint32{0, 1, 2}, 3), []uint32{0, 1, 2, 3}}, + {"uint32 f", append([]uint32{0, 1, 2}, 3, 4, 5), []uint32{0, 1, 2, 3, 4, 5}}, + + {"uint32 g", append([]uint32{}, []uint32{0}...), []uint32{0}}, + {"uint32 h", append([]uint32{}, []uint32{0, 1, 2, 3}...), []uint32{0, 1, 2, 3}}, + + {"uint32 i", append([]uint32{0, 1, 2}, []uint32{3}...), []uint32{0, 1, 2, 3}}, + {"uint32 j", append([]uint32{0, 1, 2}, []uint32{3, 4, 5}...), []uint32{0, 1, 2, 3, 4, 5}}, + + + {"float64 a", append([]float64{}), []float64{}}, + {"float64 b", append([]float64{}, 0), []float64{0}}, + {"float64 c", append([]float64{}, 0, 1, 2, 3), []float64{0, 1, 2, 3}}, + + {"float64 d", append([]float64{0, 1, 2}), []float64{0, 1, 2}}, + {"float64 e", append([]float64{0, 1, 2}, 3), []float64{0, 1, 2, 3}}, + {"float64 f", append([]float64{0, 1, 2}, 3, 4, 5), []float64{0, 1, 2, 3, 4, 5}}, + + {"float64 g", append([]float64{}, []float64{0}...), []float64{0}}, + {"float64 h", append([]float64{}, []float64{0, 1, 2, 3}...), []float64{0, 1, 2, 3}}, + + {"float64 i", append([]float64{0, 1, 2}, []float64{3}...), []float64{0, 1, 2, 3}}, + {"float64 j", append([]float64{0, 1, 2}, []float64{3, 4, 5}...), []float64{0, 1, 2, 3, 4, 5}}, + + + {"complex128 a", append([]complex128{}), []complex128{}}, + {"complex128 b", append([]complex128{}, 0), []complex128{0}}, + {"complex128 c", append([]complex128{}, 0, 1, 2, 3), []complex128{0, 1, 2, 3}}, + + {"complex128 d", append([]complex128{0, 1, 2}), []complex128{0, 1, 2}}, + {"complex128 e", append([]complex128{0, 1, 2}, 3), []complex128{0, 1, 2, 3}}, + {"complex128 f", append([]complex128{0, 1, 2}, 3, 4, 5), []complex128{0, 1, 2, 3, 4, 5}}, + + {"complex128 g", append([]complex128{}, []complex128{0}...), []complex128{0}}, + {"complex128 h", append([]complex128{}, []complex128{0, 1, 2, 3}...), []complex128{0, 1, 2, 3}}, + + {"complex128 i", append([]complex128{0, 1, 2}, []complex128{3}...), []complex128{0, 1, 2, 3}}, + {"complex128 j", append([]complex128{0, 1, 2}, []complex128{3, 4, 5}...), []complex128{0, 1, 2, 3, 4, 5}}, + + + {"string a", append([]string{}), []string{}}, + {"string b", append([]string{}, "0"), []string{"0"}}, + {"string c", append([]string{}, "0", "1", "2", "3"), []string{"0", "1", "2", "3"}}, + + {"string d", append([]string{"0", "1", "2"}), []string{"0", "1", "2"}}, + {"string e", append([]string{"0", "1", "2"}, "3"), []string{"0", "1", "2", "3"}}, + {"string f", append([]string{"0", "1", "2"}, "3", "4", "5"), []string{"0", "1", "2", "3", "4", "5"}}, + + {"string g", append([]string{}, []string{"0"}...), []string{"0"}}, + {"string h", append([]string{}, []string{"0", "1", "2", "3"}...), []string{"0", "1", "2", "3"}}, + + {"string i", append([]string{"0", "1", "2"}, []string{"3"}...), []string{"0", "1", "2", "3"}}, + {"string j", append([]string{"0", "1", "2"}, []string{"3", "4", "5"}...), []string{"0", "1", "2", "3", "4", "5"}}, +} + + +func verifyStruct() { + type T struct { + a, b, c string + } + type S []T + e := make(S, 100) + for i := range e { + e[i] = T{"foo", fmt.Sprintf("%d", i), "bar"} + } + + verify("struct a", append(S{}), S{}) + verify("struct b", append(S{}, e[0]), e[0:1]) + verify("struct c", append(S{}, e[0], e[1], e[2]), e[0:3]) + + verify("struct d", append(e[0:1]), e[0:1]) + verify("struct e", append(e[0:1], e[1]), e[0:2]) + verify("struct f", append(e[0:1], e[1], e[2], e[3]), e[0:4]) + + verify("struct g", append(e[0:3]), e[0:3]) + verify("struct h", append(e[0:3], e[3]), e[0:4]) + verify("struct i", append(e[0:3], e[3], e[4], e[5], e[6]), e[0:7]) + + for i := range e { + verify("struct j", append(S{}, e[0:i]...), e[0:i]) + input := make(S, i) + copy(input, e[0:i]) + verify("struct k", append(input, e[i:]...), e) + verify("struct k - input modified", input, e[0:i]) + } + + s := make(S, 10, 20) + r := make(S, len(s)+len(e)) + for i, x := range e { + r[len(s)+i] = x + } + verify("struct l", append(s), s) + verify("struct m", append(s, e...), r) +} + + +func verifyInterface() { + type T interface{} + type S []T + e := make(S, 100) + for i := range e { + switch i % 4 { + case 0: + e[i] = i + case 1: + e[i] = "foo" + case 2: + e[i] = fmt.Sprintf("%d", i) + case 3: + e[i] = float64(i) + } + } + + verify("interface a", append(S{}), S{}) + verify("interface b", append(S{}, e[0]), e[0:1]) + verify("interface c", append(S{}, e[0], e[1], e[2]), e[0:3]) + + verify("interface d", append(e[0:1]), e[0:1]) + verify("interface e", append(e[0:1], e[1]), e[0:2]) + verify("interface f", append(e[0:1], e[1], e[2], e[3]), e[0:4]) + + verify("interface g", append(e[0:3]), e[0:3]) + verify("interface h", append(e[0:3], e[3]), e[0:4]) + verify("interface i", append(e[0:3], e[3], e[4], e[5], e[6]), e[0:7]) + + for i := range e { + verify("interface j", append(S{}, e[0:i]...), e[0:i]) + input := make(S, i) + copy(input, e[0:i]) + verify("interface k", append(input, e[i:]...), e) + verify("interface k - input modified", input, e[0:i]) + } + + s := make(S, 10, 20) + r := make(S, len(s)+len(e)) + for i, x := range e { + r[len(s)+i] = x + } + verify("interface l", append(s), s) + verify("interface m", append(s, e...), r) +} diff --git a/gcc/testsuite/go.test/test/arm-pass.txt b/gcc/testsuite/go.test/test/arm-pass.txt deleted file mode 100644 index 2c7230f100a..00000000000 --- a/gcc/testsuite/go.test/test/arm-pass.txt +++ /dev/null @@ -1,488 +0,0 @@ -./235.go -# ./64bit.go # fail, flaky on android build -./args.go -./assign.go -./assign1.go -./bigalg.go -./bigmap.go -./blank.go -./blank1.go -./chancap.go -./char_lit.go -./char_lit1.go -./closedchan.go -./closure.go -./cmp1.go -./cmp2.go -./cmp3.go -./cmp4.go -./cmp5.go -./cmplx.go -# ./cmplxdivide.go # fail, BUG -./cmplxdivide1.go -./complit.go -./compos.go -./const.go -./const1.go -./const2.go -./const3.go -./convert.go -./convert3.go -./convlit.go -./convlit1.go -./copy.go -./ddd.go -./ddd1.go -./ddd2.go -./ddd3.go -./decl.go -./declbad.go -./defer.go -./deferprint.go -./empty.go -./env.go -./escape.go -./float_lit.go -./floatcmp.go -./for.go -./func.go -./func1.go -./func2.go -./func3.go -./func4.go -./func5.go -./gc.go -./gc1.go -./hashmap.go -./helloworld.go -./if.go -./if1.go -./import.go -./import1.go -./import2.go -./import3.go -./import4.go -./indirect.go -./indirect1.go -./initcomma.go -./initialize.go -./initializerr.go -./initsyscall.go -./int_lit.go -./intcvt.go -./iota.go -./literal.go -./malloc1.go -# ./mallocfin.go # fail -./mallocrand.go -./mallocrep.go -./mallocrep1.go -# ./map.go # fail -./method.go -./method1.go -./method2.go -./method3.go -./named.go -./named1.go -./nil.go -./nul1.go -./parentype.go -./peano.go -./printbig.go -./range.go -./recover.go -./recover1.go -./recover2.go -# ./recover3.go # fail -./rename.go -./rename1.go -./runtime.go -./sieve.go -./sigchld.go -./simassign.go -./sinit.go -./stack.go -./string_lit.go -./stringrange.go -./switch.go -./switch1.go -./test0.go -./turing.go -./typeswitch.go -./typeswitch1.go -./typeswitch2.go -./undef.go -./utf.go -./varerr.go -./varinit.go -./vectors.go -./zerodivide.go -ken/array.go -ken/chan.go -ken/chan1.go -ken/complit.go -# ken/cplx0.go # output fail -# ken/cplx1.go # fail -# ken/cplx2.go # fail -# ken/cplx3.go # output fail -# ken/cplx4.go # fail, BUG -# ken/cplx5.go # output fail -ken/divconst.go -ken/divmod.go -ken/embed.go -ken/for.go -ken/interbasic.go -ken/interfun.go -ken/intervar.go -ken/label.go -ken/litfun.go -ken/mfunc.go -ken/modconst.go -ken/ptrfun.go -ken/ptrvar.go -ken/range.go -ken/rob1.go -ken/rob2.go -ken/robfor.go -ken/robfunc.go -ken/robif.go -ken/shift.go -ken/simparray.go -ken/simpbool.go -ken/simpconv.go -ken/simpfun.go -ken/simpprint.go -ken/simpswitch.go -ken/simpvar.go -ken/slicearray.go -ken/sliceslice.go -ken/string.go -ken/strvar.go -chan/doubleselect.go -chan/fifo.go -chan/goroutines.go -chan/nonblock.go -chan/perm.go -chan/powser1.go -chan/powser2.go -chan/select.go -chan/select2.go -# chan/select3.go # fail -chan/sieve1.go -chan/sieve2.go -interface/bigdata.go -interface/convert.go -interface/convert1.go -interface/convert2.go -interface/embed.go -interface/embed0.go -interface/embed1.go -interface/explicit.go -interface/fail.go -interface/fake.go -interface/pointer.go -interface/receiver.go -interface/receiver1.go -interface/recursive.go -interface/returntype.go -interface/struct.go -nilptr/arrayindex.go -nilptr/arrayindex1.go -nilptr/arraytoslice.go -nilptr/arraytoslice1.go -nilptr/arraytoslice2.go -nilptr/slicearray.go -nilptr/structfield.go -nilptr/structfield1.go -nilptr/structfield2.go -nilptr/structfieldaddr.go -syntax/forvar.go -syntax/import.go -syntax/interface.go -syntax/semi1.go -syntax/semi2.go -syntax/semi3.go -syntax/semi4.go -syntax/semi5.go -syntax/semi6.go -syntax/semi7.go -syntax/slice.go -syntax/topexpr.go -syntax/vareq.go -syntax/vareq1.go -fixedbugs/bug000.go -fixedbugs/bug001.go -fixedbugs/bug002.go -fixedbugs/bug003.go -fixedbugs/bug004.go -fixedbugs/bug005.go -fixedbugs/bug006.go -fixedbugs/bug007.go -fixedbugs/bug008.go -fixedbugs/bug009.go -fixedbugs/bug010.go -fixedbugs/bug011.go -fixedbugs/bug012.go -fixedbugs/bug013.go -fixedbugs/bug014.go -fixedbugs/bug015.go -fixedbugs/bug016.go -fixedbugs/bug017.go -fixedbugs/bug020.go -fixedbugs/bug021.go -fixedbugs/bug022.go -fixedbugs/bug023.go -fixedbugs/bug024.go -fixedbugs/bug026.go -fixedbugs/bug027.go -fixedbugs/bug028.go -fixedbugs/bug030.go -fixedbugs/bug031.go -fixedbugs/bug035.go -fixedbugs/bug036.go -fixedbugs/bug037.go -fixedbugs/bug038.go -fixedbugs/bug039.go -fixedbugs/bug040.go -fixedbugs/bug045.go -fixedbugs/bug046.go -fixedbugs/bug047.go -fixedbugs/bug048.go -fixedbugs/bug049.go -fixedbugs/bug050.go -fixedbugs/bug051.go -fixedbugs/bug052.go -fixedbugs/bug053.go -fixedbugs/bug054.go -fixedbugs/bug055.go -fixedbugs/bug056.go -fixedbugs/bug057.go -fixedbugs/bug058.go -fixedbugs/bug059.go -fixedbugs/bug060.go -fixedbugs/bug061.go -fixedbugs/bug062.go -fixedbugs/bug063.go -fixedbugs/bug064.go -fixedbugs/bug065.go -fixedbugs/bug066.go -fixedbugs/bug067.go -fixedbugs/bug068.go -fixedbugs/bug069.go -fixedbugs/bug070.go -fixedbugs/bug071.go -fixedbugs/bug072.go -fixedbugs/bug073.go -fixedbugs/bug074.go -fixedbugs/bug075.go -fixedbugs/bug076.go -fixedbugs/bug077.go -fixedbugs/bug078.go -fixedbugs/bug080.go -fixedbugs/bug081.go -fixedbugs/bug082.go -fixedbugs/bug083.go -fixedbugs/bug084.go -fixedbugs/bug085.go -fixedbugs/bug086.go -fixedbugs/bug087.go -fixedbugs/bug088.go -fixedbugs/bug089.go -fixedbugs/bug090.go -fixedbugs/bug091.go -fixedbugs/bug092.go -fixedbugs/bug093.go -fixedbugs/bug094.go -fixedbugs/bug096.go -fixedbugs/bug097.go -fixedbugs/bug098.go -fixedbugs/bug099.go -fixedbugs/bug101.go -fixedbugs/bug102.go -fixedbugs/bug103.go -fixedbugs/bug104.go -fixedbugs/bug106.go -fixedbugs/bug107.go -fixedbugs/bug108.go -fixedbugs/bug109.go -fixedbugs/bug110.go -fixedbugs/bug111.go -fixedbugs/bug112.go -fixedbugs/bug113.go -fixedbugs/bug114.go -fixedbugs/bug115.go -fixedbugs/bug116.go -fixedbugs/bug117.go -fixedbugs/bug118.go -fixedbugs/bug119.go -fixedbugs/bug120.go -fixedbugs/bug121.go -fixedbugs/bug122.go -fixedbugs/bug123.go -fixedbugs/bug126.go -fixedbugs/bug127.go -fixedbugs/bug128.go -fixedbugs/bug129.go -fixedbugs/bug130.go -fixedbugs/bug131.go -fixedbugs/bug132.go -fixedbugs/bug133.go -fixedbugs/bug135.go -fixedbugs/bug136.go -fixedbugs/bug137.go -fixedbugs/bug139.go -fixedbugs/bug140.go -fixedbugs/bug141.go -fixedbugs/bug142.go -fixedbugs/bug143.go -fixedbugs/bug144.go -fixedbugs/bug145.go -fixedbugs/bug146.go -fixedbugs/bug147.go -fixedbugs/bug148.go -fixedbugs/bug149.go -fixedbugs/bug150.go -fixedbugs/bug151.go -fixedbugs/bug152.go -fixedbugs/bug154.go -fixedbugs/bug155.go -fixedbugs/bug156.go -fixedbugs/bug157.go -fixedbugs/bug158.go -fixedbugs/bug159.go -fixedbugs/bug160.go -fixedbugs/bug161.go -fixedbugs/bug163.go -fixedbugs/bug164.go -fixedbugs/bug165.go -fixedbugs/bug167.go -fixedbugs/bug168.go -fixedbugs/bug169.go -fixedbugs/bug170.go -fixedbugs/bug171.go -fixedbugs/bug172.go -fixedbugs/bug173.go -fixedbugs/bug174.go -fixedbugs/bug175.go -fixedbugs/bug176.go -fixedbugs/bug177.go -fixedbugs/bug178.go -fixedbugs/bug179.go -fixedbugs/bug180.go -fixedbugs/bug181.go -fixedbugs/bug182.go -fixedbugs/bug183.go -fixedbugs/bug184.go -fixedbugs/bug185.go -fixedbugs/bug186.go -fixedbugs/bug187.go -fixedbugs/bug188.go -fixedbugs/bug189.go -fixedbugs/bug190.go -fixedbugs/bug191.go -fixedbugs/bug192.go -fixedbugs/bug193.go -fixedbugs/bug194.go -fixedbugs/bug195.go -fixedbugs/bug196.go -fixedbugs/bug197.go -fixedbugs/bug198.go -fixedbugs/bug199.go -fixedbugs/bug200.go -fixedbugs/bug201.go -fixedbugs/bug202.go -fixedbugs/bug203.go -fixedbugs/bug204.go -fixedbugs/bug205.go -fixedbugs/bug206.go -fixedbugs/bug207.go -fixedbugs/bug208.go -fixedbugs/bug209.go -fixedbugs/bug211.go -fixedbugs/bug212.go -fixedbugs/bug213.go -fixedbugs/bug214.go -fixedbugs/bug215.go -fixedbugs/bug216.go -fixedbugs/bug217.go -fixedbugs/bug218.go -fixedbugs/bug219.go -fixedbugs/bug220.go -fixedbugs/bug221.go -fixedbugs/bug222.go -fixedbugs/bug223.go -fixedbugs/bug224.go -fixedbugs/bug225.go -fixedbugs/bug226.go -fixedbugs/bug227.go -fixedbugs/bug228.go -fixedbugs/bug229.go -fixedbugs/bug230.go -fixedbugs/bug231.go -fixedbugs/bug232.go -fixedbugs/bug233.go -fixedbugs/bug234.go -fixedbugs/bug235.go -fixedbugs/bug236.go -fixedbugs/bug237.go -fixedbugs/bug238.go -fixedbugs/bug239.go -fixedbugs/bug240.go -fixedbugs/bug241.go -fixedbugs/bug242.go -# fixedbugs/bug243.go # fail, flaky on android build -fixedbugs/bug244.go -fixedbugs/bug245.go -fixedbugs/bug246.go -fixedbugs/bug247.go -fixedbugs/bug248.go -fixedbugs/bug249.go -fixedbugs/bug250.go -fixedbugs/bug251.go -fixedbugs/bug252.go -fixedbugs/bug253.go -fixedbugs/bug254.go -fixedbugs/bug255.go -fixedbugs/bug256.go -fixedbugs/bug257.go -fixedbugs/bug258.go -fixedbugs/bug259.go -fixedbugs/bug261.go -fixedbugs/bug262.go -fixedbugs/bug263.go -fixedbugs/bug264.go -fixedbugs/bug265.go -fixedbugs/bug266.go -fixedbugs/bug267.go -fixedbugs/bug268.go -fixedbugs/bug269.go -fixedbugs/bug270.go -fixedbugs/bug271.go -fixedbugs/bug272.go -fixedbugs/bug273.go -fixedbugs/bug274.go -fixedbugs/bug275.go -fixedbugs/bug276.go -fixedbugs/bug277.go -fixedbugs/bug278.go -fixedbugs/bug279.go -fixedbugs/bug280.go -fixedbugs/bug281.go -fixedbugs/bug282.go -fixedbugs/bug283.go -fixedbugs/bug284.go -fixedbugs/bug285.go -fixedbugs/bug286.go -fixedbugs/bug287.go -fixedbugs/bug288.go -fixedbugs/bug289.go -fixedbugs/bug290.go -fixedbugs/bug291.go -fixedbugs/bug292.go -fixedbugs/bug293.go -fixedbugs/bug294.go -fixedbugs/bug295.go -fixedbugs/bug296.go -fixedbugs/bug297.go -fixedbugs/bug298.go -# bugs/bug260.go # fail, BUG diff --git a/gcc/testsuite/go.test/test/bench/Makefile b/gcc/testsuite/go.test/test/bench/Makefile new file mode 100644 index 00000000000..145fe0cea63 --- /dev/null +++ b/gcc/testsuite/go.test/test/bench/Makefile @@ -0,0 +1,14 @@ +# Copyright 2011 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +include ../../src/Make.inc + +all: + @echo "make clean or timing" + +timing: + ./timing.sh + +clean: + rm -f [568].out *.[568] diff --git a/gcc/testsuite/go.test/test/bench/clean.bash b/gcc/testsuite/go.test/test/bench/clean.bash deleted file mode 100755 index d56c0e39405..00000000000 --- a/gcc/testsuite/go.test/test/bench/clean.bash +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -OS=568 -rm -f [$OS].out *.[$OS] diff --git a/gcc/testsuite/go.test/test/bench/fannkuch-parallel.go b/gcc/testsuite/go.test/test/bench/fannkuch-parallel.go index 7897eac0524..7e9b98d5051 100644 --- a/gcc/testsuite/go.test/test/bench/fannkuch-parallel.go +++ b/gcc/testsuite/go.test/test/bench/fannkuch-parallel.go @@ -44,7 +44,7 @@ import ( ) var n = flag.Int("n", 7, "count") -var nCPU = flag.Int("ncpu", 2, "number of cpus") +var nCPU = flag.Int("ncpu", 4, "number of cpus") type Job struct { start []int diff --git a/gcc/testsuite/go.test/test/bench/fasta.c b/gcc/testsuite/go.test/test/bench/fasta.c index 78a8490d710..64c1c520581 100644 --- a/gcc/testsuite/go.test/test/bench/fasta.c +++ b/gcc/testsuite/go.test/test/bench/fasta.c @@ -41,10 +41,12 @@ POSSIBILITY OF SUCH DAMAGE. #include <stdlib.h> #include <string.h> +#ifndef fwrite_unlocked // not available on OS X #define fwrite_unlocked fwrite #define fputc_unlocked fputc #define fputs_unlocked fputs +#endif #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) #define unlikely(x) __builtin_expect((x), 0) @@ -214,4 +216,4 @@ main(int argc, const char **argv) { ">THREE Homo sapiens frequency\n", n*5, &rand); return 0; -}
\ No newline at end of file +} diff --git a/gcc/testsuite/go.test/test/bench/fasta.go b/gcc/testsuite/go.test/test/bench/fasta.go index 470bdb3285a..d13edd5dcfa 100644 --- a/gcc/testsuite/go.test/test/bench/fasta.go +++ b/gcc/testsuite/go.test/test/bench/fasta.go @@ -37,7 +37,6 @@ POSSIBILITY OF SUCH DAMAGE. package main import ( - "bytes" "flag" "os" ) @@ -49,7 +48,7 @@ var n = flag.Int("n", 1000, "length of result") const Line = 60 func Repeat(alu []byte, n int) { - buf := bytes.Add(alu, alu) + buf := append(alu, alu...) off := 0 for n > 0 { m := n @@ -138,28 +137,28 @@ func main() { flag.Parse() iub := []Acid{ - Acid{prob: 0.27, sym: 'a'}, - Acid{prob: 0.12, sym: 'c'}, - Acid{prob: 0.12, sym: 'g'}, - Acid{prob: 0.27, sym: 't'}, - Acid{prob: 0.02, sym: 'B'}, - Acid{prob: 0.02, sym: 'D'}, - Acid{prob: 0.02, sym: 'H'}, - Acid{prob: 0.02, sym: 'K'}, - Acid{prob: 0.02, sym: 'M'}, - Acid{prob: 0.02, sym: 'N'}, - Acid{prob: 0.02, sym: 'R'}, - Acid{prob: 0.02, sym: 'S'}, - Acid{prob: 0.02, sym: 'V'}, - Acid{prob: 0.02, sym: 'W'}, - Acid{prob: 0.02, sym: 'Y'}, + {prob: 0.27, sym: 'a'}, + {prob: 0.12, sym: 'c'}, + {prob: 0.12, sym: 'g'}, + {prob: 0.27, sym: 't'}, + {prob: 0.02, sym: 'B'}, + {prob: 0.02, sym: 'D'}, + {prob: 0.02, sym: 'H'}, + {prob: 0.02, sym: 'K'}, + {prob: 0.02, sym: 'M'}, + {prob: 0.02, sym: 'N'}, + {prob: 0.02, sym: 'R'}, + {prob: 0.02, sym: 'S'}, + {prob: 0.02, sym: 'V'}, + {prob: 0.02, sym: 'W'}, + {prob: 0.02, sym: 'Y'}, } homosapiens := []Acid{ - Acid{prob: 0.3029549426680, sym: 'a'}, - Acid{prob: 0.1979883004921, sym: 'c'}, - Acid{prob: 0.1975473066391, sym: 'g'}, - Acid{prob: 0.3015094502008, sym: 't'}, + {prob: 0.3029549426680, sym: 'a'}, + {prob: 0.1979883004921, sym: 'c'}, + {prob: 0.1975473066391, sym: 'g'}, + {prob: 0.3015094502008, sym: 't'}, } alu := []byte( @@ -192,9 +191,7 @@ func (b *buffer) Flush() { func (b *buffer) WriteString(s string) { p := b.NextWrite(len(s)) - for i := 0; i < len(s); i++ { - p[i] = s[i] - } + copy(p, s) } func (b *buffer) NextWrite(n int) []byte { @@ -204,6 +201,6 @@ func (b *buffer) NextWrite(n int) []byte { p = *b } out := p[len(p) : len(p)+n] - *b = p[0 : len(p)+n] + *b = p[:len(p)+n] return out } diff --git a/gcc/testsuite/go.test/test/bench/k-nucleotide-parallel.go b/gcc/testsuite/go.test/test/bench/k-nucleotide-parallel.go index 0234f33d113..96c80d8f0c8 100644 --- a/gcc/testsuite/go.test/test/bench/k-nucleotide-parallel.go +++ b/gcc/testsuite/go.test/test/bench/k-nucleotide-parallel.go @@ -41,6 +41,7 @@ import ( "fmt" "io/ioutil" "os" + "runtime" "sort" ) @@ -97,6 +98,7 @@ func printKnucs(a kNucArray) { } func main() { + runtime.GOMAXPROCS(4) in := bufio.NewReader(os.Stdin) three := []byte(">THREE ") for { diff --git a/gcc/testsuite/go.test/test/bench/pidigits.go b/gcc/testsuite/go.test/test/bench/pidigits.go index dcfb502ce2a..e59312177f4 100644 --- a/gcc/testsuite/go.test/test/bench/pidigits.go +++ b/gcc/testsuite/go.test/test/bench/pidigits.go @@ -49,6 +49,7 @@ var silent = flag.Bool("s", false, "don't print result") var ( tmp1 = big.NewInt(0) tmp2 = big.NewInt(0) + tmp3 = big.NewInt(0) y2 = big.NewInt(0) bigk = big.NewInt(0) numer = big.NewInt(1) @@ -80,7 +81,6 @@ func extract_digit() int64 { } func next_term(k int64) { - // TODO(eds) If big.Int ever gets a Scale method, y2 and bigk could be int64 y2.SetInt64(k*2 + 1) bigk.SetInt64(k) @@ -92,15 +92,15 @@ func next_term(k int64) { } func eliminate_digit(d int64) { - tmp := big.NewInt(0).Set(denom) - accum.Sub(accum, tmp.Mul(tmp, big.NewInt(d))) + tmp3.SetInt64(d) + accum.Sub(accum, tmp3.Mul(denom, tmp3)) accum.Mul(accum, ten) numer.Mul(numer, ten) } func printf(s string, arg ...interface{}) { if !*silent { - fmt.Printf(s, arg) + fmt.Printf(s, arg...) } } diff --git a/gcc/testsuite/go.test/test/bench/timing.log b/gcc/testsuite/go.test/test/bench/timing.log index e7b0b48c11f..a967f27d223 100644 --- a/gcc/testsuite/go.test/test/bench/timing.log +++ b/gcc/testsuite/go.test/test/bench/timing.log @@ -90,7 +90,7 @@ mandelbrot 5500 gc mandelbrot 74.32u 0.00s 74.35r gc_B mandelbrot 74.28u 0.01s 74.31r -meteor 16000 +meteor 2100 # we don't know gcc -O2 meteor-contest.c 0.10u 0.00s 0.10r gccgo -O2 meteor-contest.go 0.12u 0.00s 0.14r @@ -209,7 +209,7 @@ mandelbrot 16000 gc mandelbrot 64.05u 0.02s 64.08r # *** -14% gc_B mandelbrot 64.10u 0.02s 64.14r # *** -14% -meteor 16000 +meteor 2100 # we don't know gcc -O2 meteor-contest.c 0.10u 0.00s 0.10r gccgo -O2 meteor-contest.go 0.12u 0.00s 0.12r @@ -307,7 +307,7 @@ mandelbrot 16000 gc mandelbrot 63.31u 0.01s 63.35r # -1% gc_B mandelbrot 63.29u 0.00s 63.31r # -1% -meteor 16000 +meteor 2100 # we don't know gcc -O2 meteor-contest.c 0.10u 0.00s 0.10r gccgo -O2 meteor-contest.go 0.11u 0.00s 0.12r @@ -414,7 +414,7 @@ chameneos 6000000 gcc -O2 chameneosredux.c -lpthread 18.00u 303.29s 83.64r gc chameneosredux 12.10u 0.00s 12.10r # 2.22X faster -Jan 6, 2009 +Jan 6, 2010 # Long-overdue update. All numbers included in this complete run. # Some programs (e.g. reverse-complement) rewritten for speed. @@ -429,7 +429,7 @@ fasta -n 25000000 reverse-complement < output-of-fasta-25000000 gcc -O2 reverse-complement.c 2.00u 0.80s 9.54r - gccgo -O2 reverse-complement.go 4.57u 0.35s 4.94r # 33% faster +# gccgo -O2 reverse-complement.go 4.57u 0.35s 4.94r # 33% faster gc reverse-complement 2.01u 0.38s 2.40r # 3.3X faster gc_B reverse-complement 1.88u 0.36s 2.24r # 3.2X faster GOGC=off @@ -445,7 +445,6 @@ nbody -n 50000000 binary-tree 15 # too slow to use 20 gcc -O2 binary-tree.c -lm 0.86u 0.00s 0.87r gccgo -O2 binary-tree.go 4.82u 0.41s 5.24r # 2.5X slower - gccgo -O2 binary-tree-freelist.go 0.00u 0.00s 0.00r gc binary-tree 7.23u 0.01s 7.25r # # -19% gc binary-tree-freelist 0.43u 0.00s 0.44r # -9% @@ -478,7 +477,7 @@ mandelbrot 16000 gc mandelbrot 66.05u 0.00s 66.07r # -3% gc_B mandelbrot 66.06u 0.00s 66.07r # -3% -meteor 16000 +meteor 2100 gcc -O2 meteor-contest.c 0.10u 0.00s 0.10r gccgo -O2 meteor-contest.go 0.12u 0.00s 0.12r gc meteor-contest 0.17u 0.00s 0.17r @@ -498,3 +497,180 @@ chameneos 6000000 gcc -O2 chameneosredux.c -lpthread 19.02u 331.08s 90.79r gc chameneosredux 12.54u 0.00s 12.55r +Oct 19, 2010 + +# Another long-overdue update. Some of the code is new; parallel versions +# of some are added. A few significant improvements. + +fasta -n 25000000 + gcc -O2 fasta.c 4.92u 0.00s 4.93r + gccgo -O2 fasta.go 3.31u 0.00s 3.34r # new code + gc fasta 3.68u 0.00s 3.69r # 2.5X faster with no code + gc_B fasta 3.68u 0.00s 3.69r # 2.3X faster with no code + +reverse-complement < output-of-fasta-25000000 + gcc -O2 reverse-complement.c 1.93u 0.81s 11.24r + gccgo -O2 reverse-complement.go 1.58u 0.43s 2.04r # first run with new code? + gc reverse-complement 1.84u 0.34s 2.20r # 10% faster + gc_B reverse-complement 1.85u 0.32s 2.18r + +nbody -n 50000000 + gcc -O2 nbody.c 21.35u 0.00s 21.36r + gccgo -O2 nbody.go 21.62u 0.00s 21.66r # 3.7X faster - why?? + gc nbody 29.78u 0.00s 29.79r + gc_B nbody 29.72u 0.00s 29.72r + +binary-tree 15 # too slow to use 20 + gcc -O2 binary-tree.c -lm 0.86u 0.00s 0.88r + gccgo -O2 binary-tree.go 4.05u 0.02s 4.08r # 28% faster + gccgo -O2 binary-tree-freelist 0.34u 0.08s 0.34r + gc binary-tree 5.94u 0.00s 5.95r # 20% faster + gc binary-tree-freelist 0.50u 0.01s 0.54r + +fannkuch 12 + gcc -O2 fannkuch.c 60.45u 0.00s 60.45r + gccgo -O2 fannkuch.go 64.64u 0.00s 64.64r + gccgo -O2 fannkuch-parallel.go 115.63u 0.00s 31.58r + gc fannkuch 126.52u 0.04s 126.68r + gc fannkuch-parallel 238.82u 0.10s 65.93r # GOMAXPROCS=4 + gc_B fannkuch 88.99u 0.00s 89.02r + +regex-dna 100000 + gcc -O2 regex-dna.c -lpcre 0.89u 0.00s 0.89r + gc regex-dna 8.99u 0.02s 9.03r + gc regex-dna-parallel 8.94u 0.02s 3.68r # GOMAXPROCS=4 + gc_B regex-dna 9.12u 0.00s 9.14r + +spectral-norm 5500 + gcc -O2 spectral-norm.c -lm 11.55u 0.00s 11.57r + gccgo -O2 spectral-norm.go 11.73u 0.00s 11.75r + gc spectral-norm 23.74u 0.00s 23.79r + gc_B spectral-norm 24.49u 0.02s 24.54r + +k-nucleotide 1000000 + gcc -O2 k-nucleotide.c 11.44u 0.06s 11.50r + gccgo -O2 k-nucleotide.go 8.65u 0.04s 8.71r + gccgo -O2 k-nucleotide-parallel.go 8.75u 0.03s 2.97r # set GOMAXPROCS=4 + gc k-nucleotide 14.92u 0.05s 15.01r + gc k-nucleotide-parallel 16.96u 0.06s 6.53r # set GOMAXPROCS=4 + gc_B k-nucleotide 15.97u 0.03s 16.08r + +mandelbrot 16000 + gcc -O2 mandelbrot.c 56.32u 0.00s 56.35r + gccgo -O2 mandelbrot.go 55.62u 0.02s 55.77r + gc mandelbrot 64.85u 0.01s 64.94r + gc_B mandelbrot 65.02u 0.01s 65.14r + +meteor 2100 + gcc -O2 meteor-contest.c 0.10u 0.00s 0.10r + gccgo -O2 meteor-contest.go 0.10u 0.00s 0.11r + gc meteor-contest 0.17u 0.00s 0.18r + gc_B meteor-contest 0.16u 0.00s 0.16r + +pidigits 10000 + gcc -O2 pidigits.c -lgmp 2.58u 0.00s 2.59r + gccgo -O2 pidigits.go 14.06u 0.01s 14.09r # first run? + gc pidigits 8.47u 0.05s 8.55r # 4.5X faster due to package big + gc_B pidigits 8.33u 0.01s 8.36r # 4.5X faster due to package big + +threadring 50000000 + gcc -O2 threadring.c 28.18u 153.19s 186.47r + gccgo -O2 threadring.go 110.10u 516.48s 515.25r + gc threadring 40.39u 0.00s 40.40r + +chameneos 6000000 + gcc -O2 chameneosredux.c -lpthread 18.20u 301.55s 83.10r + gccgo -O2 chameneosredux.go 52.22u 324.54s 201.21r + gc chameneosredux 13.52u 0.00s 13.54r + +Dec 14, 2010 + +# Improved regex code (same algorithm) gets ~30%. + +regex-dna 100000 + gcc -O2 regex-dna.c -lpcre 0.77u 0.01s 0.78r + gc regex-dna 6.80u 0.00s 6.81r + gc regex-dna-parallel 6.82u 0.01s 2.75r + gc_B regex-dna 6.69u 0.02s 6.70r + +Feb 15, 2011 + +# Improved GC, still single-threaded but more efficient + +fasta -n 25000000 + gcc -O2 fasta.c 3.40u 0.00s 3.40r + gccgo -O2 fasta.go 3.51u 0.00s 3.50r + gc fasta 3.66u 0.01s 3.66r + gc_B fasta 3.66u 0.00s 3.66r + +reverse-complement < output-of-fasta-25000000 + gcc -O2 reverse-complement.c 1.86u 1.29s 4.93r + gccgo -O2 reverse-complement.go 2.18u 0.41s 2.60r + gc reverse-complement 1.67u 0.48s 2.15r + gc_B reverse-complement 1.71u 0.45s 2.15r + +nbody -n 50000000 + gcc -O2 -lm nbody.c 21.64u 0.00s 21.64r + gccgo -O2 nbody.go 21.46u 0.00s 21.45r + gc nbody 29.07u 0.00s 29.06r + gc_B nbody 31.61u 0.00s 31.61r + +binary-tree 15 # too slow to use 20 + gcc -O2 binary-tree.c -lm 0.88u 0.00s 0.87r + gccgo -O2 binary-tree.go 2.74u 0.07s 2.81r + gccgo -O2 binary-tree-freelist.go 0.01u 0.00s 0.00r + gc binary-tree 4.22u 0.02s 4.24r + gc binary-tree-freelist 0.54u 0.02s 0.55r + +fannkuch 12 + gcc -O2 fannkuch.c 57.64u 0.00s 57.64r + gccgo -O2 fannkuch.go 65.79u 0.00s 65.82r + gccgo -O2 fannkuch-parallel.go 160.91u 0.02s 43.90r + gc fannkuch 126.36u 0.03s 126.53r + gc fannkuch-parallel 175.23u 0.04s 45.49r + gc_B fannkuch 89.23u 0.00s 89.24r + +regex-dna 100000 + gcc -O2 regex-dna.c -lpcre 0.77u 0.01s 0.80r + gccgo -O2 regex-dna.go 12.38u 0.10s 12.52r + gccgo -O2 regex-dna-parallel.go 43.96u 4.64s 15.11r + gc regex-dna 7.03u 0.01s 7.05r + gc regex-dna-parallel 6.85u 0.05s 2.70r + gc_B regex-dna 6.87u 0.02s 6.89r + +spectral-norm 5500 + gcc -O2 spectral-norm.c -lm 12.29u 0.00s 12.28r + gccgo -O2 spectral-norm.go 11.79u 0.00s 11.79r + gc spectral-norm 24.00u 0.02s 24.05r + gc_B spectral-norm 24.59u 0.01s 24.59r + +k-nucleotide 1000000 + gcc -O2 k-nucleotide.c 9.75u 0.07s 9.82r + gccgo -O2 k-nucleotide.go 8.92u 0.06s 8.98r + gccgo -O2 k-nucleotide-parallel.go 8.40u 0.04s 2.76r + gc k-nucleotide 17.01u 0.03s 17.04r + gc k-nucleotide-parallel 16.51u 0.08s 6.21r + gc_B k-nucleotide 16.94u 0.08s 17.02r + +mandelbrot 16000 + gcc -O2 mandelbrot.c 54.60u 0.00s 54.66r + gccgo -O2 mandelbrot.go 59.38u 0.00s 59.41r + gc mandelbrot 64.93u 0.04s 65.08r + gc_B mandelbrot 64.85u 0.03s 64.92r + +meteor 2098 + gcc -O2 meteor-contest.c 0.10u 0.01s 0.10r + gccgo -O2 meteor-contest.go 0.11u 0.00s 0.11r + gc meteor-contest 0.18u 0.00s 0.17r + gc_B meteor-contest 0.17u 0.00s 0.16r + +pidigits 10000 + gcc -O2 pidigits.c -lgmp 2.24u 0.00s 2.23r + gccgo -O2 pidigits.go 14.05u 0.00s 14.06r + gc pidigits 6.34u 0.05s 6.38r + gc_B pidigits 6.37u 0.02s 6.38r + +threadring 50000000 + gcc -O2 threadring.c 30.50u 258.05s 325.72r + gccgo -O2 threadring.go 92.87u 748.39s 728.46r + gc threadring 38.03u 0.01s 38.04r diff --git a/gcc/testsuite/go.test/test/bench/timing.sh b/gcc/testsuite/go.test/test/bench/timing.sh index c52c0af94a6..473c9b312f8 100755 --- a/gcc/testsuite/go.test/test/bench/timing.sh +++ b/gcc/testsuite/go.test/test/bench/timing.sh @@ -8,6 +8,12 @@ set -e eval $(gomake --no-print-directory -f ../../src/Make.inc go-env) PATH=.:$PATH +havegccgo=false +if which gccgo >/dev/null 2>&1 +then + havegccgo=true +fi + mode=run case X"$1" in X-test) @@ -30,8 +36,6 @@ runonly() { fi } - - run() { if [ $mode = test ] then @@ -57,6 +61,10 @@ run() { fi return fi + if ! $havegccgo && echo $1 | grep -q '^gccgo ' + then + return + fi echo -n ' '$1' ' $1 shift @@ -67,7 +75,7 @@ run() { fasta() { runonly echo 'fasta -n 25000000' run 'gcc -O2 fasta.c' a.out 25000000 - #run 'gccgo -O2 fasta.go' a.out -n 25000000 #commented out until WriteString is in bufio + run 'gccgo -O2 fasta.go' a.out -n 25000000 #commented out until WriteString is in bufio run 'gc fasta' $O.out -n 25000000 run 'gc_B fasta' $O.out -n 25000000 } @@ -85,7 +93,7 @@ revcomp() { nbody() { runonly echo 'nbody -n 50000000' - run 'gcc -O2 nbody.c' a.out 50000000 + run 'gcc -O2 -lm nbody.c' a.out 50000000 run 'gccgo -O2 nbody.go' a.out -n 50000000 run 'gc nbody' $O.out -n 50000000 run 'gc_B nbody' $O.out -n 50000000 @@ -115,7 +123,8 @@ regexdna() { runonly a.out 100000 > x runonly echo 'regex-dna 100000' run 'gcc -O2 regex-dna.c -lpcre' a.out <x -# run 'gccgo -O2 regex-dna.go' a.out <x # pages badly; don't run + run 'gccgo -O2 regex-dna.go' a.out <x + run 'gccgo -O2 regex-dna-parallel.go' a.out <x run 'gc regex-dna' $O.out <x run 'gc regex-dna-parallel' $O.out <x run 'gc_B regex-dna' $O.out <x @@ -135,8 +144,8 @@ knucleotide() { runonly a.out 1000000 > x # should be using 25000000 runonly echo 'k-nucleotide 1000000' run 'gcc -O2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include k-nucleotide.c -lglib-2.0' a.out <x - run 'gccgo -O2 k-nucleotide.go' a.out <x # warning: pages badly! - run 'gccgo -O2 k-nucleotide-parallel.go' a.out <x # warning: pages badly! + run 'gccgo -O2 k-nucleotide.go' a.out <x + run 'gccgo -O2 k-nucleotide-parallel.go' a.out <x run 'gc k-nucleotide' $O.out <x run 'gc k-nucleotide-parallel' $O.out <x run 'gc_B k-nucleotide' $O.out <x @@ -152,17 +161,17 @@ mandelbrot() { } meteor() { - runonly echo 'meteor 16000' - run 'gcc -O2 meteor-contest.c' a.out - run 'gccgo -O2 meteor-contest.go' a.out - run 'gc meteor-contest' $O.out - run 'gc_B meteor-contest' $O.out + runonly echo 'meteor 2098' + run 'gcc -O2 meteor-contest.c' a.out 2098 + run 'gccgo -O2 meteor-contest.go' a.out -n 2098 + run 'gc meteor-contest' $O.out -n 2098 + run 'gc_B meteor-contest' $O.out -n 2098 } pidigits() { runonly echo 'pidigits 10000' run 'gcc -O2 pidigits.c -lgmp' a.out 10000 -# run 'gccgo -O2 pidigits.go' a.out -n 10000 # uncomment when gccgo library updated + run 'gccgo -O2 pidigits.go' a.out -n 10000 run 'gc pidigits' $O.out -n 10000 run 'gc_B pidigits' $O.out -n 10000 } diff --git a/gcc/testsuite/go.test/test/bugs/bug322.dir/lib.go b/gcc/testsuite/go.test/test/bugs/bug322.dir/lib.go new file mode 100644 index 00000000000..0de56d3d649 --- /dev/null +++ b/gcc/testsuite/go.test/test/bugs/bug322.dir/lib.go @@ -0,0 +1,15 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package lib + +type T struct { + x int // non-exported field +} + +func (t T) M() { +} + +func (t *T) PM() { +} diff --git a/gcc/testsuite/go.test/test/bugs/bug322.dir/main.go b/gcc/testsuite/go.test/test/bugs/bug322.dir/main.go new file mode 100644 index 00000000000..0ab5b32e453 --- /dev/null +++ b/gcc/testsuite/go.test/test/bugs/bug322.dir/main.go @@ -0,0 +1,47 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import "./lib" + +type I interface { + M() +} + +type PI interface { + PM() +} + +func main() { + var t lib.T + t.M() + t.PM() + + // This is still an error. + // var i1 I = t + // i1.M() + + // This combination is illegal because + // PM requires a pointer receiver. + // var pi1 PI = t + // pi1.PM() + + var pt = &t + pt.M() + pt.PM() + + var i2 I = pt + i2.M() + + var pi2 PI = pt + pi2.PM() +} + +/* +These should not be errors anymore: + +bug322.dir/main.go:19: implicit assignment of unexported field 'x' of lib.T in method receiver +bug322.dir/main.go:32: implicit assignment of unexported field 'x' of lib.T in method receiver +*/ diff --git a/gcc/testsuite/go.test/test/bugs/bug322.go b/gcc/testsuite/go.test/test/bugs/bug322.go new file mode 100644 index 00000000000..ad0e62dc8c9 --- /dev/null +++ b/gcc/testsuite/go.test/test/bugs/bug322.go @@ -0,0 +1,8 @@ +// $G $D/$F.dir/lib.go && $G $D/$F.dir/main.go && $L main.$A && ./$A.out || echo BUG: fails incorrectly + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Test case for issue 1402. +ignored diff --git a/gcc/testsuite/go.test/test/bugs/bug324.dir/main.go b/gcc/testsuite/go.test/test/bugs/bug324.dir/main.go new file mode 100644 index 00000000000..4c1a18d9ca2 --- /dev/null +++ b/gcc/testsuite/go.test/test/bugs/bug324.dir/main.go @@ -0,0 +1,48 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "./p" +) + +type Exported interface { + private() +} + +type Implementation struct{} + +func (p *Implementation) private() { println("main.Implementation.private()") } + + +func main() { + // nothing unusual here + var x Exported + x = new(Implementation) + x.private() // main.Implementation.private() + + // same here - should be and is legal + var px p.Exported + px = p.X + + // this assignment is correctly illegal: + // px.private undefined (cannot refer to unexported field or method private) + // px.private() + + // this assignment is correctly illegal: + // *Implementation does not implement p.Exported (missing p.private method) + // px = new(Implementation) + + // this assignment is correctly illegal: + // p.Exported does not implement Exported (missing private method) + // x = px + + // this assignment unexpectedly compiles and then executes + x = px.(Exported) + + // this is a legitimate call, but because of the previous assignment, + // it invokes the method private in p! + x.private() // p.Implementation.private() +} diff --git a/gcc/testsuite/go.test/test/bugs/bug324.dir/p.go b/gcc/testsuite/go.test/test/bugs/bug324.dir/p.go new file mode 100644 index 00000000000..d1e3b991aad --- /dev/null +++ b/gcc/testsuite/go.test/test/bugs/bug324.dir/p.go @@ -0,0 +1,15 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +type Exported interface { + private() +} + +type Implementation struct{} + +func (p *Implementation) private() { println("p.Implementation.private()") } + +var X = new(Implementation) diff --git a/gcc/testsuite/go.test/test/bugs/bug324.go b/gcc/testsuite/go.test/test/bugs/bug324.go new file mode 100644 index 00000000000..e188515d772 --- /dev/null +++ b/gcc/testsuite/go.test/test/bugs/bug324.go @@ -0,0 +1,8 @@ +// $G $D/$F.dir/p.go && $G $D/$F.dir/main.go && $L main.$A && ! ./$A.out || echo BUG: should fail + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Test case for issue 1550 +ignored diff --git a/gcc/testsuite/go.test/test/chan/doubleselect.go b/gcc/testsuite/go.test/test/chan/doubleselect.go index 592d2f54a43..3c7412ed6ab 100644 --- a/gcc/testsuite/go.test/test/chan/doubleselect.go +++ b/gcc/testsuite/go.test/test/chan/doubleselect.go @@ -21,6 +21,8 @@ var iterations *int = flag.Int("n", 100000, "number of iterations") func sender(n int, c1, c2, c3, c4 chan<- int) { defer close(c1) defer close(c2) + defer close(c3) + defer close(c4) for i := 0; i < n; i++ { select { @@ -35,26 +37,18 @@ func sender(n int, c1, c2, c3, c4 chan<- int) { // mux receives the values from sender and forwards them onto another channel. // It would be simplier to just have sender's four cases all be the same // channel, but this doesn't actually trigger the bug. -func mux(out chan<- int, in <-chan int) { - for { - v := <-in - if closed(in) { - close(out) - break - } +func mux(out chan<- int, in <-chan int, done chan<- bool) { + for v := range in { out <- v } + done <- true } // recver gets a steam of values from the four mux's and checks for duplicates. func recver(in <-chan int) { seen := make(map[int]bool) - for { - v := <-in - if closed(in) { - break - } + for v := range in { if _, ok := seen[v]; ok { println("got duplicate value: ", v) panic("fail") @@ -70,15 +64,23 @@ func main() { c2 := make(chan int) c3 := make(chan int) c4 := make(chan int) + done := make(chan bool) cmux := make(chan int) go sender(*iterations, c1, c2, c3, c4) - go mux(cmux, c1) - go mux(cmux, c2) - go mux(cmux, c3) - go mux(cmux, c4) + go mux(cmux, c1, done) + go mux(cmux, c2, done) + go mux(cmux, c3, done) + go mux(cmux, c4, done) + go func() { + <-done + <-done + <-done + <-done + close(cmux) + }() // We keep the recver because it might catch more bugs in the future. // However, the result of the bug linked to at the top is that we'll - // end up panicing with: "throw: bad g->status in ready". + // end up panicking with: "throw: bad g->status in ready". recver(cmux) print("PASS\n") } diff --git a/gcc/testsuite/go.test/test/chan/nonblock.go b/gcc/testsuite/go.test/test/chan/nonblock.go index 52f04bfb12f..33afb329165 100644 --- a/gcc/testsuite/go.test/test/chan/nonblock.go +++ b/gcc/testsuite/go.test/test/chan/nonblock.go @@ -76,7 +76,6 @@ func main() { var i64 int64 var b bool var s string - var ok bool var sync = make(chan bool) @@ -86,35 +85,45 @@ func main() { cb := make(chan bool, buffer) cs := make(chan string, buffer) - i32, ok = <-c32 - if ok { + select { + case i32 = <-c32: panic("blocked i32sender") + default: } - i64, ok = <-c64 - if ok { + select { + case i64 = <-c64: panic("blocked i64sender") + default: } - b, ok = <-cb - if ok { + select { + case b = <-cb: panic("blocked bsender") + default: } - s, ok = <-cs - if ok { + select { + case s = <-cs: panic("blocked ssender") + default: } go i32receiver(c32, sync) try := 0 - for !(c32 <- 123) { - try++ - if try > maxTries { - println("i32receiver buffer=", buffer) - panic("fail") + Send32: + for { + select { + case c32 <- 123: + break Send32 + default: + try++ + if try > maxTries { + println("i32receiver buffer=", buffer) + panic("fail") + } + sleep() } - sleep() } <-sync @@ -123,13 +132,19 @@ func main() { <-sync } try = 0 - for i32, ok = <-c32; !ok; i32, ok = <-c32 { - try++ - if try > maxTries { - println("i32sender buffer=", buffer) - panic("fail") + Recv32: + for { + select { + case i32 = <-c32: + break Recv32 + default: + try++ + if try > maxTries { + println("i32sender buffer=", buffer) + panic("fail") + } + sleep() } - sleep() } if i32 != 234 { panic("i32sender value") @@ -140,12 +155,18 @@ func main() { go i64receiver(c64, sync) try = 0 - for !(c64 <- 123456) { - try++ - if try > maxTries { - panic("i64receiver") + Send64: + for { + select { + case c64 <- 123456: + break Send64 + default: + try++ + if try > maxTries { + panic("i64receiver") + } + sleep() } - sleep() } <-sync @@ -154,12 +175,18 @@ func main() { <-sync } try = 0 - for i64, ok = <-c64; !ok; i64, ok = <-c64 { - try++ - if try > maxTries { - panic("i64sender") + Recv64: + for { + select { + case i64 = <-c64: + break Recv64 + default: + try++ + if try > maxTries { + panic("i64sender") + } + sleep() } - sleep() } if i64 != 234567 { panic("i64sender value") @@ -170,12 +197,18 @@ func main() { go breceiver(cb, sync) try = 0 - for !(cb <- true) { - try++ - if try > maxTries { - panic("breceiver") + SendBool: + for { + select { + case cb <- true: + break SendBool + default: + try++ + if try > maxTries { + panic("breceiver") + } + sleep() } - sleep() } <-sync @@ -184,12 +217,18 @@ func main() { <-sync } try = 0 - for b, ok = <-cb; !ok; b, ok = <-cb { - try++ - if try > maxTries { - panic("bsender") + RecvBool: + for { + select { + case b = <-cb: + break RecvBool + default: + try++ + if try > maxTries { + panic("bsender") + } + sleep() } - sleep() } if !b { panic("bsender value") @@ -200,12 +239,18 @@ func main() { go sreceiver(cs, sync) try = 0 - for !(cs <- "hello") { - try++ - if try > maxTries { - panic("sreceiver") + SendString: + for { + select { + case cs <- "hello": + break SendString + default: + try++ + if try > maxTries { + panic("sreceiver") + } + sleep() } - sleep() } <-sync @@ -214,12 +259,18 @@ func main() { <-sync } try = 0 - for s, ok = <-cs; !ok; s, ok = <-cs { - try++ - if try > maxTries { - panic("ssender") + RecvString: + for { + select { + case s = <-cs: + break RecvString + default: + try++ + if try > maxTries { + panic("ssender") + } + sleep() } - sleep() } if s != "hello again" { panic("ssender value") diff --git a/gcc/testsuite/go.test/test/chan/perm.go b/gcc/testsuite/go.test/test/chan/perm.go index d08c035193d..038ff94e369 100644 --- a/gcc/testsuite/go.test/test/chan/perm.go +++ b/gcc/testsuite/go.test/test/chan/perm.go @@ -9,49 +9,43 @@ package main var ( cr <-chan int cs chan<- int - c chan int + c chan int ) func main() { - cr = c // ok - cs = c // ok - c = cr // ERROR "illegal types|incompatible|cannot" - c = cs // ERROR "illegal types|incompatible|cannot" - cr = cs // ERROR "illegal types|incompatible|cannot" - cs = cr // ERROR "illegal types|incompatible|cannot" - - c <- 0 // ok - ok := c <- 0 // ok - _ = ok - <-c // ok + cr = c // ok + cs = c // ok + c = cr // ERROR "illegal types|incompatible|cannot" + c = cs // ERROR "illegal types|incompatible|cannot" + cr = cs // ERROR "illegal types|incompatible|cannot" + cs = cr // ERROR "illegal types|incompatible|cannot" + + c <- 0 // ok + <-c // ok x, ok := <-c // ok _, _ = x, ok - cr <- 0 // ERROR "send" - ok = cr <- 0 // ERROR "send" - _ = ok - <-cr // ok + cr <- 0 // ERROR "send" + <-cr // ok x, ok = <-cr // ok _, _ = x, ok - cs <- 0 // ok - ok = cs <- 0 // ok - _ = ok - <-cs // ERROR "receive" + cs <- 0 // ok + <-cs // ERROR "receive" x, ok = <-cs // ERROR "receive" _, _ = x, ok select { - case c <- 0: // ok - case x := <-c: // ok + case c <- 0: // ok + case x := <-c: // ok _ = x - case cr <- 0: // ERROR "send" - case x := <-cr: // ok + case cr <- 0: // ERROR "send" + case x := <-cr: // ok _ = x - case cs <- 0: // ok - case x := <-cs: // ERROR "receive" + case cs <- 0: // ok + case x := <-cs: // ERROR "receive" _ = x } } diff --git a/gcc/testsuite/go.test/test/chan/select3.go b/gcc/testsuite/go.test/test/chan/select3.go index a1a2ef50b56..b4e8f8e4bf9 100644 --- a/gcc/testsuite/go.test/test/chan/select3.go +++ b/gcc/testsuite/go.test/test/chan/select3.go @@ -88,22 +88,22 @@ func main() { ch <- 7 }) - // receiving (a small number of times) from a closed channel never blocks + // receiving from a closed channel never blocks testBlock(never, func() { for i := 0; i < 10; i++ { if <-closedch != 0 { panic("expected zero value when reading from closed channel") } + if x, ok := <-closedch; x != 0 || ok { + println("closedch:", x, ok) + panic("expected 0, false from closed channel") + } } }) - // sending (a small number of times) to a closed channel is not specified - // but the current implementation doesn't block: test that different - // implementations behave the same - testBlock(never, func() { - for i := 0; i < 10; i++ { - closedch <- 7 - } + // sending to a closed channel panics. + testPanic(always, func() { + closedch <- 7 }) // receiving from a non-ready channel always blocks @@ -189,7 +189,7 @@ func main() { } }) - // selects with closed channels don't block + // selects with closed channels behave like ordinary operations testBlock(never, func() { select { case <-closedch: @@ -197,7 +197,28 @@ func main() { }) testBlock(never, func() { select { + case x := <-closedch: + _ = x + } + }) + testBlock(never, func() { + select { + case x, ok := <-closedch: + _, _ = x, ok + } + }) + testPanic(always, func() { + select { case closedch <- 7: } }) + + // select should not get confused if it sees itself + testBlock(always, func() { + c := make(chan int) + select { + case c <- 1: + case <-c: + } + }) } diff --git a/gcc/testsuite/go.test/test/chan/select4.go b/gcc/testsuite/go.test/test/chan/select4.go new file mode 100644 index 00000000000..46618ac8812 --- /dev/null +++ b/gcc/testsuite/go.test/test/chan/select4.go @@ -0,0 +1,25 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +package main + +func f() *int { + println("BUG: called f") + return new(int) +} + +func main() { + var x struct { + a int + } + c := make(chan int, 1) + c1 := make(chan int) + c <- 42 + select { + case *f() = <-c1: + // nothing + case x.a = <-c: + if x.a != 42 { + println("BUG:", x.a) + } + } +} diff --git a/gcc/testsuite/go.test/test/chan/select5.go b/gcc/testsuite/go.test/test/chan/select5.go new file mode 100644 index 00000000000..e7ca9e015c1 --- /dev/null +++ b/gcc/testsuite/go.test/test/chan/select5.go @@ -0,0 +1,482 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out >tmp.go && +// $G tmp.go && $L tmp.$A && ./$A.out || echo BUG: select5 +// rm -f tmp.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Generate test of channel operations and simple selects. +// Only doing one real send or receive at a time, but phrased +// in various ways that the compiler may or may not rewrite +// into simpler expressions. + +package main + +import ( + "bufio" + "fmt" + "io" + "os" + "template" +) + +func main() { + out := bufio.NewWriter(os.Stdout) + fmt.Fprintln(out, header) + a := new(arg) + + // Generate each kind of test as a separate function to avoid + // hitting the 6g optimizer with one enormous function. + // If we name all the functions init we don't have to + // maintain a list of which ones to run. + do := func(t *template.Template) { + fmt.Fprintln(out, `func init() {`) + for ; next(); a.reset() { + run(t, a, out) + } + fmt.Fprintln(out, `}`) + } + + do(recv) + do(send) + do(recvOrder) + do(sendOrder) + do(nonblock) + + fmt.Fprintln(out, "//", a.nreset, "cases") + out.Flush() +} + +func run(t *template.Template, a interface{}, out io.Writer) { + if err := t.Execute(out, a); err != nil { + panic(err) + } +} + +type arg struct{ + def bool + nreset int +} + +func (a *arg) Maybe() bool { + return maybe() +} + +func (a *arg) MaybeDefault() bool { + if a.def { + return false + } + a.def = maybe() + return a.def +} + +func (a *arg) MustDefault() bool { + return !a.def +} + +func (a *arg) reset() { + a.def = false + a.nreset++ +} + +const header = `// GENERATED BY select5.go; DO NOT EDIT + +package main + +// channel is buffered so test is single-goroutine. +// we are not interested in the concurrency aspects +// of select, just testing that the right calls happen. +var c = make(chan int, 1) +var nilch chan int +var n = 1 +var x int +var i interface{} +var dummy = make(chan int) +var m = make(map[int]int) +var order = 0 + +func f(p *int) *int { + return p +} + +// check order of operations by ensuring that +// successive calls to checkorder have increasing o values. +func checkorder(o int) { + if o <= order { + println("invalid order", o, "after", order) + panic("order") + } + order = o +} + +func fc(c chan int, o int) chan int { + checkorder(o) + return c +} + +func fp(p *int, o int) *int { + checkorder(o) + return p +} + +func fn(n, o int) int { + checkorder(o) + return n +} + +func die(x int) { + println("have", x, "want", n) + panic("chan") +} + +func main() { + // everything happens in init funcs +} +` + +func parse(s string) *template.Template { + t := template.New(nil) + t.SetDelims("〈", "〉") + if err := t.Parse(s); err != nil { + panic(s) + } + return t +} + +var recv = parse(` + 〈# Send n, receive it one way or another into x, check that they match.〉 + c <- n + 〈.section Maybe〉 + x = <-c + 〈.or〉 + select { + 〈# Blocking or non-blocking, before the receive.〉 + 〈# The compiler implements two-case select where one is default with custom code,〉 + 〈# so test the default branch both before and after the send.〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Receive from c. Different cases are direct, indirect, :=, interface, and map assignment.〉 + 〈.section Maybe〉 + case x = <-c: + 〈.or〉〈.section Maybe〉 + case *f(&x) = <-c: + 〈.or〉〈.section Maybe〉 + case y := <-c: + x = y + 〈.or〉〈.section Maybe〉 + case i = <-c: + x = i.(int) + 〈.or〉 + case m[13] = <-c: + x = m[13] + 〈.end〉〈.end〉〈.end〉〈.end〉 + 〈# Blocking or non-blocking again, after the receive.〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Dummy send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case dummy <- 1: + panic("dummy send") + 〈.end〉 + 〈.section Maybe〉 + case <-dummy: + panic("dummy receive") + 〈.end〉 + 〈# Nil channel send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case nilch <- 1: + panic("nilch send") + 〈.end〉 + 〈.section Maybe〉 + case <-nilch: + panic("nilch recv") + 〈.end〉 + } + 〈.end〉 + if x != n { + die(x) + } + n++ +`) + +var recvOrder = parse(` + 〈# Send n, receive it one way or another into x, check that they match.〉 + 〈# Check order of operations along the way by calling functions that check〉 + 〈# that the argument sequence is strictly increasing.〉 + order = 0 + c <- n + 〈.section Maybe〉 + 〈# Outside of select, left-to-right rule applies.〉 + 〈# (Inside select, assignment waits until case is chosen,〉 + 〈# so right hand side happens before anything on left hand side.〉 + *fp(&x, 1) = <-fc(c, 2) + 〈.or〉〈.section Maybe〉 + m[fn(13, 1)] = <-fc(c, 2) + x = m[13] + 〈.or〉 + select { + 〈# Blocking or non-blocking, before the receive.〉 + 〈# The compiler implements two-case select where one is default with custom code,〉 + 〈# so test the default branch both before and after the send.〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Receive from c. Different cases are direct, indirect, :=, interface, and map assignment.〉 + 〈.section Maybe〉 + case *fp(&x, 100) = <-fc(c, 1): + 〈.or〉〈.section Maybe〉 + case y := <-fc(c, 1): + x = y + 〈.or〉〈.section Maybe〉 + case i = <-fc(c, 1): + x = i.(int) + 〈.or〉 + case m[fn(13, 100)] = <-fc(c, 1): + x = m[13] + 〈.end〉〈.end〉〈.end〉 + 〈# Blocking or non-blocking again, after the receive.〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Dummy send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case fc(dummy, 2) <- fn(1, 3): + panic("dummy send") + 〈.end〉 + 〈.section Maybe〉 + case <-fc(dummy, 4): + panic("dummy receive") + 〈.end〉 + 〈# Nil channel send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case fc(nilch, 5) <- fn(1, 6): + panic("nilch send") + 〈.end〉 + 〈.section Maybe〉 + case <-fc(nilch, 7): + panic("nilch recv") + 〈.end〉 + } + 〈.end〉〈.end〉 + if x != n { + die(x) + } + n++ +`) + +var send = parse(` + 〈# Send n one way or another, receive it into x, check that they match.〉 + 〈.section Maybe〉 + c <- n + 〈.or〉 + select { + 〈# Blocking or non-blocking, before the receive (same reason as in recv).〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Send c <- n. No real special cases here, because no values come back〉 + 〈# from the send operation.〉 + case c <- n: + 〈# Blocking or non-blocking.〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Dummy send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case dummy <- 1: + panic("dummy send") + 〈.end〉 + 〈.section Maybe〉 + case <-dummy: + panic("dummy receive") + 〈.end〉 + 〈# Nil channel send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case nilch <- 1: + panic("nilch send") + 〈.end〉 + 〈.section Maybe〉 + case <-nilch: + panic("nilch recv") + 〈.end〉 + } + 〈.end〉 + x = <-c + if x != n { + die(x) + } + n++ +`) + +var sendOrder = parse(` + 〈# Send n one way or another, receive it into x, check that they match.〉 + 〈# Check order of operations along the way by calling functions that check〉 + 〈# that the argument sequence is strictly increasing.〉 + order = 0 + 〈.section Maybe〉 + fc(c, 1) <- fn(n, 2) + 〈.or〉 + select { + 〈# Blocking or non-blocking, before the receive (same reason as in recv).〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Send c <- n. No real special cases here, because no values come back〉 + 〈# from the send operation.〉 + case fc(c, 1) <- fn(n, 2): + 〈# Blocking or non-blocking.〉 + 〈.section MaybeDefault〉 + default: + panic("nonblock") + 〈.end〉 + 〈# Dummy send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case fc(dummy, 3) <- fn(1, 4): + panic("dummy send") + 〈.end〉 + 〈.section Maybe〉 + case <-fc(dummy, 5): + panic("dummy receive") + 〈.end〉 + 〈# Nil channel send, receive to keep compiler from optimizing select.〉 + 〈.section Maybe〉 + case fc(nilch, 6) <- fn(1, 7): + panic("nilch send") + 〈.end〉 + 〈.section Maybe〉 + case <-fc(nilch, 8): + panic("nilch recv") + 〈.end〉 + } + 〈.end〉 + x = <-c + if x != n { + die(x) + } + n++ +`) + +var nonblock = parse(` + x = n + 〈# Test various combinations of non-blocking operations.〉 + 〈# Receive assignments must not edit or even attempt to compute the address of the lhs.〉 + select { + 〈.section MaybeDefault〉 + default: + 〈.end〉 + 〈.section Maybe〉 + case dummy <- 1: + panic("dummy <- 1") + 〈.end〉 + 〈.section Maybe〉 + case nilch <- 1: + panic("nilch <- 1") + 〈.end〉 + 〈.section Maybe〉 + case <-dummy: + panic("<-dummy") + 〈.end〉 + 〈.section Maybe〉 + case x = <-dummy: + panic("<-dummy x") + 〈.end〉 + 〈.section Maybe〉 + case **(**int)(nil) = <-dummy: + panic("<-dummy (and didn't crash saving result!)") + 〈.end〉 + 〈.section Maybe〉 + case <-nilch: + panic("<-nilch") + 〈.end〉 + 〈.section Maybe〉 + case x = <-nilch: + panic("<-nilch x") + 〈.end〉 + 〈.section Maybe〉 + case **(**int)(nil) = <-nilch: + panic("<-nilch (and didn't crash saving result!)") + 〈.end〉 + 〈.section MustDefault〉 + default: + 〈.end〉 + } + if x != n { + die(x) + } + n++ +`) + +// Code for enumerating all possible paths through +// some logic. The logic should call choose(n) when +// it wants to choose between n possibilities. +// On successive runs through the logic, choose(n) +// will return 0, 1, ..., n-1. The helper maybe() is +// similar but returns true and then false. +// +// Given a function gen that generates an output +// using choose and maybe, code can generate all +// possible outputs using +// +// for next() { +// gen() +// } + +type choice struct { + i, n int +} + +var choices []choice +var cp int = -1 + +func maybe() bool { + return choose(2) == 0 +} + +func choose(n int) int { + if cp >= len(choices) { + // never asked this before: start with 0. + choices = append(choices, choice{0, n}) + cp = len(choices) + return 0 + } + // otherwise give recorded answer + if n != choices[cp].n { + panic("inconsistent choices") + } + i := choices[cp].i + cp++ + return i +} + +func next() bool { + if cp < 0 { + // start a new round + cp = 0 + return true + } + + // increment last choice sequence + cp = len(choices)-1 + for cp >= 0 && choices[cp].i == choices[cp].n-1 { + cp-- + } + if cp < 0 { + choices = choices[:0] + return false + } + choices[cp].i++ + choices = choices[:cp+1] + cp = 0 + return true +} + diff --git a/gcc/testsuite/go.test/test/chan/sendstmt.go b/gcc/testsuite/go.test/test/chan/sendstmt.go new file mode 100644 index 00000000000..ee6f765cf88 --- /dev/null +++ b/gcc/testsuite/go.test/test/chan/sendstmt.go @@ -0,0 +1,37 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Test various parsing cases that are a little +// different now that send is a statement, not a expression. + +package main + +func main() { + chanchan() + sendprec() +} + +func chanchan() { + cc := make(chan chan int, 1) + c := make(chan int, 1) + cc <- c + select { + case <-cc <- 2: + default: + panic("nonblock") + } + if <-c != 2 { + panic("bad receive") + } +} + +func sendprec() { + c := make(chan bool, 1) + c <- false || true // not a syntax error: same as c <- (false || true) + if !<-c { + panic("sent false") + } +} diff --git a/gcc/testsuite/go.test/test/closedchan.go b/gcc/testsuite/go.test/test/closedchan.go index c7c759be3b3..95314b3345e 100644 --- a/gcc/testsuite/go.test/test/closedchan.go +++ b/gcc/testsuite/go.test/test/closedchan.go @@ -4,7 +4,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Test close(c), closed(c). +// Test close(c), receive of closed channel. // // TODO(rsc): Doesn't check behavior of close(c) when there // are blocked senders/receivers. @@ -14,21 +14,29 @@ package main type Chan interface { Send(int) Nbsend(int) bool - Recv() int + Recv() (int) Nbrecv() (int, bool) + Recv2() (int, bool) + Nbrecv2() (int, bool, bool) Close() - Closed() bool Impl() string } -// direct channel operations +// direct channel operations when possible type XChan chan int + func (c XChan) Send(x int) { c <- x } func (c XChan) Nbsend(x int) bool { - return c <- x + select { + case c <- x: + return true + default: + return false + } + panic("nbsend") } func (c XChan) Recv() int { @@ -36,16 +44,32 @@ func (c XChan) Recv() int { } func (c XChan) Nbrecv() (int, bool) { + select { + case x := <-c: + return x, true + default: + return 0, false + } + panic("nbrecv") +} + +func (c XChan) Recv2() (int, bool) { x, ok := <-c return x, ok } -func (c XChan) Close() { - close(c) +func (c XChan) Nbrecv2() (int, bool, bool) { + select { + case x, ok := <-c: + return x, ok, true + default: + return 0, false, false + } + panic("nbrecv2") } -func (c XChan) Closed() bool { - return closed(c) +func (c XChan) Close() { + close(c) } func (c XChan) Impl() string { @@ -54,6 +78,7 @@ func (c XChan) Impl() string { // indirect operations via select type SChan chan int + func (c SChan) Send(x int) { select { case c <- x: @@ -62,10 +87,10 @@ func (c SChan) Send(x int) { func (c SChan) Nbsend(x int) bool { select { - case c <- x: - return true default: return false + case c <- x: + return true } panic("nbsend") } @@ -80,10 +105,28 @@ func (c SChan) Recv() int { func (c SChan) Nbrecv() (int, bool) { select { + default: + return 0, false case x := <-c: return x, true + } + panic("nbrecv") +} + +func (c SChan) Recv2() (int, bool) { + select { + case x, ok := <-c: + return x, ok + } + panic("recv") +} + +func (c SChan) Nbrecv2() (int, bool, bool) { + select { default: - return 0, false + return 0, false, false + case x, ok := <-c: + return x, ok, true } panic("nbrecv") } @@ -92,65 +135,128 @@ func (c SChan) Close() { close(c) } -func (c SChan) Closed() bool { - return closed(c) -} - func (c SChan) Impl() string { return "(select)" } -func test1(c Chan) { - // not closed until the close signal (a zero value) has been received. - if c.Closed() { - println("test1: Closed before Recv zero:", c.Impl()) +// indirect operations via larger selects +var dummy = make(chan bool) + +type SSChan chan int + +func (c SSChan) Send(x int) { + select { + case c <- x: + case <-dummy: + } +} + +func (c SSChan) Nbsend(x int) bool { + select { + default: + return false + case <-dummy: + case c <- x: + return true + } + panic("nbsend") +} + +func (c SSChan) Recv() int { + select { + case <-dummy: + case x := <-c: + return x + } + panic("recv") +} + +func (c SSChan) Nbrecv() (int, bool) { + select { + case <-dummy: + default: + return 0, false + case x := <-c: + return x, true } + panic("nbrecv") +} + +func (c SSChan) Recv2() (int, bool) { + select { + case <-dummy: + case x, ok := <-c: + return x, ok + } + panic("recv") +} + +func (c SSChan) Nbrecv2() (int, bool, bool) { + select { + case <-dummy: + default: + return 0, false, false + case x, ok := <-c: + return x, ok, true + } + panic("nbrecv") +} + +func (c SSChan) Close() { + close(c) +} + +func (c SSChan) Impl() string { + return "(select)" +} + +func shouldPanic(f func()) { + defer func() { + if recover() == nil { + panic("did not panic") + } + }() + f() +} + +func test1(c Chan) { for i := 0; i < 3; i++ { // recv a close signal (a zero value) if x := c.Recv(); x != 0 { - println("test1: recv on closed got non-zero:", x, c.Impl()) + println("test1: recv on closed:", x, c.Impl()) } - - // should now be closed. - if !c.Closed() { - println("test1: not closed after recv zero", c.Impl()) + if x, ok := c.Recv2(); x != 0 || ok { + println("test1: recv2 on closed:", x, ok, c.Impl()) } - // should work with ,ok: received a value without blocking, so ok == true. - x, ok := c.Nbrecv() - if !ok { - println("test1: recv on closed got not ok", c.Impl()) + // should work with select: received a value without blocking, so selected == true. + x, selected := c.Nbrecv() + if x != 0 || !selected { + println("test1: recv on closed nb:", x, selected, c.Impl()) } - if x != 0 { - println("test1: recv ,ok on closed got non-zero:", x, c.Impl()) + x, ok, selected := c.Nbrecv2() + if x != 0 || ok || !selected { + println("test1: recv2 on closed nb:", x, ok, selected, c.Impl()) } } // send should work with ,ok too: sent a value without blocking, so ok == true. - ok := c.Nbsend(1) - if !ok { - println("test1: send on closed got not ok", c.Impl()) - } + shouldPanic(func() { c.Nbsend(1) }) - // but the value should have been discarded. + // the value should have been discarded. if x := c.Recv(); x != 0 { println("test1: recv on closed got non-zero after send on closed:", x, c.Impl()) } // similarly Send. - c.Send(2) + shouldPanic(func() { c.Send(2) }) if x := c.Recv(); x != 0 { println("test1: recv on closed got non-zero after send on closed:", x, c.Impl()) } } func testasync1(c Chan) { - // not closed until the close signal (a zero value) has been received. - if c.Closed() { - println("testasync1: Closed before Recv zero:", c.Impl()) - } - // should be able to get the last value via Recv if x := c.Recv(); x != 1 { println("testasync1: Recv did not get 1:", x, c.Impl()) @@ -160,19 +266,31 @@ func testasync1(c Chan) { } func testasync2(c Chan) { - // not closed until the close signal (a zero value) has been received. - if c.Closed() { - println("testasync2: Closed before Recv zero:", c.Impl()) + // should be able to get the last value via Recv2 + if x, ok := c.Recv2(); x != 1 || !ok { + println("testasync1: Recv did not get 1, true:", x, ok, c.Impl()) } + test1(c) +} + +func testasync3(c Chan) { // should be able to get the last value via Nbrecv - if x, ok := c.Nbrecv(); !ok || x != 1 { - println("testasync2: Nbrecv did not get 1, true:", x, ok, c.Impl()) + if x, selected := c.Nbrecv(); x != 1 || !selected { + println("testasync2: Nbrecv did not get 1, true:", x, selected, c.Impl()) } test1(c) } +func testasync4(c Chan) { + // should be able to get the last value via Nbrecv2 + if x, ok, selected := c.Nbrecv2(); x != 1 || !ok || !selected { + println("testasync2: Nbrecv did not get 1, true, true:", x, ok, selected, c.Impl()) + } + test1(c) +} + func closedsync() chan int { c := make(chan int) close(c) @@ -186,12 +304,27 @@ func closedasync() chan int { return c } -func main() { - test1(XChan(closedsync())) - test1(SChan(closedsync())) +var mks = []func(chan int) Chan { + func(c chan int) Chan { return XChan(c) }, + func(c chan int) Chan { return SChan(c) }, + func(c chan int) Chan { return SSChan(c) }, +} + +var testcloseds = []func(Chan) { + testasync1, + testasync2, + testasync3, + testasync4, +} - testasync1(XChan(closedasync())) - testasync1(SChan(closedasync())) - testasync2(XChan(closedasync())) - testasync2(SChan(closedasync())) +func main() { + for _, mk := range mks { + test1(mk(closedsync())) + } + + for _, testclosed := range testcloseds { + for _, mk := range mks { + testclosed(mk(closedasync())) + } + } } diff --git a/gcc/testsuite/go.test/test/closure.go b/gcc/testsuite/go.test/test/closure.go index 54e4cf8eae3..3033c02ed81 100644 --- a/gcc/testsuite/go.test/test/closure.go +++ b/gcc/testsuite/go.test/test/closure.go @@ -98,4 +98,15 @@ func main() { println("newfunc returned broken funcs") panic("fail") } + + ff(1) +} + +func ff(x int) { + call(func() { + _ = x + }) +} + +func call(func()) { } diff --git a/gcc/testsuite/go.test/test/cmp1.go b/gcc/testsuite/go.test/test/cmp1.go index db0a486dd33..698544c5821 100644 --- a/gcc/testsuite/go.test/test/cmp1.go +++ b/gcc/testsuite/go.test/test/cmp1.go @@ -26,6 +26,8 @@ func istrue(b bool) { } } +type T *int + func main() { var a []int var b map[string]int @@ -55,6 +57,24 @@ func main() { isfalse(ib == id) istrue(ic == id) istrue(ie == ie) + + // these are okay because one side of the + // comparison need only be assignable to the other. + isfalse(a == ib) + isfalse(a == ic) + isfalse(a == id) + isfalse(b == ic) + isfalse(b == id) + istrue(c == id) + istrue(e == ie) + + isfalse(ia == b) + isfalse(ia == c) + isfalse(ia == d) + isfalse(ib == c) + isfalse(ib == d) + istrue(ic == d) + istrue(ie == e) // 6g used to let this go through as true. var g uint64 = 123 @@ -73,4 +93,38 @@ func main() { println("m[ic] = ", m[ic]) panic("bad m[ic]") } + + // non-interface comparisons + { + c := make(chan int) + c1 := (<-chan int)(c) + c2 := (chan<- int)(c) + istrue(c == c1) + istrue(c == c2) + istrue(c1 == c) + istrue(c2 == c) + + d := make(chan int) + isfalse(c == d) + isfalse(d == c) + isfalse(d == c1) + isfalse(d == c2) + isfalse(c1 == d) + isfalse(c2 == d) + } + + // named types vs not + { + var x = new(int) + var y T + var z T = x + + isfalse(x == y) + istrue(x == z) + isfalse(y == z) + + isfalse(y == x) + istrue(z == x) + isfalse(z == y) + } } diff --git a/gcc/testsuite/go.test/test/cmp6.go b/gcc/testsuite/go.test/test/cmp6.go new file mode 100644 index 00000000000..b3ea8ffebfd --- /dev/null +++ b/gcc/testsuite/go.test/test/cmp6.go @@ -0,0 +1,49 @@ +// errchk $G -e $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func use(bool) {} + +type T1 *int +type T2 *int + +type T3 struct {} + +var t3 T3 + +func main() { + // Arguments to comparison must be + // assignable one to the other (or vice versa) + // so chan int can be compared against + // directional channels but channel of different + // direction cannot be compared against each other. + var c1 chan <-int + var c2 <-chan int + var c3 chan int + + use(c1 == c2) // ERROR "invalid operation|incompatible" + use(c2 == c1) // ERROR "invalid operation|incompatible" + use(c1 == c3) + use(c2 == c2) + use(c3 == c1) + use(c3 == c2) + + // Same applies to named types. + var p1 T1 + var p2 T2 + var p3 *int + + use(p1 == p2) // ERROR "invalid operation|incompatible" + use(p2 == p1) // ERROR "invalid operation|incompatible" + use(p1 == p3) + use(p2 == p2) + use(p3 == p1) + use(p3 == p2) + + // Comparison of structs should have a good message + use(t3 == t3) // ERROR "struct|expected" +} diff --git a/gcc/testsuite/go.test/test/cmplxdivide.c b/gcc/testsuite/go.test/test/cmplxdivide.c index b3c6055ed23..b340f04d887 100644 --- a/gcc/testsuite/go.test/test/cmplxdivide.c +++ b/gcc/testsuite/go.test/test/cmplxdivide.c @@ -72,7 +72,7 @@ main(void) if(iscnan(n) && d == 0) q = (NAN+NAN*I) / zero; - printf("\tTest{cmplx(%s, %s), cmplx(%s, %s), cmplx(%s, %s)},\n", + printf("\tTest{complex(%s, %s), complex(%s, %s), complex(%s, %s)},\n", fmt(creal(n)), fmt(cimag(n)), fmt(creal(d)), fmt(cimag(d)), fmt(creal(q)), fmt(cimag(q))); diff --git a/gcc/testsuite/go.test/test/const1.go b/gcc/testsuite/go.test/test/const1.go index 6cfcb460b50..67f36e4fdc9 100644 --- a/gcc/testsuite/go.test/test/const1.go +++ b/gcc/testsuite/go.test/test/const1.go @@ -78,3 +78,5 @@ func main() { f(String) // ERROR "convert|wrong type|cannot|incompatible" f(Bool) // ERROR "convert|wrong type|cannot|incompatible" } + +const ptr = nil // ERROR "const.*nil" diff --git a/gcc/testsuite/go.test/test/const3.go b/gcc/testsuite/go.test/test/const3.go index dd5c88958d7..9bba6ced0b8 100644 --- a/gcc/testsuite/go.test/test/const3.go +++ b/gcc/testsuite/go.test/test/const3.go @@ -26,4 +26,10 @@ func main() { println("type info didn't propagate in const: got", s) panic("fail") } + x := uint(5) + y := float64(uint64(1)<<x) // used to fail to compile + if y != 32 { + println("wrong y", y) + panic("fail") + } } diff --git a/gcc/testsuite/go.test/test/copy.go b/gcc/testsuite/go.test/test/copy.go index 037d3f41fe6..0b5bddbed5c 100644 --- a/gcc/testsuite/go.test/test/copy.go +++ b/gcc/testsuite/go.test/test/copy.go @@ -23,6 +23,15 @@ var input32 = make([]uint32, N) var output32 = make([]uint32, N) var input64 = make([]uint64, N) var output64 = make([]uint64, N) +var inputS string +var outputS = make([]uint8, N) + +type my8 []uint8 +type my16 []uint16 +type my32 []uint32 +type my32b []uint32 +type my64 []uint64 +type myS string func u8(i int) uint8 { i = 'a' + i%26 @@ -64,6 +73,7 @@ func reset() { for i := range input8 { input8[i] = u8(in) output8[i] = u8(out) + outputS[i] = u8(out) input16[i] = u16(in) output16[i] = u16(out) input32[i] = u32(in) @@ -73,6 +83,7 @@ func reset() { in++ out++ } + inputS = string(input8) } func clamp(n int) int { @@ -95,13 +106,15 @@ func ncopied(length, in, out int) int { func doAllSlices(length, in, out int) { reset() - n := copy(output8[out:clamp(out+length)], input8[in:clamp(in+length)]) + n := copy(my8(output8[out:clamp(out+length)]), input8[in:clamp(in+length)]) verify8(length, in, out, n) - n = copy(output16[out:clamp(out+length)], input16[in:clamp(in+length)]) + n = copy(my8(outputS[out:clamp(out+length)]), myS(inputS[in:clamp(in+length)])) + verifyS(length, in, out, n) + n = copy(my16(output16[out:clamp(out+length)]), input16[in:clamp(in+length)]) verify16(length, in, out, n) - n = copy(output32[out:clamp(out+length)], input32[in:clamp(in+length)]) + n = copy(my32(output32[out:clamp(out+length)]), my32b(input32[in:clamp(in+length)])) verify32(length, in, out, n) - n = copy(output64[out:clamp(out+length)], input64[in:clamp(in+length)]) + n = copy(my64(output64[out:clamp(out+length)]), input64[in:clamp(in+length)]) verify64(length, in, out, n) } @@ -145,6 +158,46 @@ func verify8(length, in, out, m int) { } } +func badS(state string, i, length, in, out int) { + fmt.Printf("%s bad(%d %d %d): %c not %c:\n\t%s\n\t%s\n", + state, + length, in, out, + outputS[i], + uint8(i+13), + inputS, outputS) + os.Exit(1) +} + +func verifyS(length, in, out, m int) { + n := ncopied(length, in, out) + if m != n { + fmt.Printf("count bad(%d %d %d): %d not %d\n", length, in, out, m, n) + return + } + // before + var i int + for i = 0; i < out; i++ { + if outputS[i] != u8(i+13) { + badS("beforeS", i, length, in, out) + return + } + } + // copied part + for ; i < out+n; i++ { + if outputS[i] != u8(i+in-out) { + badS("copiedS", i, length, in, out) + return + } + } + // after + for ; i < len(outputS); i++ { + if outputS[i] != u8(i+13) { + badS("afterS", i, length, in, out) + return + } + } +} + func bad16(state string, i, length, in, out int) { fmt.Printf("%s bad(%d %d %d): %x not %x:\n\t%v\n\t%v\n", state, diff --git a/gcc/testsuite/go.test/test/ddd1.go b/gcc/testsuite/go.test/test/ddd1.go index 6f714c078aa..ff6342843a9 100644 --- a/gcc/testsuite/go.test/test/ddd1.go +++ b/gcc/testsuite/go.test/test/ddd1.go @@ -6,6 +6,8 @@ package main +import "unsafe" + func sum(args ...int) int { return 0 } var ( @@ -26,3 +28,19 @@ var ( _ = funny(nil, nil) _ = funny([]T{}) // ok because []T{} is a T; passes []T{[]T{}} ) + +func bad(args ...int) { + print(1, 2, args...) // ERROR "[.][.][.]" + println(args...) // ERROR "[.][.][.]" + ch := make(chan int) + close(ch...) // ERROR "[.][.][.]" + _ = len(args...) // ERROR "[.][.][.]" + _ = new(int...) // ERROR "[.][.][.]" + n := 10 + _ = make([]byte, n...) // ERROR "[.][.][.]" + // TODO(rsc): enable after gofmt bug is fixed + // _ = make([]byte, 10 ...) // error "[.][.][.]" + var x int + _ = unsafe.Pointer(&x...) // ERROR "[.][.][.]" + _ = unsafe.Sizeof(x...) // ERROR "[.][.][.]" +} diff --git a/gcc/testsuite/go.test/test/defer.go b/gcc/testsuite/go.test/test/defer.go index 8b8312235d1..bef8fbe26a6 100644 --- a/gcc/testsuite/go.test/test/defer.go +++ b/gcc/testsuite/go.test/test/defer.go @@ -26,7 +26,7 @@ func test1() { } } -func addDotDotDot(v ...interface{}) { result += fmt.Sprint(v) } +func addDotDotDot(v ...interface{}) { result += fmt.Sprint(v...) } func test2helper() { for i := 0; i < 10; i++ { diff --git a/gcc/testsuite/go.test/test/env.go b/gcc/testsuite/go.test/test/env.go index 7646e07dd68..28113bcb062 100644 --- a/gcc/testsuite/go.test/test/env.go +++ b/gcc/testsuite/go.test/test/env.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # NaCl runner does not expose environment // $G $F.go && $L $F.$A && ./$A.out // Copyright 2009 The Go Authors. All rights reserved. @@ -7,7 +6,10 @@ package main -import os "os" +import ( + "os" + "runtime" +) func main() { ga, e0 := os.Getenverror("GOARCH") @@ -15,8 +17,8 @@ func main() { print("$GOARCH: ", e0.String(), "\n") os.Exit(1) } - if ga != "amd64" && ga != "386" && ga != "arm" { - print("$GOARCH=", ga, "\n") + if ga != runtime.GOARCH { + print("$GOARCH=", ga, "!= runtime.GOARCH=", runtime.GOARCH, "\n") os.Exit(1) } xxx, e1 := os.Getenverror("DOES_NOT_EXIST") diff --git a/gcc/testsuite/go.test/test/eof.go b/gcc/testsuite/go.test/test/eof.go new file mode 100644 index 00000000000..81f9fd028ff --- /dev/null +++ b/gcc/testsuite/go.test/test/eof.go @@ -0,0 +1,9 @@ +// $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// No newline at the end of this file. + +package main
\ No newline at end of file diff --git a/gcc/testsuite/go.test/test/eof1.go b/gcc/testsuite/go.test/test/eof1.go new file mode 100644 index 00000000000..c39a3cfdb15 --- /dev/null +++ b/gcc/testsuite/go.test/test/eof1.go @@ -0,0 +1,9 @@ +// $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +// No newline at the end of this comment.
\ No newline at end of file diff --git a/gcc/testsuite/go.test/test/errchk b/gcc/testsuite/go.test/test/errchk index ab7192da2a8..fbb021ce417 100755 --- a/gcc/testsuite/go.test/test/errchk +++ b/gcc/testsuite/go.test/test/errchk @@ -3,30 +3,38 @@ # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. -# This script checks that the compilers emits the errors which we -# expect. Usage: errchk COMPILER [OPTS] SOURCEFILE. This will run -# the command COMPILER [OPTS] SOURCEFILE. The compilation is expected -# to fail; if it succeeds, this script will report an error. The -# stderr output of the compiler will be matched against comments in -# SOURCEFILE. For each line of the source file which should generate -# an error, there should be a comment of the form // ERROR "regexp". -# If the compiler generates an error for a line which has no such -# commnt, this script will report an error. Likewise if the compiler -# does not generate an error for a line which has a comment, or if the -# error message does not match the <regexp>. The <regexp> syntax -# is Perl but its best to stick to egrep. +# This script checks that the compilers emit the errors which we expect. +# Usage: errchk COMPILER [OPTS] SOURCEFILES. This will run the command +# COMPILER [OPTS] SOURCEFILES. The compilation is expected to fail; if +# it succeeds, this script will report an error. The stderr output of +# the compiler will be matched against comments in SOURCEFILES. For each +# line of the source files which should generate an error, there should +# be a comment of the form // ERROR "regexp". If the compiler generates +# an error for a line which has no such comment, this script will report +# an error. Likewise if the compiler does not generate an error for a +# line which has a comment, or if the error message does not match the +# <regexp>. The <regexp> syntax is Perl but its best to stick to egrep. use POSIX; if(@ARGV < 1) { - print STDERR "Usage: errchk COMPILER [OPTS] SOURCEFILE\n"; + print STDERR "Usage: errchk COMPILER [OPTS] SOURCEFILES\n"; exit 1; } -$file = $ARGV[@ARGV-1]; -open(SRC, $file) || die "BUG: errchk: open $file: $!"; -@src = <SRC>; -close(SRC); +# Grab SOURCEFILES +foreach(reverse 0 .. @ARGV-1) { + unless($ARGV[$_] =~ /\.go$/) { + @file = @ARGV[$_+1 .. @ARGV-1]; + last; + } +} + +foreach $file (@file) { + open(SRC, $file) || die "BUG: errchk: open $file: $!"; + $src{$file} = [<SRC>]; + close(SRC); +} # Run command $cmd = join(' ', @ARGV); @@ -57,35 +65,46 @@ sub bug() { } } -$line = 0; -foreach $src (@src) { - $line++; - next unless $src =~ m|// (GC_)?ERROR (.*)|; - $regexp = $2; - if($regexp !~ /^"([^"]*)"/) { - print STDERR "$file:$line: malformed regexp\n"; - next; - } - $regexp = $1; - - @errmsg = grep { /$file:$line:/ } @out; - @out = grep { !/$file:$line:/ } @out; - if(@errmsg == 0) { - bug(); - print STDERR "errchk: $file:$line: missing expected error: '$regexp'\n"; - next; - } - @match = grep { /$regexp/ } @errmsg; - if(@match == 0) { - bug(); - print STDERR "errchk: $file:$line: error message does not match '$regexp'\n"; - next; +sub chk { + my $file = shift; + my $line = 0; + my $regexp; + my @errmsg; + my @match; + foreach my $src (@{$src{$file}}) { + $line++; + next if $src =~ m|////|; # double comment disables ERROR + next unless $src =~ m|// (GC_)?ERROR (.*)|; + $regexp = $2; + if($regexp !~ /^"([^"]*)"/) { + print STDERR "$file:$line: malformed regexp\n"; + next; + } + $regexp = $1; + + @errmsg = grep { /$file:$line[:[]/ } @out; + @out = grep { !/$file:$line[:[]/ } @out; + if(@errmsg == 0) { + bug(); + print STDERR "errchk: $file:$line: missing expected error: '$regexp'\n"; + next; + } + @match = grep { /$regexp/ } @errmsg; + if(@match == 0) { + bug(); + print STDERR "errchk: $file:$line: error message does not match '$regexp'\n"; + next; + } } } +foreach $file (@file) { + chk($file) +} + if(@out != 0) { bug(); - print STDERR "errchk: $file: unmatched error messages:\n"; + print STDERR "errchk: unmatched error messages:\n"; print STDERR "==================================================\n"; print STDERR @out; print STDERR "==================================================\n"; diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug001.go b/gcc/testsuite/go.test/test/fixedbugs/bug001.go deleted file mode 100644 index 2df8791fffb..00000000000 --- a/gcc/testsuite/go.test/test/fixedbugs/bug001.go +++ /dev/null @@ -1,11 +0,0 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -func main() { - if {} // compiles; should be an error (must be an expression) -} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug016.go b/gcc/testsuite/go.test/test/fixedbugs/bug016.go index 461bcf82ac4..4fbfd48fd97 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug016.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug016.go @@ -1,4 +1,4 @@ -// ! $G $D/$F.go +// errchk $G -e $D/$F.go // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style @@ -7,8 +7,8 @@ package main func main() { - var i int = 100; - i = i << -3; // BUG: should not compile (negative shift) + var i int = 100 + i = i << -3 // ERROR "overflows|negative" } /* diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug055.go b/gcc/testsuite/go.test/test/fixedbugs/bug055.go index 0326d828f2c..8617396109d 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug055.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug055.go @@ -7,16 +7,21 @@ package main func main() { - var i int; - var j int; - if true {} - { return } - i = 0; - if true {} else i++; - type s struct {}; - i = 0; - type s2 int; - var k = func (a int) int { return a+1 }(3); - _, _ = j, k; -ro: ; + var i int + var j int + if true { + } + { + return + } + i = 0 + if true { + } else { + i++ + } + type s struct{} + i = 0 + type s2 int + var k = func(a int) int { return a + 1 }(3) + _, _ = j, k } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug069.go b/gcc/testsuite/go.test/test/fixedbugs/bug069.go index d6796cd72be..9038387ac86 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug069.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug069.go @@ -6,14 +6,14 @@ package main -func main(){ +func main() { c := make(chan int); ok := false; var i int; - + i, ok = <-c; // works _, _ = i, ok; - + ca := new([2]chan int); i, ok = <-(ca[0]); // fails: c.go:11: bad shape across assignment - cr=1 cl=2 _, _ = i, ok; diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug076.go b/gcc/testsuite/go.test/test/fixedbugs/bug076.go index 065cecc015b..2ca518d76d8 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug076.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug076.go @@ -1,4 +1,4 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out +// $G $D/$F.go && $L $F.$A // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style @@ -7,12 +7,16 @@ package main func f() { -exit: ; +exit: + ; + goto exit } func main() { -exit: ; // this should be legal (labels not properly scoped?) +exit: + ; // this should be legal (labels not properly scoped?) + goto exit } /* diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug077.go b/gcc/testsuite/go.test/test/fixedbugs/bug077.go index 08028ab10fa..2cbf96d98fe 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug077.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug077.go @@ -7,7 +7,8 @@ package main func main() { - var exit int; + var exit int exit: - _ = exit; + _ = exit + goto exit } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug081.go b/gcc/testsuite/go.test/test/fixedbugs/bug081.go index ccb36995343..026ce8002f2 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug081.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug081.go @@ -1,12 +1,12 @@ -// ! $G $D/$F.go +// errchk $G $D/$F.go // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package main - -const x x = 2; +package main + +const x x = 2 // ERROR "loop|type" /* bug081.go:3: first constant must evaluate an expression diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug091.go b/gcc/testsuite/go.test/test/fixedbugs/bug091.go index cfbb09cd820..c2ede7153ce 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug091.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug091.go @@ -7,18 +7,19 @@ package main func f1() { - exit: - print("hi\n"); +exit: + print("hi\n") + goto exit } func f2() { - const c = 1234; + const c = 1234 } func f3() { - i := c; // ERROR "undef" + i := c // ERROR "undef" } func main() { - f3(); + f3() } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug137.go b/gcc/testsuite/go.test/test/fixedbugs/bug137.go index 1527924116f..9d43f431be8 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug137.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug137.go @@ -8,16 +8,21 @@ package main func main() { L1: -L2: for i := 0; i < 10; i++ { - print(i); - break L2; +L2: + for i := 0; i < 10; i++ { + print(i) + break L2 } -L3: ; -L4: for i := 0; i < 10; i++ { - print(i); - break L4; +L3: + ; +L4: + for i := 0; i < 10; i++ { + print(i) + break L4 } + goto L1 + goto L3 } /* diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug140.go b/gcc/testsuite/go.test/test/fixedbugs/bug140.go index 33d1deb8a0c..e27b370e760 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug140.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug140.go @@ -7,8 +7,17 @@ package main func main() { - if {} else L1: ; - if {} else L2: main() ; + if true { + } else { + L1: + } + if true { + } else { + L2: + main() + } + goto L1 + goto L2 } /* diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug1515.go b/gcc/testsuite/go.test/test/fixedbugs/bug1515.go new file mode 100644 index 00000000000..7402525164f --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug1515.go @@ -0,0 +1,20 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +const ( + joao = "João" + jose = "José" +) + +func main() { + s1 := joao + s2 := jose + if (s1 < s2) != (joao < jose) { + panic("unequal") + } +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug178.go b/gcc/testsuite/go.test/test/fixedbugs/bug178.go index 4f586342b46..20596102441 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug178.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug178.go @@ -9,19 +9,25 @@ package main func main() { L: for i := 0; i < 1; i++ { -L1: + L1: for { - break L; + break L } - panic("BUG: not reached - break"); + panic("BUG: not reached - break") } L2: for i := 0; i < 1; i++ { -L3: + L3: for { - continue L2; + continue L2 } - panic("BUG: not reached - continue"); + panic("BUG: not reached - continue") + } + if false { + goto L1 + } + if false { + goto L3 } } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug179.go b/gcc/testsuite/go.test/test/fixedbugs/bug179.go index 67548733ce6..3347613d8db 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug179.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug179.go @@ -10,16 +10,18 @@ func main() { L: for { for { - break L2; // ERROR "L2" - continue L2; // ERROR "L2" + break L2 // ERROR "L2" + continue L2 // ERROR "L2" } } L1: - x := 1; - _ = x; + x := 1 + _ = x for { - break L1; // ERROR "L1" - continue L1; // ERROR "L1" + break L1 // ERROR "L1" + continue L1 // ERROR "L1" } + + goto L } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug219.go b/gcc/testsuite/go.test/test/fixedbugs/bug219.go index 21361a2aab3..966d3fcf31a 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug219.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug219.go @@ -12,8 +12,8 @@ func f(func()) int { return 0 } // bug219.go:16: syntax error near if func g1() { if x := f(func() { - if {} - }); { + if true {} + }); true { _ = x; } } @@ -21,8 +21,8 @@ func g1() { // this works func g2() { if x := f(func() { - //if {} - }); { + //if true {} + }); true { _ = x; } } @@ -30,9 +30,9 @@ func g2() { // this works func g3() { x := f(func() { - if {} + if true {} }); - if { + if true { _ = x; } } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug226.dir/y.go b/gcc/testsuite/go.test/test/fixedbugs/bug226.dir/y.go index 01e8b7b4373..c66d592b7c0 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug226.dir/y.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug226.dir/y.go @@ -15,7 +15,7 @@ func f() { _ = x.T{}; _ = x.T{Y:2}; - ok1.M(); // ERROR "assignment.*T" + ok1.M(); bad1 := *ok; // ERROR "assignment.*T" bad2 := ok1; // ERROR "assignment.*T" *ok4 = ok1; // ERROR "assignment.*T" diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug234.go b/gcc/testsuite/go.test/test/fixedbugs/bug234.go index b806ca64e98..562109a058b 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug234.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug234.go @@ -14,6 +14,7 @@ func main() { println("x=", x, " ok=", ok, " want 100, true") panic("fail") } + close(c) x, ok = <-c if x != 0 || ok { println("x=", x, " ok=", ok, " want 0, false") diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug242.go b/gcc/testsuite/go.test/test/fixedbugs/bug242.go index 5c21eaaf008..839dccd3741 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug242.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug242.go @@ -103,6 +103,7 @@ func main() { c <- 'C' // 15 16 *f(), p1 = <-e1(c, 16) + close(c) // 17 18 *f(), p2 = <-e1(c, 18) a[17] += '0' diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug243.go b/gcc/testsuite/go.test/test/fixedbugs/bug243.go index 357f22eb274..0c531968e66 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug243.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug243.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # no network // $G $D/$F.go && $L $F.$A && ./$A.out // Copyright 2010 The Go Authors. All rights reserved. @@ -7,12 +6,14 @@ package main -import ( - "net" -) +import "os" + +// Issue 481: closures and var declarations +// with multiple variables assigned from one +// function call. func main() { - var listen, _ = net.Listen("tcp", "127.0.0.1:0") + var listen, _ = Listen("tcp", "127.0.0.1:0") go func() { for { @@ -21,6 +22,31 @@ func main() { } }() - var conn, _ = net.Dial("tcp", "", listen.Addr().String()) + var conn, _ = Dial("tcp", "", listen.Addr().String()) _ = conn } + +// Simulated net interface to exercise bug +// without involving a real network. +type T chan int + +var global T + +func Listen(x, y string) (T, string) { + global = make(chan int) + return global, y +} + +func (t T) Addr() os.Error { + return os.ErrorString("stringer") +} + +func (t T) Accept() (int, string) { + return <-t, "" +} + +func Dial(x, y, z string) (int, string) { + global <- 1 + return 0, "" +} + diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug252.go b/gcc/testsuite/go.test/test/fixedbugs/bug252.go index 6df94241a0c..a2c1dab9d39 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug252.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug252.go @@ -11,5 +11,5 @@ func f(args ...int) { } func g(args ...interface{}) { - f(args) // ERROR "[.][.][.]|incompatible" + f(args) // ERROR "cannot use|incompatible" } diff --git a/gcc/testsuite/go.test/test/bugs/bug260.go b/gcc/testsuite/go.test/test/fixedbugs/bug260.go index 6a6331e65b3..34757c70eef 100644 --- a/gcc/testsuite/go.test/test/bugs/bug260.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug260.go @@ -10,9 +10,15 @@ import ( "strconv" ) -type T1 struct { x uint8 } -type T2 struct { x uint16 } -type T4 struct { x uint32 } +type T1 struct { + x uint8 +} +type T2 struct { + x uint16 +} +type T4 struct { + x uint32 +} func main() { report := len(os.Args) > 1 @@ -20,7 +26,7 @@ func main() { var b1 [10]T1 a0, _ := strconv.Btoui64(fmt.Sprintf("%p", &b1[0])[2:], 16) a1, _ := strconv.Btoui64(fmt.Sprintf("%p", &b1[1])[2:], 16) - if a1 != a0 + 1 { + if a1 != a0+1 { fmt.Println("FAIL") if report { fmt.Println("alignment should be 1, is", a1-a0) @@ -30,7 +36,7 @@ func main() { var b2 [10]T2 a0, _ = strconv.Btoui64(fmt.Sprintf("%p", &b2[0])[2:], 16) a1, _ = strconv.Btoui64(fmt.Sprintf("%p", &b2[1])[2:], 16) - if a1 != a0 + 2 { + if a1 != a0+2 { if status == 0 { fmt.Println("FAIL") status = 1 @@ -42,7 +48,7 @@ func main() { var b4 [10]T4 a0, _ = strconv.Btoui64(fmt.Sprintf("%p", &b4[0])[2:], 16) a1, _ = strconv.Btoui64(fmt.Sprintf("%p", &b4[1])[2:], 16) - if a1 != a0 + 4 { + if a1 != a0+4 { if status == 0 { fmt.Println("FAIL") status = 1 diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug274.go b/gcc/testsuite/go.test/test/fixedbugs/bug274.go index 621f31eed37..348aed429e9 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug274.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug274.go @@ -24,6 +24,7 @@ func main() { case 1: L1: // ERROR "statement" default: - L2: // correct since no semicolon is required before a '}' + // correct since no semicolon is required before a '}' + L2: // GCCGO_ERROR "not used" } } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug305.go b/gcc/testsuite/go.test/test/fixedbugs/bug305.go new file mode 100644 index 00000000000..758fee2698a --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug305.go @@ -0,0 +1,24 @@ +// errchk $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Use //line to set the line number of the next line to 20. +//line fixedbugs/bug305.go:20 + +package p + +// Introduce an error which should be reported on line 24. +var a int = "bogus" + +// Line 15 of file. +// 16 +// 17 +// 18 +// 19 +// 20 +// 21 +// 22 +// 23 +// ERROR "cannot|incompatible" diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug306.dir/p1.go b/gcc/testsuite/go.test/test/fixedbugs/bug306.dir/p1.go new file mode 100644 index 00000000000..bf87ea1491d --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug306.dir/p1.go @@ -0,0 +1,9 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p1 + +type T <-chan int +var x = make(chan T) + diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug306.dir/p2.go b/gcc/testsuite/go.test/test/fixedbugs/bug306.dir/p2.go new file mode 100644 index 00000000000..3f8bd9d49b5 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug306.dir/p2.go @@ -0,0 +1,8 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p2 + +import _ "./p1" + diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug306.go b/gcc/testsuite/go.test/test/fixedbugs/bug306.go new file mode 100644 index 00000000000..a0a43507dcb --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug306.go @@ -0,0 +1,7 @@ +// $G $D/$F.dir/p1.go && $G $D/$F.dir/p2.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +ignored diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug307.go b/gcc/testsuite/go.test/test/fixedbugs/bug307.go new file mode 100644 index 00000000000..1b42c09ab1e --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug307.go @@ -0,0 +1,15 @@ +// $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Valid program, gccgo reported an error. +// bug307.go:14:6: error: complex arguments must have identical types + +package main + +func main() { + var f float64 + _ = complex(1/f, 0) +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug308.go b/gcc/testsuite/go.test/test/fixedbugs/bug308.go new file mode 100644 index 00000000000..c2845f04213 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug308.go @@ -0,0 +1,19 @@ +// $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// issue 1136 + +package main + +import "fmt" + +func log1(f string, argv ...interface{}) { + fmt.Printf("log: %s\n", fmt.Sprintf(f, argv...)) +} + +func main() { + log1("%d", 42) +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug309.go b/gcc/testsuite/go.test/test/fixedbugs/bug309.go new file mode 100644 index 00000000000..07bebae74c1 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug309.go @@ -0,0 +1,19 @@ +// $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// issue 1016 + +package main + +func foo(t interface{}, c chan int) { + switch v := t.(type) { + case int: + select { + case <-c: + // bug was: internal compiler error: var without type, init: v + } + } +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug310.go b/gcc/testsuite/go.test/test/fixedbugs/bug310.go new file mode 100644 index 00000000000..191f3ed2b4e --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug310.go @@ -0,0 +1,20 @@ +// errchk $G $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +import ( + "bytes" + "fmt" +) + +type t int + +func main() { + _ = t.bar // ERROR "no method" + var b bytes.Buffer + fmt.Print(b) // ERROR "implicit assignment" +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug311.go b/gcc/testsuite/go.test/test/fixedbugs/bug311.go new file mode 100644 index 00000000000..ed937a67470 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug311.go @@ -0,0 +1,20 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + m := make(map[string][1000]byte) + m["hi"] = [1000]byte{1} + + v := m["hi"] + + for k, vv := range m { + if k != "hi" || string(v[:]) != string(vv[:]) { + panic("bad iter") + } + } +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug312.go b/gcc/testsuite/go.test/test/fixedbugs/bug312.go new file mode 100644 index 00000000000..70888dd410f --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug312.go @@ -0,0 +1,22 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// issue 1172 + +package main + +func main() { + var i interface{} + c := make(chan int, 1) + c <- 1 + select { + case i = <-c: // error on this line + } + if i != 1 { + println("bad i", i) + panic("BUG") + } +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug313.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/bug313.dir/a.go new file mode 100644 index 00000000000..cb4ca7256b9 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug313.dir/a.go @@ -0,0 +1,11 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import "fmt" + +func a() { + fmt.DoesNotExist() // ERROR "undefined" +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug313.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/bug313.dir/b.go new file mode 100644 index 00000000000..7eda72b4f8b --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug313.dir/b.go @@ -0,0 +1,11 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import . "fmt" + +func b() { + Println() +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug313.go b/gcc/testsuite/go.test/test/fixedbugs/bug313.go new file mode 100644 index 00000000000..eb2a0223b6c --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug313.go @@ -0,0 +1,19 @@ +// errchk $G -e $D/$F.dir/[ab].go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 1284 + +package bug313 + +/* +6g bug313.dir/[ab].go + +Before: +bug313.dir/b.go:7: internal compiler error: fault + +Now: +bug313.dir/a.go:10: undefined: fmt.DoesNotExist +*/ diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug314.go b/gcc/testsuite/go.test/test/fixedbugs/bug314.go new file mode 100644 index 00000000000..95d81d7951e --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug314.go @@ -0,0 +1,31 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug314 + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Used to call wrong methods; issue 1290. + +package main + +type S struct { +} +func (S) a() int{ + return 0 +} +func (S) b() int{ + return 1 +} + +func main() { + var i interface { + b() int + a() int + } = S{} + if i.a() != 0 { + panic("wrong method called") + } + if i.b() != 1 { + panic("wrong method called") + } +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug315.go b/gcc/testsuite/go.test/test/fixedbugs/bug315.go new file mode 100644 index 00000000000..c59ef29e6c0 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug315.go @@ -0,0 +1,18 @@ +// $G $D/$F.go || echo BUG: bug315 + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 1368. + +package main + +func main() { + a := complex(2, 2) + a /= 2 +} + +/* +bug315.go:13: internal compiler error: optoas: no entry DIV-complex +*/ diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug316.go b/gcc/testsuite/go.test/test/fixedbugs/bug316.go new file mode 100644 index 00000000000..2146408a1e2 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug316.go @@ -0,0 +1,17 @@ +// $G $D/$F.go || echo BUG: bug316 + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 1369. + +package main + +const ( + c = complex(1, 2) + r = real(c) // was: const initializer must be constant + i = imag(c) // was: const initializer must be constant +) + +func main() {} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug317.go b/gcc/testsuite/go.test/test/fixedbugs/bug317.go new file mode 100644 index 00000000000..0cb26c29ba1 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug317.go @@ -0,0 +1,16 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug317 + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + x := []uint{0} + x[0] &^= f() +} + +func f() uint { + return 1<<31 // doesn't panic with 1<<31 - 1 +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug318.go b/gcc/testsuite/go.test/test/fixedbugs/bug318.go new file mode 100644 index 00000000000..9c46a04269c --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug318.go @@ -0,0 +1,12 @@ +// errchk $G $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 1411. + +package main + +const ui uint = 0 +const i int = ui // ERROR "type" diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug319.go b/gcc/testsuite/go.test/test/fixedbugs/bug319.go new file mode 100644 index 00000000000..f60eee4fb23 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug319.go @@ -0,0 +1,22 @@ +// $G $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import "unsafe" + +func main() { + var x int + + a := uint64(uintptr(unsafe.Pointer(&x))) + b := uint32(uintptr(unsafe.Pointer(&x))) + c := uint16(uintptr(unsafe.Pointer(&x))) + d := int64(uintptr(unsafe.Pointer(&x))) + e := int32(uintptr(unsafe.Pointer(&x))) + f := int16(uintptr(unsafe.Pointer(&x))) + + _, _, _, _, _, _ = a, b, c, d, e, f +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug320.go b/gcc/testsuite/go.test/test/fixedbugs/bug320.go new file mode 100644 index 00000000000..06d41f2ed87 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug320.go @@ -0,0 +1,45 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + c := make(chan int, 1) + dummy := make(chan int) + v := 0x12345678 + for i := 0; i < 10; i++ { + // 6g had a bug that caused select to pass &t to + // selectrecv before allocating the memory for t, + // which caused non-deterministic crashes. + // This test looks for the bug by checking that the + // value received actually ends up in t. + // If the allocation happens after storing through + // whatever garbage &t holds, the later reference + // to t in the case body will use the new pointer and + // not see the received value. + v += 0x1020304 + c <- v + select { + case t := <-c: + go func() { + f(t) + }() + escape(&t) + if t != v { + println(i, v, t) + panic("wrong values") + } + case dummy <- 1: + } + } +} + +func escape(*int) { +} + +func f(int) { +} + diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug321.go b/gcc/testsuite/go.test/test/fixedbugs/bug321.go new file mode 100644 index 00000000000..d0595ff59b6 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug321.go @@ -0,0 +1,30 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug321 + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Troublesome floating point constants. Issue 1463. + +package main + +import "fmt" + +func check(test string, got, want float64) bool { + if got != want { + fmt.Println(test, "got", got, "want", want) + return false + } + return true +} + +func main() { + good := true + // http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ + good = good && check("2.2250738585072012e-308", 2.2250738585072012e-308, 2.2250738585072014e-308) + // http://www.exploringbinary.com/php-hangs-on-numeric-value-2-2250738585072011e-308/ + good = good && check("2.2250738585072011e-308", 2.2250738585072011e-308, 2.225073858507201e-308) + if !good { + panic("fail") + } +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug323.go b/gcc/testsuite/go.test/test/fixedbugs/bug323.go new file mode 100644 index 00000000000..23e2be6603a --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug323.go @@ -0,0 +1,20 @@ +// errchk $G $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +type T struct{} +type P *T + +func (t *T) Meth() {} +func (t T) Meth2() {} + +func main() { + t := &T{} + p := P(t) + p.Meth() // ERROR "undefined" + p.Meth2() // ERROR "undefined" +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug325.go b/gcc/testsuite/go.test/test/fixedbugs/bug325.go new file mode 100644 index 00000000000..b86740fff93 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug325.go @@ -0,0 +1,15 @@ +// errchk $G $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import "unsafe" + +func main() { + var x unsafe.Pointer + println(*x) // ERROR "invalid indirect.*unsafe.Pointer" + var _ = (unsafe.Pointer)(nil).foo // ERROR "foo" +} diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug326.go b/gcc/testsuite/go.test/test/fixedbugs/bug326.go new file mode 100644 index 00000000000..efdd0ef7131 --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug326.go @@ -0,0 +1,41 @@ +// errchk $G $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +import "os" + +func f() (_ int, err os.Error) { + return +} + +func g() (x int, _ os.Error) { + return +} + +func h() (_ int, _ os.Error) { + return +} + +func i() (int, os.Error) { + return // ERROR "not enough arguments to return" +} + +func f1() (_ int, err os.Error) { + return 1, nil +} + +func g1() (x int, _ os.Error) { + return 1, nil +} + +func h1() (_ int, _ os.Error) { + return 1, nil +} + +func ii() (int, os.Error) { + return 1, nil +} diff --git a/gcc/testsuite/go.test/test/float_lit.go b/gcc/testsuite/go.test/test/float_lit.go index 3ffc5c1e4f2..7b91d88e51a 100644 --- a/gcc/testsuite/go.test/test/float_lit.go +++ b/gcc/testsuite/go.test/test/float_lit.go @@ -6,29 +6,19 @@ package main -import "os" - -var deLim float64 var bad bool -func -init() { - if os.Getenv("GOARCH") == "arm" { - deLim = 1.0e-8 - } else { - deLim = 10.e-14 +func pow10(pow int) float64 { + if pow < 0 { + return 1 / pow10(-pow) + } + if pow > 0 { + return pow10(pow-1) * 10 } -} - -func -pow10(pow int) float64 { - if pow < 0 { return 1/pow10(-pow); } - if pow > 0 { return pow10(pow-1)*10; } return 1 } -func -close(da float64, ia, ib int64, pow int) bool { +func close(da float64, ia, ib int64, pow int) bool { db := float64(ia) / float64(ib) db *= pow10(pow) @@ -39,12 +29,12 @@ close(da float64, ia, ib int64, pow int) bool { return false } - de := (da-db) /da + de := (da - db) / da if de < 0 { de = -de } - if de < deLim { + if de < 1e-14 { return true } if !bad { @@ -54,65 +44,154 @@ close(da float64, ia, ib int64, pow int) bool { return false } -func -main() { - if !close(0., 0, 1, 0) { print("0. is ", 0., "\n"); } - if !close(+10., 10, 1, 0) { print("+10. is ", +10., "\n"); } - if !close(-210., -210, 1, 0) { print("-210. is ", -210., "\n"); } +func main() { + if !close(0., 0, 1, 0) { + print("0. is ", 0., "\n") + } + if !close(+10., 10, 1, 0) { + print("+10. is ", +10., "\n") + } + if !close(-210., -210, 1, 0) { + print("-210. is ", -210., "\n") + } - if !close(.0, 0, 1, 0) { print(".0 is ", .0, "\n"); } - if !close(+.01, 1, 100, 0) { print("+.01 is ", +.01, "\n"); } - if !close(-.012, -12, 1000, 0) { print("-.012 is ", -.012, "\n"); } + if !close(.0, 0, 1, 0) { + print(".0 is ", .0, "\n") + } + if !close(+.01, 1, 100, 0) { + print("+.01 is ", +.01, "\n") + } + if !close(-.012, -12, 1000, 0) { + print("-.012 is ", -.012, "\n") + } - if !close(0.0, 0, 1, 0) { print("0.0 is ", 0.0, "\n"); } - if !close(+10.01, 1001, 100, 0) { print("+10.01 is ", +10.01, "\n"); } - if !close(-210.012, -210012, 1000, 0) { print("-210.012 is ", -210.012, "\n"); } + if !close(0.0, 0, 1, 0) { + print("0.0 is ", 0.0, "\n") + } + if !close(+10.01, 1001, 100, 0) { + print("+10.01 is ", +10.01, "\n") + } + if !close(-210.012, -210012, 1000, 0) { + print("-210.012 is ", -210.012, "\n") + } - if !close(0E+1, 0, 1, 0) { print("0E+1 is ", 0E+1, "\n"); } - if !close(+10e2, 10, 1, 2) { print("+10e2 is ", +10e2, "\n"); } - if !close(-210e3, -210, 1, 3) { print("-210e3 is ", -210e3, "\n"); } + if !close(0E+1, 0, 1, 0) { + print("0E+1 is ", 0E+1, "\n") + } + if !close(+10e2, 10, 1, 2) { + print("+10e2 is ", +10e2, "\n") + } + if !close(-210e3, -210, 1, 3) { + print("-210e3 is ", -210e3, "\n") + } - if !close(0E-1, 0, 1, 0) { print("0E-1 is ", 0E-1, "\n"); } - if !close(+0e23, 0, 1, 1) { print("+0e23 is ", +0e23, "\n"); } - if !close(-0e345, 0, 1, 1) { print("-0e345 is ", -0e345, "\n"); } + if !close(0E-1, 0, 1, 0) { + print("0E-1 is ", 0E-1, "\n") + } + if !close(+0e23, 0, 1, 1) { + print("+0e23 is ", +0e23, "\n") + } + if !close(-0e345, 0, 1, 1) { + print("-0e345 is ", -0e345, "\n") + } - if !close(0E1, 0, 1, 1) { print("0E1 is ", 0E1, "\n"); } - if !close(+10e23, 10, 1, 23) { print("+10e23 is ", +10e23, "\n"); } - if !close(-210e34, -210, 1, 34) { print("-210e34 is ", -210e34, "\n"); } + if !close(0E1, 0, 1, 1) { + print("0E1 is ", 0E1, "\n") + } + if !close(+10e23, 10, 1, 23) { + print("+10e23 is ", +10e23, "\n") + } + if !close(-210e34, -210, 1, 34) { + print("-210e34 is ", -210e34, "\n") + } - if !close(0.E1, 0, 1, 1) { print("0.E1 is ", 0.E1, "\n"); } - if !close(+10.e+2, 10, 1, 2) { print("+10.e+2 is ", +10.e+2, "\n"); } - if !close(-210.e-3, -210, 1, -3) { print("-210.e-3 is ", -210.e-3, "\n"); } + if !close(0.E1, 0, 1, 1) { + print("0.E1 is ", 0.E1, "\n") + } + if !close(+10.e+2, 10, 1, 2) { + print("+10.e+2 is ", +10.e+2, "\n") + } + if !close(-210.e-3, -210, 1, -3) { + print("-210.e-3 is ", -210.e-3, "\n") + } - if !close(.0E1, 0, 1, 1) { print(".0E1 is ", .0E1, "\n"); } - if !close(+.01e2, 1, 100, 2) { print("+.01e2 is ", +.01e2, "\n"); } - if !close(-.012e3, -12, 1000, 3) { print("-.012e3 is ", -.012e3, "\n"); } + if !close(.0E1, 0, 1, 1) { + print(".0E1 is ", .0E1, "\n") + } + if !close(+.01e2, 1, 100, 2) { + print("+.01e2 is ", +.01e2, "\n") + } + if !close(-.012e3, -12, 1000, 3) { + print("-.012e3 is ", -.012e3, "\n") + } - if !close(0.0E1, 0, 1, 0) { print("0.0E1 is ", 0.0E1, "\n"); } - if !close(+10.01e2, 1001, 100, 2) { print("+10.01e2 is ", +10.01e2, "\n"); } - if !close(-210.012e3, -210012, 1000, 3) { print("-210.012e3 is ", -210.012e3, "\n"); } + if !close(0.0E1, 0, 1, 0) { + print("0.0E1 is ", 0.0E1, "\n") + } + if !close(+10.01e2, 1001, 100, 2) { + print("+10.01e2 is ", +10.01e2, "\n") + } + if !close(-210.012e3, -210012, 1000, 3) { + print("-210.012e3 is ", -210.012e3, "\n") + } - if !close(0.E+12, 0, 1, 0) { print("0.E+12 is ", 0.E+12, "\n"); } - if !close(+10.e23, 10, 1, 23) { print("+10.e23 is ", +10.e23, "\n"); } - if !close(-210.e33, -210, 1, 33) { print("-210.e33 is ", -210.e33, "\n"); } + if !close(0.E+12, 0, 1, 0) { + print("0.E+12 is ", 0.E+12, "\n") + } + if !close(+10.e23, 10, 1, 23) { + print("+10.e23 is ", +10.e23, "\n") + } + if !close(-210.e33, -210, 1, 33) { + print("-210.e33 is ", -210.e33, "\n") + } - if !close(.0E-12, 0, 1, 0) { print(".0E-12 is ", .0E-12, "\n"); } - if !close(+.01e23, 1, 100, 23) { print("+.01e23 is ", +.01e23, "\n"); } - if !close(-.012e34, -12, 1000, 34) { print("-.012e34 is ", -.012e34, "\n"); } + if !close(.0E-12, 0, 1, 0) { + print(".0E-12 is ", .0E-12, "\n") + } + if !close(+.01e23, 1, 100, 23) { + print("+.01e23 is ", +.01e23, "\n") + } + if !close(-.012e34, -12, 1000, 34) { + print("-.012e34 is ", -.012e34, "\n") + } - if !close(0.0E12, 0, 1, 12) { print("0.0E12 is ", 0.0E12, "\n"); } - if !close(+10.01e23, 1001, 100, 23) { print("+10.01e23 is ", +10.01e23, "\n"); } - if !close(-210.012e33, -210012, 1000, 33) { print("-210.012e33 is ", -210.012e33, "\n"); } + if !close(0.0E12, 0, 1, 12) { + print("0.0E12 is ", 0.0E12, "\n") + } + if !close(+10.01e23, 1001, 100, 23) { + print("+10.01e23 is ", +10.01e23, "\n") + } + if !close(-210.012e33, -210012, 1000, 33) { + print("-210.012e33 is ", -210.012e33, "\n") + } - if !close(0.E123, 0, 1, 123) { print("0.E123 is ", 0.E123, "\n"); } - if !close(+10.e+23, 10, 1, 23) { print("+10.e+234 is ", +10.e+234, "\n"); } - if !close(-210.e-35, -210, 1, -35) { print("-210.e-35 is ", -210.e-35, "\n"); } + if !close(0.E123, 0, 1, 123) { + print("0.E123 is ", 0.E123, "\n") + } + if !close(+10.e+23, 10, 1, 23) { + print("+10.e+234 is ", +10.e+234, "\n") + } + if !close(-210.e-35, -210, 1, -35) { + print("-210.e-35 is ", -210.e-35, "\n") + } - if !close(.0E123, 0, 1, 123) { print(".0E123 is ", .0E123, "\n"); } - if !close(+.01e29, 1, 100, 29) { print("+.01e29 is ", +.01e29, "\n"); } - if !close(-.012e29, -12, 1000, 29) { print("-.012e29 is ", -.012e29, "\n"); } + if !close(.0E123, 0, 1, 123) { + print(".0E123 is ", .0E123, "\n") + } + if !close(+.01e29, 1, 100, 29) { + print("+.01e29 is ", +.01e29, "\n") + } + if !close(-.012e29, -12, 1000, 29) { + print("-.012e29 is ", -.012e29, "\n") + } - if !close(0.0E123, 0, 1, 123) { print("0.0E123 is ", 0.0E123, "\n"); } - if !close(+10.01e31, 1001, 100, 31) { print("+10.01e31 is ", +10.01e31, "\n"); } - if !close(-210.012e19, -210012, 1000, 19) { print("-210.012e19 is ", -210.012e19, "\n"); } + if !close(0.0E123, 0, 1, 123) { + print("0.0E123 is ", 0.0E123, "\n") + } + if !close(+10.01e31, 1001, 100, 31) { + print("+10.01e31 is ", +10.01e31, "\n") + } + if !close(-210.012e19, -210012, 1000, 19) { + print("-210.012e19 is ", -210.012e19, "\n") + } } diff --git a/gcc/testsuite/go.test/test/garbage/Makefile b/gcc/testsuite/go.test/test/garbage/Makefile index ab29e0956c0..e8338438265 100644 --- a/gcc/testsuite/go.test/test/garbage/Makefile +++ b/gcc/testsuite/go.test/test/garbage/Makefile @@ -11,8 +11,8 @@ ALL=\ all: $(addsuffix .out, $(ALL)) -%.$O: %.go - $(GC) $*.go +%.$O: %.go stats.go + $(GC) $*.go stats.go %.out: %.$O $(LD) -o $@ $*.$O diff --git a/gcc/testsuite/go.test/test/garbage/parser.go b/gcc/testsuite/go.test/test/garbage/parser.go index cf68737fb2f..19a96bc63bd 100644 --- a/gcc/testsuite/go.test/test/garbage/parser.go +++ b/gcc/testsuite/go.test/test/garbage/parser.go @@ -11,13 +11,19 @@ import ( "fmt" "go/ast" "go/parser" + "go/token" "os" "path" "runtime" "strings" "time" + "http" + _ "http/pprof" + "log" ) +var serve = flag.String("serve", "", "serve http on this address at end") + func isGoFile(dir *os.FileInfo) bool { return dir.IsRegular() && !strings.HasPrefix(dir.Name, ".") && // ignore .files @@ -30,7 +36,7 @@ func isPkgFile(dir *os.FileInfo) bool { } func pkgName(filename string) string { - file, err := parser.ParseFile(filename, nil, parser.PackageClauseOnly) + file, err := parser.ParseFile(token.NewFileSet(), filename, nil, parser.PackageClauseOnly) if err != nil || file == nil { return "" } @@ -58,7 +64,7 @@ func parseDir(dirpath string) map[string]*ast.Package { } // get package AST - pkgs, err := parser.ParseDir(dirpath, filter, parser.ParseComments) + pkgs, err := parser.ParseDir(token.NewFileSet(), dirpath, filter, parser.ParseComments) if err != nil { println("parse", dirpath, err.String()) panic("fail") @@ -67,12 +73,19 @@ func parseDir(dirpath string) map[string]*ast.Package { } func main() { + runtime.GOMAXPROCS(4) + go func() {}() + go func() {}() + go func() {}() st := &runtime.MemStats + packages = append(packages, packages...) + packages = append(packages, packages...) n := flag.Int("n", 4, "iterations") p := flag.Int("p", len(packages), "# of packages to keep in memory") flag.BoolVar(&st.DebugGC, "d", st.DebugGC, "print GC debugging info (pause times)") flag.Parse() + var lastParsed []map[string]*ast.Package var t0 int64 pkgroot := runtime.GOROOT() + "/src/pkg/" for pass := 0; pass < 2; pass++ { @@ -81,7 +94,7 @@ func main() { // than the normal pauses and would otherwise make // the average look much better than it actually is. st.NumGC = 0 - st.PauseNs = 0 + st.PauseTotalNs = 0 t0 = time.Nanoseconds() for i := 0; i < *n; i++ { @@ -89,25 +102,34 @@ func main() { for j := range parsed { parsed[j] = parseDir(pkgroot + packages[j%len(packages)]) } + if i+1 == *n && *serve != "" { + lastParsed = parsed + } } runtime.GC() + runtime.GC() } t1 := time.Nanoseconds() fmt.Printf("Alloc=%d/%d Heap=%d Mallocs=%d PauseTime=%.3f/%d = %.3f\n", st.Alloc, st.TotalAlloc, st.Sys, - st.Mallocs, float64(st.PauseNs)/1e9, - st.NumGC, float64(st.PauseNs)/1e9/float64(st.NumGC)) - - fmt.Printf("%10s %10s %10s\n", "size", "#alloc", "#free") - for _, s := range st.BySize { - fmt.Printf("%10d %10d %10d\n", s.Size, s.Mallocs, s.Frees) - } + st.Mallocs, float64(st.PauseTotalNs)/1e9, + st.NumGC, float64(st.PauseTotalNs)/1e9/float64(st.NumGC)) + /* + fmt.Printf("%10s %10s %10s\n", "size", "#alloc", "#free") + for _, s := range st.BySize { + fmt.Printf("%10d %10d %10d\n", s.Size, s.Mallocs, s.Frees) + } + */ // Standard gotest benchmark output, collected by build dashboard. - fmt.Printf("garbage.BenchmarkParser %d %d ns/op\n", *n, (t1-t0)/int64(*n)) - fmt.Printf("garbage.BenchmarkParserPause %d %d ns/op\n", st.NumGC, int64(st.PauseNs)/int64(st.NumGC)) + gcstats("BenchmarkParser", *n, t1-t0) + + if *serve != "" { + log.Fatal(http.ListenAndServe(*serve, nil)) + println(lastParsed) + } } @@ -183,7 +205,6 @@ var packages = []string{ "math", "mime", "net", - "nntp", "os", "os/signal", "patch", @@ -195,6 +216,7 @@ var packages = []string{ "runtime", "scanner", "sort", + "smtp", "strconv", "strings", "sync", diff --git a/gcc/testsuite/go.test/test/garbage/peano.go b/gcc/testsuite/go.test/test/garbage/peano.go index b026354e8c1..b4d31856126 100644 --- a/gcc/testsuite/go.test/test/garbage/peano.go +++ b/gcc/testsuite/go.test/test/garbage/peano.go @@ -123,7 +123,6 @@ func verify() { func main() { - st := &runtime.MemStats t0 := time.Nanoseconds() verify() for i := 0; i <= 9; i++ { @@ -132,6 +131,5 @@ func main() { runtime.GC() t1 := time.Nanoseconds() - fmt.Printf("garbage.BenchmarkPeano 1 %d ns/op\n", t1-t0) - fmt.Printf("garbage.BenchmarkPeanoPause %d %d ns/op\n", st.NumGC, int64(st.PauseNs)/int64(st.NumGC)) + gcstats("BenchmarkPeano", 1, t1-t0) } diff --git a/gcc/testsuite/go.test/test/garbage/stats.go b/gcc/testsuite/go.test/test/garbage/stats.go new file mode 100644 index 00000000000..474e6ad4abc --- /dev/null +++ b/gcc/testsuite/go.test/test/garbage/stats.go @@ -0,0 +1,44 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "runtime" + "sort" +) + +func gcstats(name string, n int, t int64) { + st := &runtime.MemStats + fmt.Printf("garbage.%sMem Alloc=%d/%d Heap=%d NextGC=%d Mallocs=%d\n", name, st.Alloc, st.TotalAlloc, st.Sys, st.NextGC, st.Mallocs) + fmt.Printf("garbage.%s %d %d ns/op\n", name, n, t/int64(n)) + fmt.Printf("garbage.%sLastPause 1 %d ns/op\n", name, st.PauseNs[(st.NumGC-1)%uint32(len(st.PauseNs))]) + fmt.Printf("garbage.%sPause %d %d ns/op\n", name, st.NumGC, int64(st.PauseTotalNs)/int64(st.NumGC)) + nn := int(st.NumGC) + if nn >= len(st.PauseNs) { + nn = len(st.PauseNs) + } + t1, t2, t3, t4, t5 := tukey5(st.PauseNs[0:nn]) + fmt.Printf("garbage.%sPause5: %d %d %d %d %d\n", name, t1, t2, t3, t4, t5) + +// fmt.Printf("garbage.%sScan: %v\n", name, st.ScanDist) +} + +type T []uint64 +func (t T) Len() int { return len(t) } +func (t T) Swap(i, j int) { t[i], t[j] = t[j], t[i] } +func (t T) Less(i, j int) bool { return t[i] < t[j] } + +func tukey5(raw []uint64) (lo, q1, q2, q3, hi uint64) { + x := make(T, len(raw)) + copy(x, raw) + sort.Sort(T(x)) + lo = x[0] + q1 = x[len(x)/4] + q2 = x[len(x)/2] + q3 = x[len(x)*3/4] + hi = x[len(x)-1] + return +} diff --git a/gcc/testsuite/go.test/test/garbage/tree.go b/gcc/testsuite/go.test/test/garbage/tree.go index 816693fbebf..c5eae9760f2 100644 --- a/gcc/testsuite/go.test/test/garbage/tree.go +++ b/gcc/testsuite/go.test/test/garbage/tree.go @@ -39,7 +39,6 @@ package main import ( "flag" "fmt" - "runtime" "time" ) @@ -95,10 +94,7 @@ func main() { fmt.Printf("long lived tree of depth %d\t check: %d\n", maxDepth, longLivedTree.itemCheck()) t1 := time.Nanoseconds() - st := &runtime.MemStats // Standard gotest benchmark output, collected by build dashboard. - fmt.Printf("garbage.BenchmarkTree %d %d ns/op\n", *n, (t1-t0)/int64(*n)) - fmt.Printf("garbage.BenchmarkTreePause %d %d ns/op\n", st.NumGC, int64(st.PauseNs)/int64(st.NumGC)) - + gcstats("BenchmarkTree", *n, t1-t0) } diff --git a/gcc/testsuite/go.test/test/golden-arm.out b/gcc/testsuite/go.test/test/golden-arm.out deleted file mode 100644 index 41829fb0360..00000000000 --- a/gcc/testsuite/go.test/test/golden-arm.out +++ /dev/null @@ -1,131 +0,0 @@ - -=========== ./cmp2.go -panic: runtime error: comparing uncomparable type []int - -panic PC=xxx - -=========== ./cmp3.go -panic: runtime error: comparing uncomparable type []int - -panic PC=xxx - -=========== ./cmp4.go -panic: runtime error: hash of unhashable type []int - -panic PC=xxx - -=========== ./cmp5.go -panic: runtime error: hash of unhashable type []int - -panic PC=xxx - -=========== ./deferprint.go -printing: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -42 true false true +1.500000e+000 world 0x0 [0/0]0x0 0x0 0x0 255 - -=========== ./helloworld.go -hello, world - -=========== ./peano.go -0! = 1 -1! = 1 -2! = 2 -3! = 6 -4! = 24 -5! = 120 -6! = 720 -7! = 5040 -8! = 40320 -9! = 362880 - -=========== ./printbig.go --9223372036854775808 -9223372036854775807 - -=========== ./sigchld.go -survived SIGCHLD - -=========== ./sinit.go -FAIL - -=========== ./turing.go -Hello World! - -=========== ken/intervar.go - print 1 bio 2 file 3 -- abc - -=========== ken/label.go -100 - -=========== ken/rob1.go -9876543210 - -=========== ken/rob2.go -(defn foo (add 12 34)) - -=========== ken/simpprint.go -hello world - -=========== ken/simpswitch.go -0out01out12out2aout34out4fiveout56out6aout78out89out9 - -=========== ken/string.go -abcxyz-abcxyz-abcxyz-abcxyz-abcxyz-abcxyz-abcxyz - -=========== chan/doubleselect.go -PASS - -=========== chan/nonblock.go -PASS - -=========== interface/fail.go -panic: interface conversion: *main.S is not main.I: missing method Foo - -panic PC=xxx - -=========== interface/returntype.go -panic: interface conversion: *main.S is not main.I2: missing method Name - -panic PC=xxx - -=========== fixedbugs/bug016.go -fixedbugs/bug016.go:11: constant -3 overflows uint - -=========== fixedbugs/bug027.go -hi -0 44444 -1 3333 -2 222 -3 11 -4 0 -0 44444 -1 3333 -2 222 -3 11 -4 0 - -=========== fixedbugs/bug067.go -ok - -=========== fixedbugs/bug070.go -outer loop top k 0 -inner loop top i 0 -do break -broke - -=========== fixedbugs/bug081.go -fixedbugs/bug081.go:9: typechecking loop - -=========== fixedbugs/bug093.go -M - -=========== fixedbugs/bug113.go -panic: interface conversion: interface is int, not int32 - -panic PC=xxx - -=========== fixedbugs/bug148.go -2 3 -panic: interface conversion: interface is main.T, not main.T - -panic PC=xxx diff --git a/gcc/testsuite/go.test/test/golden.out b/gcc/testsuite/go.test/test/golden.out index 49bca4b874b..cc699d4500e 100644 --- a/gcc/testsuite/go.test/test/golden.out +++ b/gcc/testsuite/go.test/test/golden.out @@ -4,22 +4,18 @@ =========== ./cmp2.go panic: runtime error: comparing uncomparable type []int -panic PC=xxx =========== ./cmp3.go panic: runtime error: comparing uncomparable type []int -panic PC=xxx =========== ./cmp4.go panic: runtime error: hash of unhashable type []int -panic PC=xxx =========== ./cmp5.go panic: runtime error: hash of unhashable type []int -panic PC=xxx =========== ./deferprint.go printing: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @@ -64,7 +60,6 @@ Hello World! =========== ken/cplx3.go (+1.292308e+000-1.384615e-001i) (+1.292308e+000-1.384615e-001i) -64 =========== ken/cplx4.go c = (-5.000000-6.000000i) @@ -117,12 +112,10 @@ PASS =========== interface/fail.go panic: interface conversion: *main.S is not main.I: missing method Foo -panic PC=xxx =========== interface/returntype.go panic: interface conversion: *main.S is not main.I2: missing method Name -panic PC=xxx == nilptr/ @@ -130,9 +123,6 @@ panic PC=xxx == fixedbugs/ -=========== fixedbugs/bug016.go -fixedbugs/bug016.go:11: constant -3 overflows uint - =========== fixedbugs/bug027.go hi 0 44444 @@ -155,25 +145,25 @@ inner loop top i 0 do break broke -=========== fixedbugs/bug081.go -fixedbugs/bug081.go:9: typechecking loop - =========== fixedbugs/bug093.go M =========== fixedbugs/bug113.go panic: interface conversion: interface is int, not int32 -panic PC=xxx =========== fixedbugs/bug148.go 2 3 panic: interface conversion: interface is main.T, not main.T -panic PC=xxx == bugs/ -=========== bugs/bug260.go -FAIL -BUG: bug260 failed +=========== bugs/bug322.go +bugs/bug322.dir/main.go:19: implicit assignment of unexported field 'x' of lib.T in method receiver +bugs/bug322.dir/main.go:22: implicit assignment of unexported field 'x' of lib.T in assignment +bugs/bug322.dir/main.go:31: implicit assignment of unexported field 'x' of lib.T in method receiver +BUG: fails incorrectly + +=========== bugs/bug324.go +BUG: errchk: command succeeded unexpectedly diff --git a/gcc/testsuite/go.test/test/hashmap.go b/gcc/testsuite/go.test/test/hashmap.go index 096ece0a530..0a4d7ab61ee 100755 --- a/gcc/testsuite/go.test/test/hashmap.go +++ b/gcc/testsuite/go.test/test/hashmap.go @@ -21,7 +21,7 @@ func ASSERT(p bool) { type KeyType interface { Hash() uint32 - Match(other *KeyType) bool + Match(other KeyType) bool } @@ -31,8 +31,8 @@ type ValueType interface { type Entry struct { - key *KeyType - value *ValueType + key KeyType + value ValueType } @@ -68,7 +68,7 @@ func (m *HashMap) Initialize (initial_log2_capacity uint32) { } -func (m *HashMap) Probe (key *KeyType) *Entry { +func (m *HashMap) Probe (key KeyType) *Entry { ASSERT(key != nil) var i uint32 = key.Hash() % m.capacity() @@ -86,7 +86,7 @@ func (m *HashMap) Probe (key *KeyType) *Entry { } -func (m *HashMap) Lookup (key *KeyType, insert bool) *Entry { +func (m *HashMap) Lookup (key KeyType, insert bool) *Entry { // Find a matching entry. var p *Entry = m.Probe(key) if p.key != nil { @@ -145,7 +145,7 @@ func (n *Number) Hash() uint32 { } -func (n *Number) Match(other *KeyType) bool { +func (n *Number) Match(other KeyType) bool { // var y *Number = other // return n.x == y.x return false diff --git a/gcc/testsuite/go.test/test/if.go b/gcc/testsuite/go.test/test/if.go index db1fe8b7907..c1bb69d277f 100644 --- a/gcc/testsuite/go.test/test/if.go +++ b/gcc/testsuite/go.test/test/if.go @@ -45,18 +45,6 @@ func main() { assertequal(count, 0, "if false one") count = 0 - if { - count = count + 1 - } - assertequal(count, 1, "if empty") - - count = 0 - if one := 1; true { - count = count + one - } - assertequal(count, 1, "if empty one") - - count = 0 if i5 < i7 { count = count + 1 } diff --git a/gcc/testsuite/go.test/test/if1.go b/gcc/testsuite/go.test/test/if1.go deleted file mode 100644 index 061c36411ed..00000000000 --- a/gcc/testsuite/go.test/test/if1.go +++ /dev/null @@ -1,20 +0,0 @@ -// $G $F.go && $L $F.$A && ./$A.out - -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import "os" - -func main() { - count := 7 - if one := 1; { - count = count + one - } - if count != 8 { - print(count, " should be 8\n") - os.Exit(1) - } -} diff --git a/gcc/testsuite/go.test/test/index.go b/gcc/testsuite/go.test/test/index.go index a91294cffbb..38aa33dd305 100644 --- a/gcc/testsuite/go.test/test/index.go +++ b/gcc/testsuite/go.test/test/index.go @@ -1,8 +1,8 @@ // $G $D/$F.go && $L $F.$A && -// ./$A.out -pass 0 >tmp.go && $G tmp.go && $L -o tmp1.$A tmp.$A && ./tmp1.$A && +// ./$A.out -pass 0 >tmp.go && $G tmp.go && $L -o $A.out1 tmp.$A && ./$A.out1 && // ./$A.out -pass 1 >tmp.go && errchk $G -e tmp.go && // ./$A.out -pass 2 >tmp.go && errchk $G -e tmp.go -// rm -f tmp.go +// rm -f tmp.go $A.out1 // Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style diff --git a/gcc/testsuite/go.test/test/init.go b/gcc/testsuite/go.test/test/init.go new file mode 100644 index 00000000000..74c2d5c2614 --- /dev/null +++ b/gcc/testsuite/go.test/test/init.go @@ -0,0 +1,18 @@ +// errchk $G -e $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import "runtime" + +func init() { +} + +func main() { + init() // ERROR "undefined.*init" + runtime.init() // ERROR "unexported.*runtime\.init" + var _ = init // ERROR "undefined.*init" +} diff --git a/gcc/testsuite/go.test/test/interface/embed.go b/gcc/testsuite/go.test/test/interface/embed.go index 4a702398c67..2fddee1905a 100644 --- a/gcc/testsuite/go.test/test/interface/embed.go +++ b/gcc/testsuite/go.test/test/interface/embed.go @@ -4,7 +4,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Check methods derived from embedded interface and *interface values. +// Check methods derived from embedded interface values. package main @@ -19,18 +19,12 @@ func (t T) M() int64 { return int64(t) } var t = T(Value) var pt = &t var ti Inter = t -var pti = &ti type S struct { Inter } var s = S{ ti } var ps = &s -type SP struct { *Inter } -var sp = SP{ &ti } -var psp = &sp - var i Inter -var pi = &i var ok = true @@ -45,35 +39,20 @@ func main() { check("t.M()", t.M()) check("pt.M()", pt.M()) check("ti.M()", ti.M()) - check("pti.M()", pti.M()) check("s.M()", s.M()) check("ps.M()", ps.M()) - check("sp.M()", sp.M()) - check("psp.M()", psp.M()) i = t check("i = t; i.M()", i.M()) - check("i = t; pi.M()", pi.M()) i = pt check("i = pt; i.M()", i.M()) - check("i = pt; pi.M()", pi.M()) i = s check("i = s; i.M()", i.M()) - check("i = s; pi.M()", pi.M()) i = ps check("i = ps; i.M()", i.M()) - check("i = ps; pi.M()", pi.M()) - - i = sp - check("i = sp; i.M()", i.M()) - check("i = sp; pi.M()", pi.M()) - - i = psp - check("i = psp; i.M()", i.M()) - check("i = psp; pi.M()", pi.M()) if !ok { println("BUG: interface10") diff --git a/gcc/testsuite/go.test/test/interface/embed2.go b/gcc/testsuite/go.test/test/interface/embed2.go new file mode 100644 index 00000000000..c18a1fecec2 --- /dev/null +++ b/gcc/testsuite/go.test/test/interface/embed2.go @@ -0,0 +1,70 @@ +// errchk $G -e $D/$F.go + +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Check methods derived from embedded interface and *interface values. + +package main + +import "os" + +const Value = 1e12 + +type Inter interface { M() int64 } + +type T int64 +func (t T) M() int64 { return int64(t) } +var t = T(Value) +var pt = &t +var ti Inter = t +var pti = &ti + +type S struct { Inter } +var s = S{ ti } +var ps = &s + +type SP struct { *Inter } // ERROR "interface" + +var i Inter +var pi = &i + +var ok = true + +func check(s string, v int64) { + if v != Value { + println(s, v) + ok = false + } +} + +func main() { + check("t.M()", t.M()) + check("pt.M()", pt.M()) + check("ti.M()", ti.M()) + check("pti.M()", pti.M()) // ERROR "method" + check("s.M()", s.M()) + check("ps.M()", ps.M()) + + i = t + check("i = t; i.M()", i.M()) + check("i = t; pi.M()", pi.M()) // ERROR "method" + + i = pt + check("i = pt; i.M()", i.M()) + check("i = pt; pi.M()", pi.M()) // ERROR "method" + + i = s + check("i = s; i.M()", i.M()) + check("i = s; pi.M()", pi.M()) // ERROR "method" + + i = ps + check("i = ps; i.M()", i.M()) + check("i = ps; pi.M()", pi.M()) // ERROR "method" + + if !ok { + println("BUG: interface10") + os.Exit(1) + } +} diff --git a/gcc/testsuite/go.test/test/ken/convert.go b/gcc/testsuite/go.test/test/ken/convert.go new file mode 100644 index 00000000000..3780ec886a4 --- /dev/null +++ b/gcc/testsuite/go.test/test/ken/convert.go @@ -0,0 +1,431 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// near-exhaustive test of converting numbers between types. + +package main + +var i8 int8; +var u8 uint8; +var i16 int16; +var u16 uint16; +var i32 int32; +var u32 uint32; +var i64 int64; +var u64 uint64; +var f32 float32; +var f64 float64; + +type big float64 + +type t struct { + from, to int + val big +} + +const ( + ti8 = iota+1 + tu8 + ti16 + tu16 + ti32 + tu32 + ti64 + tu64 + tf32 + tf64 +) + +var x = []t{ + + /* value good in all types (10) */ + { ti8, ti8, 10 }, { ti8, tu8, 10 }, { ti8, ti16, 10 }, { ti8, tu16, 10 }, + { ti8, ti32, 10 }, { ti8, tu32, 10 }, { ti8, ti64, 10 }, { ti8, tu64, 10 }, + { ti8, tf32, 10 }, { ti8, tf64, 10 }, + + { tu8, ti8, 10 }, { tu8, tu8, 10 }, { tu8, ti16, 10 }, { tu8, tu16, 10 }, + { tu8, ti32, 10 }, { tu8, tu32, 10 }, { tu8, ti64, 10 }, { tu8, tu64, 10 }, + { tu8, tf32, 10 }, { tu8, tf64, 10 }, + + { ti16, ti8, 10 }, { ti16, tu8, 10 }, { ti16, ti16, 10 }, { ti16, tu16, 10 }, + { ti16, ti32, 10 }, { ti16, tu32, 10 }, { ti16, ti64, 10 }, { ti16, tu64, 10 }, + { ti16, tf32, 10 }, { ti16, tf64, 10 }, + + { tu16, ti8, 10 }, { tu16, tu8, 10 }, { tu16, ti16, 10 }, { tu16, tu16, 10 }, + { tu16, ti32, 10 }, { tu16, tu32, 10 }, { tu16, ti64, 10 }, { tu16, tu64, 10 }, + { tu16, tf32, 10 }, { tu16, tf64, 10 }, + + { ti32, ti8, 10 }, { ti32, tu8, 10 }, { ti32, ti16, 10 }, { ti32, tu16, 10 }, + { ti32, ti32, 10 }, { ti32, tu32, 10 }, { ti32, ti64, 10 }, { ti32, tu64, 10 }, + { ti32, tf32, 10 }, { ti32, tf64, 10 }, + + { tu32, ti8, 10 }, { tu32, tu8, 10 }, { tu32, ti16, 10 }, { tu32, tu16, 10 }, + { tu32, ti32, 10 }, { tu32, tu32, 10 }, { tu32, ti64, 10 }, { tu32, tu64, 10 }, + { tu32, tf32, 10 }, { tu32, tf64, 10 }, + + { ti64, ti8, 10 }, { ti64, tu8, 10 }, { ti64, ti16, 10 }, { ti64, tu16, 10 }, + { ti64, ti32, 10 }, { ti64, tu32, 10 }, { ti64, ti64, 10 }, { ti64, tu64, 10 }, + { ti64, tf32, 10 }, { ti64, tf64, 10 }, + + { tu64, ti8, 10 }, { tu64, tu8, 10 }, { tu64, ti16, 10 }, { tu64, tu16, 10 }, + { tu64, ti32, 10 }, { tu64, tu32, 10 }, { tu64, ti64, 10 }, { tu64, tu64, 10 }, + { tu64, tf32, 10 }, { tu64, tf64, 10 }, + + { tf32, ti8, 10 }, { tf32, tu8, 10 }, { tf32, ti16, 10 }, { tf32, tu16, 10 }, + { tf32, ti32, 10 }, { tf32, tu32, 10 }, { tf32, ti64, 10 }, { tf32, tu64, 10 }, + { tf32, tf32, 10 }, { tf32, tf64, 10 }, + + { tf64, ti8, 10 }, { tf64, tu8, 10 }, { tf64, ti16, 10 }, { tf64, tu16, 10 }, + { tf64, ti32, 10 }, { tf64, tu32, 10 }, { tf64, ti64, 10 }, { tf64, tu64, 10 }, + { tf64, tf32, 10 }, { tf64, tf64, 10 }, + + /* value good in all signed types (-4) */ + { ti8, ti8, -4 }, { ti8, ti16, -4 }, + { ti8, ti32, -4 }, { ti8, ti64, -4 }, + { ti8, tf32, -4 }, { ti8, tf64, -4 }, + + { ti16, ti8, -4 }, { ti16, ti16, -4 }, + { ti16, ti32, -4 }, { ti16, ti64, -4 }, + { ti16, tf32, -4 }, + + { ti32, ti8, -4 }, { ti32, ti16, -4 }, + { ti32, ti32, -4 }, { ti32, ti64, -4 }, + { ti32, tf32, -4 }, { ti32, tf64, -4 }, + + { ti64, ti8, -4 }, { ti64, ti16, -4 }, + { ti64, ti32, -4 }, { ti64, ti64, -4 }, + { ti64, tf32, -4 }, + + { tf32, ti8, -4 }, { tf32, ti16, -4 }, + { tf32, ti32, -4 }, { tf32, ti64, -4 }, + { tf32, tf32, -4 }, + + { tf64, ti8, -4 }, { tf64, ti16, -4 }, + { tf64, ti32, -4 }, { tf64, ti64, -4 }, + { tf64, tf32, -4 }, { tf64, tf64, -4 }, + + /* value good in u8 and up (175) */ + { tu8, tu8, 175 }, { tu8, ti16, 175 }, { tu8, tu16, 175 }, + { tu8, ti32, 175 }, { tu8, tu32, 175 }, { tu8, ti64, 175 }, { tu8, tu64, 175 }, + { tu8, tf32, 175 }, { tu8, tf64, 175 }, + + { ti16, tu8, 175 }, { ti16, ti16, 175 }, { ti16, tu16, 175 }, + { ti16, ti32, 175 }, { ti16, tu32, 175 }, { ti16, ti64, 175 }, { ti16, tu64, 175 }, + { ti16, tf32, 175 }, { ti16, tf64, 175 }, + + { tu16, tu8, 175 }, { tu16, ti16, 175 }, { tu16, tu16, 175 }, + { tu16, ti32, 175 }, { tu16, tu32, 175 }, { tu16, ti64, 175 }, { tu16, tu64, 175 }, + { tu16, tf32, 175 }, { tu16, tf64, 175 }, + + { ti32, tu8, 175 }, { ti32, ti16, 175 }, { ti32, tu16, 175 }, + { ti32, ti32, 175 }, { ti32, tu32, 175 }, { ti32, ti64, 175 }, { ti32, tu64, 175 }, + { ti32, tf32, 175 }, { ti32, tf64, 175 }, + + { tu32, tu8, 175 }, { tu32, ti16, 175 }, { tu32, tu16, 175 }, + { tu32, ti32, 175 }, { tu32, tu32, 175 }, { tu32, ti64, 175 }, { tu32, tu64, 175 }, + { tu32, tf32, 175 }, { tu32, tf64, 175 }, + + { ti64, tu8, 175 }, { ti64, ti16, 175 }, { ti64, tu16, 175 }, + { ti64, ti32, 175 }, { ti64, tu32, 175 }, { ti64, ti64, 175 }, { ti64, tu64, 175 }, + { ti64, tf32, 175 }, { ti64, tf64, 175 }, + + { tu64, tu8, 175 }, { tu64, ti16, 175 }, { tu64, tu16, 175 }, + { tu64, ti32, 175 }, { tu64, tu32, 175 }, { tu64, ti64, 175 }, { tu64, tu64, 175 }, + { tu64, tf32, 175 }, { tu64, tf64, 175 }, + + { tf32, tu8, 175 }, { tf32, ti16, 175 }, { tf32, tu16, 175 }, + { tf32, ti32, 175 }, { tf32, tu32, 175 }, { tf32, ti64, 175 }, { tf32, tu64, 175 }, + { tf32, tf32, 175 }, { tf32, tf64, 175 }, + + { tf64, tu8, 175 }, { tf64, ti16, 175 }, { tf64, tu16, 175 }, + { tf64, ti32, 175 }, { tf64, tu32, 175 }, { tf64, ti64, 175 }, { tf64, tu64, 175 }, + { tf64, tf32, 175 }, { tf64, tf64, 175 }, + + /* value good in u16 and up (41259) */ + { tu16, tu16, 41259 }, + { tu16, ti32, 41259 }, { tu16, ti64, 41259 }, { tu16, tu64, 41259 }, + { tu16, tf32, 41259 }, { tu16, tf64, 41259 }, + + { ti32, tu16, 41259 }, + { ti32, ti32, 41259 }, { ti32, tu32, 41259 }, { ti32, ti64, 41259 }, { ti32, tu64, 41259 }, + { ti32, tf32, 41259 }, { ti32, tf64, 41259 }, + + { tu32, tu16, 41259 }, + { tu32, ti32, 41259 }, { tu32, tu32, 41259 }, { tu32, ti64, 41259 }, { tu32, tu64, 41259 }, + { tu32, tf32, 41259 }, { tu32, tf64, 41259 }, + + { ti64, tu16, 41259 }, + { ti64, ti32, 41259 }, { ti64, tu32, 41259 }, { ti64, ti64, 41259 }, { ti64, tu64, 41259 }, + { ti64, tf32, 41259 }, { ti64, tf64, 41259 }, + + { tu64, tu16, 41259 }, + { tu64, ti32, 41259 }, { tu64, tu32, 41259 }, { tu64, ti64, 41259 }, { tu64, tu64, 41259 }, + { tu64, tf32, 41259 }, { tu64, tf64, 41259 }, + + { tf32, tu16, 41259 }, + { tf32, ti32, 41259 }, { tf32, tu32, 41259 }, { tf32, ti64, 41259 }, { tf32, tu64, 41259 }, + { tf32, tf32, 41259 }, { tf32, tf64, 41259 }, + + { tf64, tu16, 41259 }, + { tf64, ti32, 41259 }, { tf64, tu32, 41259 }, { tf64, ti64, 41259 }, { tf64, tu64, 41259 }, + { tf64, tf32, 41259 }, { tf64, tf64, 41259 }, + + /* value good in u32 and up (3758096384) */ + { tu32, tu32, 3758096384 }, { tu32, ti64, 3758096384 }, { tu32, tu64, 3758096384 }, + { tu32, tf32, 3758096384 }, { tu32, tf64, 3758096384 }, + + { ti64, tu32, 3758096384 }, { ti64, ti64, 3758096384 }, { ti64, tu64, 3758096384 }, + { ti64, tf32, 3758096384 }, { ti64, tf64, 3758096384 }, + + { tu64, tu32, 3758096384 }, { tu64, ti64, 3758096384 }, { tu64, tu64, 3758096384 }, + { tu64, tf32, 3758096384 }, { tu64, tf64, 3758096384 }, + + { tf32, tu32, 3758096384 }, { tf32, ti64, 3758096384 }, { tf32, tu64, 3758096384 }, + { tf32, tf32, 3758096384 }, { tf32, tf64, 3758096384 }, + + { tf64, tu32, 3758096384 }, { tf64, ti64, 3758096384 }, { tf64, tu64, 3758096384 }, + { tf64, tf32, 3758096384 }, { tf64, tf64, 3758096384 }, + + /* value good in u64 and up (16717361816799281152) */ + { tu64, tu64, 16717361816799281152 }, + { tu64, tf32, 16717361816799281152 }, { tu64, tf64, 16717361816799281152 }, + + { tf32, tu64, 16717361816799281152 }, + { tf32, tf32, 16717361816799281152 }, { tf32, tf64, 16717361816799281152 }, + + { tf64, tu64, 16717361816799281152 }, + { tf64, tf32, 16717361816799281152 }, { tf64, tf64, 16717361816799281152 }, +} + +func main() { + for i:=0; i<len(x); i++ { + v := x[i].val // input value + w := big(0) // output value + f := x[i].from // input type + t := x[i].to // output type + + i8 = 0; u8 = 0; i16 = 0; u16 = 0 + i32 = 0; u32 = 0; i64 = 0; u64 = 0 + f32 = 0; f64 = 0 + + switch f*100 + t { + default: + println("missing case", i, v, f, t) + w = v + + case ti8*100 + ti8: + i8 = int8(v); i8 = int8(i8); w = big(i8) + case ti8*100 + tu8: + i8 = int8(v); u8 = uint8(i8); w = big(u8) + case ti8*100 + ti16: + i8 = int8(v); i16 = int16(i8); w = big(i16) + case ti8*100 + tu16: + i8 = int8(v); u16 = uint16(i8); w = big(u16) + case ti8*100 + ti32: + i8 = int8(v); i32 = int32(i8); w = big(i32) + case ti8*100 + tu32: + i8 = int8(v); u32 = uint32(i8); w = big(u32) + case ti8*100 + ti64: + i8 = int8(v); i64 = int64(i8); w = big(i64) + case ti8*100 + tu64: + i8 = int8(v); u64 = uint64(i8); w = big(u64) + case ti8*100 + tf32: + i8 = int8(v); f32 = float32(i8); w = big(f32) + case ti8*100 + tf64: + i8 = int8(v); f64 = float64(i8); w = big(f64) + + case tu8*100 + ti8: + u8 = uint8(v); i8 = int8(u8); w = big(i8) + case tu8*100 + tu8: + u8 = uint8(v); u8 = uint8(u8); w = big(u8) + case tu8*100 + ti16: + u8 = uint8(v); i16 = int16(u8); w = big(i16) + case tu8*100 + tu16: + u8 = uint8(v); u16 = uint16(u8); w = big(u16) + case tu8*100 + ti32: + u8 = uint8(v); i32 = int32(u8); w = big(i32) + case tu8*100 + tu32: + u8 = uint8(v); u32 = uint32(u8); w = big(u32) + case tu8*100 + ti64: + u8 = uint8(v); i64 = int64(u8); w = big(i64) + case tu8*100 + tu64: + u8 = uint8(v); u64 = uint64(u8); w = big(u64) + case tu8*100 + tf32: + u8 = uint8(v); f32 = float32(u8); w = big(f32) + case tu8*100 + tf64: + u8 = uint8(v); f64 = float64(u8); w = big(f64) + + case ti16*100 + ti8: + i16 = int16(v); i8 = int8(i16); w = big(i8) + case ti16*100 + tu8: + i16 = int16(v); u8 = uint8(i16); w = big(u8) + case ti16*100 + ti16: + i16 = int16(v); i16 = int16(i16); w = big(i16) + case ti16*100 + tu16: + i16 = int16(v); u16 = uint16(i16); w = big(u16) + case ti16*100 + ti32: + i16 = int16(v); i32 = int32(i16); w = big(i32) + case ti16*100 + tu32: + i16 = int16(v); u32 = uint32(i16); w = big(u32) + case ti16*100 + ti64: + i16 = int16(v); i64 = int64(i16); w = big(i64) + case ti16*100 + tu64: + i16 = int16(v); u64 = uint64(i16); w = big(u64) + case ti16*100 + tf32: + i16 = int16(v); f32 = float32(i16); w = big(f32) + case ti16*100 + tf64: + i16 = int16(v); f64 = float64(i16); w = big(f64) + + case tu16*100 + ti8: + u16 = uint16(v); i8 = int8(u16); w = big(i8) + case tu16*100 + tu8: + u16 = uint16(v); u8 = uint8(u16); w = big(u8) + case tu16*100 + ti16: + u16 = uint16(v); i16 = int16(u16); w = big(i16) + case tu16*100 + tu16: + u16 = uint16(v); u16 = uint16(u16); w = big(u16) + case tu16*100 + ti32: + u16 = uint16(v); i32 = int32(u16); w = big(i32) + case tu16*100 + tu32: + u16 = uint16(v); u32 = uint32(u16); w = big(u32) + case tu16*100 + ti64: + u16 = uint16(v); i64 = int64(u16); w = big(i64) + case tu16*100 + tu64: + u16 = uint16(v); u64 = uint64(u16); w = big(u64) + case tu16*100 + tf32: + u16 = uint16(v); f32 = float32(u16); w = big(f32) + case tu16*100 + tf64: + u16 = uint16(v); f64 = float64(u16); w = big(f64) + + case ti32*100 + ti8: + i32 = int32(v); i8 = int8(i32); w = big(i8) + case ti32*100 + tu8: + i32 = int32(v); u8 = uint8(i32); w = big(u8) + case ti32*100 + ti16: + i32 = int32(v); i16 = int16(i32); w = big(i16) + case ti32*100 + tu16: + i32 = int32(v); u16 = uint16(i32); w = big(u16) + case ti32*100 + ti32: + i32 = int32(v); i32 = int32(i32); w = big(i32) + case ti32*100 + tu32: + i32 = int32(v); u32 = uint32(i32); w = big(u32) + case ti32*100 + ti64: + i32 = int32(v); i64 = int64(i32); w = big(i64) + case ti32*100 + tu64: + i32 = int32(v); u64 = uint64(i32); w = big(u64) + case ti32*100 + tf32: + i32 = int32(v); f32 = float32(i32); w = big(f32) + case ti32*100 + tf64: + i32 = int32(v); f64 = float64(i32); w = big(f64) + + case tu32*100 + ti8: + u32 = uint32(v); i8 = int8(u32); w = big(i8) + case tu32*100 + tu8: + u32 = uint32(v); u8 = uint8(u32); w = big(u8) + case tu32*100 + ti16: + u32 = uint32(v); i16 = int16(u32); w = big(i16) + case tu32*100 + tu16: + u32 = uint32(v); u16 = uint16(u32); w = big(u16) + case tu32*100 + ti32: + u32 = uint32(v); i32 = int32(u32); w = big(i32) + case tu32*100 + tu32: + u32 = uint32(v); u32 = uint32(u32); w = big(u32) + case tu32*100 + ti64: + u32 = uint32(v); i64 = int64(u32); w = big(i64) + case tu32*100 + tu64: + u32 = uint32(v); u64 = uint64(u32); w = big(u64) + case tu32*100 + tf32: + u32 = uint32(v); f32 = float32(u32); w = big(f32) + case tu32*100 + tf64: + u32 = uint32(v); f64 = float64(u32); w = big(f64) + + case ti64*100 + ti8: + i64 = int64(v); i8 = int8(i64); w = big(i8) + case ti64*100 + tu8: + i64 = int64(v); u8 = uint8(i64); w = big(u8) + case ti64*100 + ti16: + i64 = int64(v); i16 = int16(i64); w = big(i16) + case ti64*100 + tu16: + i64 = int64(v); u16 = uint16(i64); w = big(u16) + case ti64*100 + ti32: + i64 = int64(v); i32 = int32(i64); w = big(i32) + case ti64*100 + tu32: + i64 = int64(v); u32 = uint32(i64); w = big(u32) + case ti64*100 + ti64: + i64 = int64(v); i64 = int64(i64); w = big(i64) + case ti64*100 + tu64: + i64 = int64(v); u64 = uint64(i64); w = big(u64) + case ti64*100 + tf32: + i64 = int64(v); f32 = float32(i64); w = big(f32) + case ti64*100 + tf64: + i64 = int64(v); f64 = float64(i64); w = big(f64) + + case tu64*100 + ti8: + u64 = uint64(v); i8 = int8(u64); w = big(i8) + case tu64*100 + tu8: + u64 = uint64(v); u8 = uint8(u64); w = big(u8) + case tu64*100 + ti16: + u64 = uint64(v); i16 = int16(u64); w = big(i16) + case tu64*100 + tu16: + u64 = uint64(v); u16 = uint16(u64); w = big(u16) + case tu64*100 + ti32: + u64 = uint64(v); i32 = int32(u64); w = big(i32) + case tu64*100 + tu32: + u64 = uint64(v); u32 = uint32(u64); w = big(u32) + case tu64*100 + ti64: + u64 = uint64(v); i64 = int64(u64); w = big(i64) + case tu64*100 + tu64: + u64 = uint64(v); u64 = uint64(u64); w = big(u64) + case tu64*100 + tf32: + u64 = uint64(v); f32 = float32(u64); w = big(f32) + case tu64*100 + tf64: + u64 = uint64(v); f64 = float64(u64); w = big(f64) + + case tf32*100 + ti8: + f32 = float32(v); i8 = int8(f32); w = big(i8) + case tf32*100 + tu8: + f32 = float32(v); u8 = uint8(f32); w = big(u8) + case tf32*100 + ti16: + f32 = float32(v); i16 = int16(f32); w = big(i16) + case tf32*100 + tu16: + f32 = float32(v); u16 = uint16(f32); w = big(u16) + case tf32*100 + ti32: + f32 = float32(v); i32 = int32(f32); w = big(i32) + case tf32*100 + tu32: + f32 = float32(v); u32 = uint32(f32); w = big(u32) + case tf32*100 + ti64: + f32 = float32(v); i64 = int64(f32); w = big(i64) + case tf32*100 + tu64: + f32 = float32(v); u64 = uint64(f32); w = big(u64) + case tf32*100 + tf32: + f32 = float32(v); f32 = float32(f32); w = big(f32) + case tf32*100 + tf64: + f32 = float32(v); f64 = float64(f32); w = big(f64) + + case tf64*100 + ti8: + f64 = float64(v); i8 = int8(f64); w = big(i8) + case tf64*100 + tu8: + f64 = float64(v); u8 = uint8(f64); w = big(u8) + case tf64*100 + ti16: + f64 = float64(v); i16 = int16(f64); w = big(i16) + case tf64*100 + tu16: + f64 = float64(v); u16 = uint16(f64); w = big(u16) + case tf64*100 + ti32: + f64 = float64(v); i32 = int32(f64); w = big(i32) + case tf64*100 + tu32: + f64 = float64(v); u32 = uint32(f64); w = big(u32) + case tf64*100 + ti64: + f64 = float64(v); i64 = int64(f64); w = big(i64) + case tf64*100 + tu64: + f64 = float64(v); u64 = uint64(f64); w = big(u64) + case tf64*100 + tf32: + f64 = float64(v); f32 = float32(f64); w = big(f32) + case tf64*100 + tf64: + f64 = float64(v); f64 = float64(f64); w = big(f64) + } + if v != w { println(i, v, w, f, t) } + } +} diff --git a/gcc/testsuite/go.test/test/ken/cplx2.go b/gcc/testsuite/go.test/test/ken/cplx2.go index 5a66dc9a954..b36e93ecd66 100644 --- a/gcc/testsuite/go.test/test/ken/cplx2.go +++ b/gcc/testsuite/go.test/test/ken/cplx2.go @@ -28,13 +28,13 @@ const ( func main() { - r := 5 + 0i + var r complex64 = 5 + 0i if r != R { println("opcode 1", r, R) panic("fail") } - i := 6i + var i complex64 = 6i if i != I { println("opcode 2", i, I) panic("fail") diff --git a/gcc/testsuite/go.test/test/ken/robif.go b/gcc/testsuite/go.test/test/ken/robif.go deleted file mode 100644 index b6fe4e4330b..00000000000 --- a/gcc/testsuite/go.test/test/ken/robif.go +++ /dev/null @@ -1,97 +0,0 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -func assertequal(is, shouldbe int, msg string) { - if is != shouldbe { - print("assertion fail" + msg + "\n"); - panic(1); - } -} - -func main() { - i5 := 5; - i7 := 7; - - var count int; - - count = 0; - if true { - count = count + 1; - } - assertequal(count, 1, "if true"); - - count = 0; - if false { - count = count + 1; - } - assertequal(count, 0, "if false"); - - count = 0; - if one := 1; true { - count = count + one; - } - assertequal(count, 1, "if true one"); - - count = 0; - if one := 1; false { - _ = one; - count = count + 1; - } - assertequal(count, 0, "if false one"); - - count = 0; - if { - count = count + 1; - } - assertequal(count, 1, "if empty"); - - count = 0; - if one := 1; { - count = count + one; - } - assertequal(count, 1, "if empty one"); - - count = 0; - if i5 < i7 { - count = count + 1; - } - assertequal(count, 1, "if cond"); - - count = 0; - if true { - count = count + 1; - } else - count = count - 1; - assertequal(count, 1, "if else true"); - - count = 0; - if false { - count = count + 1; - } else - count = count - 1; - assertequal(count, -1, "if else false"); - - count = 0; - if t:=1; false { - count = count + 1; - t := 7; - _ = t; - } else - count = count - t; - assertequal(count, -1, "if else false var"); - - count = 0; - t := 1; - if false { - count = count + 1; - t := 7; - _ = t; - } else - count = count - t; - assertequal(count, -1, "if else false var outside"); -} diff --git a/gcc/testsuite/go.test/test/label.go b/gcc/testsuite/go.test/test/label.go new file mode 100644 index 00000000000..e3d853266e1 --- /dev/null +++ b/gcc/testsuite/go.test/test/label.go @@ -0,0 +1,60 @@ +// errchk $G -e $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Pass 1 label errors. + +package main + +var x int + +func f() { +L1: // ERROR "label .*L1.* defined and not used" + for { + } +L2: // ERROR "label .*L2.* defined and not used" + select { + } +L3: // ERROR "label .*L3.* defined and not used" + switch { + } +L4: // ERROR "label .*L4.* defined and not used" + if true { + } +L5: // ERROR "label .*L5.* defined and not used" + f() +L6: // GCCGO_ERROR "previous" + f() +L6: // ERROR "label .*L6.* already defined" + f() + if x == 20 { + goto L6 + } + +L7: + for { + break L7 + } + +L8: + for { + if x == 21 { + continue L8 + } + } + +L9: + switch { + case true: + break L9 + defalt: // ERROR "label .*defalt.* defined and not used" + } + +L10: + select { + default: + break L10 + } +} diff --git a/gcc/testsuite/go.test/test/label1.go b/gcc/testsuite/go.test/test/label1.go new file mode 100644 index 00000000000..656daaeea54 --- /dev/null +++ b/gcc/testsuite/go.test/test/label1.go @@ -0,0 +1,85 @@ +// errchk $G -e $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Pass 2 label errors. + +package main + +var x int + +func f() { +L1: + for { + if x == 0 { + break L1 + } + if x == 1 { + continue L1 + } + goto L1 + } + +L2: + select { + default: + if x == 0 { + break L2 + } + if x == 1 { + continue L2 // ERROR "invalid continue label .*L2" + } + goto L2 + } + +L3: + switch { + case x > 10: + if x == 11 { + break L3 + } + if x == 12 { + continue L3 // ERROR "invalid continue label .*L3" + } + goto L3 + } + +L4: + if true { + if x == 13 { + break L4 // ERROR "invalid break label .*L4" + } + if x == 14 { + continue L4 // ERROR "invalid continue label .*L4" + } + if x == 15 { + goto L4 + } + } + +L5: + f() + if x == 16 { + break L5 // ERROR "invalid break label .*L5" + } + if x == 17 { + continue L5 // ERROR "invalid continue label .*L5" + } + if x == 18 { + goto L5 + } + + for { + if x == 19 { + break L1 // ERROR "invalid break label .*L1" + } + if x == 20 { + continue L1 // ERROR "invalid continue label .*L1" + } + if x == 21 { + goto L1 + } + } +} diff --git a/gcc/testsuite/go.test/test/method.go b/gcc/testsuite/go.test/test/method.go index c751c1f1b52..b5a02c6873e 100644 --- a/gcc/testsuite/go.test/test/method.go +++ b/gcc/testsuite/go.test/test/method.go @@ -19,7 +19,7 @@ func (s S) val() int { return 1 } func (s *S1) val() int { return 2 } func (i I) val() int { return 3 } func (i *I1) val() int { return 4 } -//func (t T) val() int { return 7 } +func (t T) val() int { return 7 } func (t *T1) val() int { return 8 } type Val interface { @@ -34,6 +34,8 @@ func main() { var i I var pi *I1 var pt *T1 + var t T + var v Val if s.val() != 1 { println("s.val:", s.val()) @@ -75,7 +77,10 @@ func main() { println("(*I1).val(pi):", (*I1).val(pi)) panic("fail") } - // if t.val() != 7 { prinln("t.val:", t.val()); panic("fail") } + if t.val() != 7 { + println("t.val:", t.val()) + panic("fail") + } if pt.val() != 8 { println("pt.val:", pt.val()) panic("fail") @@ -101,11 +106,22 @@ func main() { println("pi.val:", val(pi)) panic("fail") } - // if val(t) != 7 { println("t.val:", val(t)); panic("fail") } + if val(t) != 7 { + println("t.val:", val(t)) + panic("fail") + } if val(pt) != 8 { println("pt.val:", val(pt)) panic("fail") } - // if Val.val(i) != 3 { println("Val.val(i):", Val.val(i)); panic("fail") } + if Val.val(i) != 3 { + println("Val.val(i):", Val.val(i)) + panic("fail") + } + v = i + if Val.val(v) != 3 { + println("Val.val(v):", Val.val(v)) + panic("fail") + } } diff --git a/gcc/testsuite/go.test/test/method2.go b/gcc/testsuite/go.test/test/method2.go index 3ee0ae1364f..a72536e7b33 100644 --- a/gcc/testsuite/go.test/test/method2.go +++ b/gcc/testsuite/go.test/test/method2.go @@ -6,9 +6,22 @@ package main -type T struct {a int} +type T struct { + a int +} type P *T type P1 *T -func (p P) val() int { return 1 } // ERROR "receiver" -func (p *P1) val() int { return 1 } // ERROR "receiver" +func (p P) val() int { return 1 } // ERROR "receiver" +func (p *P1) val() int { return 1 } // ERROR "receiver" + +type Val interface { + val() int +} + +var _ = (*Val).val // ERROR "method" + +var v Val +var pv = &v + +var _ = pv.val() // ERROR "method" diff --git a/gcc/testsuite/go.test/test/named1.go b/gcc/testsuite/go.test/test/named1.go index 600e502f9e8..7e7aab9c1d8 100644 --- a/gcc/testsuite/go.test/test/named1.go +++ b/gcc/testsuite/go.test/test/named1.go @@ -43,13 +43,6 @@ func main() { _, b = m[2] // ERROR "cannot .* bool.*type Bool" m[2] = 1, b // ERROR "cannot use.*type Bool.*as type bool" - b = c <- 1 // ERROR "cannot use.*type bool.*type Bool" - _ = b - asBool(c <- 1) // ERROR "cannot use.*type bool.*as type Bool" - - _, b = <-c // ERROR "cannot .* bool.*type Bool" - _ = b - var inter interface{} _, b = inter.(Map) // ERROR "cannot .* bool.*type Bool" _ = b @@ -60,8 +53,9 @@ func main() { _, b = minter.(Map) // ERROR "cannot .* bool.*type Bool" _ = b - asBool(closed(c)) // ERROR "cannot use.*type bool.*as type Bool" - b = closed(c) // ERROR "cannot use.*type bool.*type Bool" + _, bb := <-c + asBool(bb) // ERROR "cannot use.*type bool.*as type Bool" + _, b = <-c // ERROR "cannot .* bool.*type Bool" _ = b asString(String(slice)) // ERROR "cannot .*type Slice.*type String" diff --git a/gcc/testsuite/go.test/test/nilptr/arrayindex.go b/gcc/testsuite/go.test/test/nilptr/arrayindex.go index c564bce3404..fa26532c67b 100644 --- a/gcc/testsuite/go.test/test/nilptr/arrayindex.go +++ b/gcc/testsuite/go.test/test/nilptr/arrayindex.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/arrayindex1.go b/gcc/testsuite/go.test/test/nilptr/arrayindex1.go index 701630ed150..64f46e14d19 100644 --- a/gcc/testsuite/go.test/test/nilptr/arrayindex1.go +++ b/gcc/testsuite/go.test/test/nilptr/arrayindex1.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/arraytoslice.go b/gcc/testsuite/go.test/test/nilptr/arraytoslice.go index 38206d50b8e..03879fb42f7 100644 --- a/gcc/testsuite/go.test/test/nilptr/arraytoslice.go +++ b/gcc/testsuite/go.test/test/nilptr/arraytoslice.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/arraytoslice1.go b/gcc/testsuite/go.test/test/nilptr/arraytoslice1.go index 8c9531e1763..c86070fa473 100644 --- a/gcc/testsuite/go.test/test/nilptr/arraytoslice1.go +++ b/gcc/testsuite/go.test/test/nilptr/arraytoslice1.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/arraytoslice2.go b/gcc/testsuite/go.test/test/nilptr/arraytoslice2.go index 1b2651381ef..68ea44083cb 100644 --- a/gcc/testsuite/go.test/test/nilptr/arraytoslice2.go +++ b/gcc/testsuite/go.test/test/nilptr/arraytoslice2.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/slicearray.go b/gcc/testsuite/go.test/test/nilptr/slicearray.go index 544536cc7ce..26ca4277328 100644 --- a/gcc/testsuite/go.test/test/nilptr/slicearray.go +++ b/gcc/testsuite/go.test/test/nilptr/slicearray.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/structfield.go b/gcc/testsuite/go.test/test/nilptr/structfield.go index e081f7a1718..35196bb68dd 100644 --- a/gcc/testsuite/go.test/test/nilptr/structfield.go +++ b/gcc/testsuite/go.test/test/nilptr/structfield.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/structfield1.go b/gcc/testsuite/go.test/test/nilptr/structfield1.go index 02d33a42c24..7c7abed1aa0 100644 --- a/gcc/testsuite/go.test/test/nilptr/structfield1.go +++ b/gcc/testsuite/go.test/test/nilptr/structfield1.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/structfield2.go b/gcc/testsuite/go.test/test/nilptr/structfield2.go index 4323b42b4db..02a44f17318 100644 --- a/gcc/testsuite/go.test/test/nilptr/structfield2.go +++ b/gcc/testsuite/go.test/test/nilptr/structfield2.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nilptr/structfieldaddr.go b/gcc/testsuite/go.test/test/nilptr/structfieldaddr.go index 81551aa3bad..f3177bafbaa 100644 --- a/gcc/testsuite/go.test/test/nilptr/structfieldaddr.go +++ b/gcc/testsuite/go.test/test/nilptr/structfieldaddr.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # do not bother on NaCl // $G $D/$F.go && $L $F.$A && // ((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail) diff --git a/gcc/testsuite/go.test/test/nul1.go b/gcc/testsuite/go.test/test/nul1.go index 9d6974f818b..9cf51125bcc 100644 --- a/gcc/testsuite/go.test/test/nul1.go +++ b/gcc/testsuite/go.test/test/nul1.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # NaCl runner elides NUL in output // [ "$GORUN" == "" ] || exit 0 # Android runner gets confused by the NUL output // $G $D/$F.go && $L $F.$A && ./$A.out >tmp.go && // errchk $G -e tmp.go diff --git a/gcc/testsuite/go.test/test/recover3.go b/gcc/testsuite/go.test/test/recover3.go index b982ec8fa54..2aa1df616dc 100644 --- a/gcc/testsuite/go.test/test/recover3.go +++ b/gcc/testsuite/go.test/test/recover3.go @@ -1,4 +1,3 @@ -// [ $GOOS != nacl ] || exit 0 # NaCl cannot recover from signals // $G $D/$F.go && $L $F.$A && ./$A.out // Copyright 2010 The Go Authors. All rights reserved. @@ -10,7 +9,6 @@ package main import ( "runtime" "strings" - "syscall" ) var didbug bool @@ -44,7 +42,7 @@ func check(name string, f func(), err string) { return } }() - + f() } @@ -55,11 +53,8 @@ func main() { var q *[10000]int var i int - // not catching divide by zero on the arm. is that even possible? - if syscall.ARCH != "arm" { - check("int-div-zero", func() { println(1/x) }, "integer divide by zero") - check("int64-div-zero", func() { println(1/x64) }, "integer divide by zero") - } + check("int-div-zero", func() { println(1 / x) }, "integer divide by zero") + check("int64-div-zero", func() { println(1 / x64) }, "integer divide by zero") check("nil-deref", func() { println(p[0]) }, "nil pointer dereference") check("nil-deref-1", func() { println(p[1]) }, "nil pointer dereference") @@ -69,11 +64,13 @@ func main() { var sl []int check("array-bounds", func() { println(p[i]) }, "index out of range") check("slice-bounds", func() { println(sl[i]) }, "index out of range") - + var inter interface{} inter = 1 check("type-concrete", func() { println(inter.(string)) }, "int, not string") check("type-interface", func() { println(inter.(m)) }, "missing method m") } -type m interface{ m() } +type m interface { + m() +} diff --git a/gcc/testsuite/go.test/test/run b/gcc/testsuite/go.test/test/run index 4ca77541409..28d0caa0f68 100755 --- a/gcc/testsuite/go.test/test/run +++ b/gcc/testsuite/go.test/test/run @@ -14,7 +14,7 @@ X386) ;; Xarm) export A=5 - export E=${GORUN:-qemu-arm -cpu cortex-a8} + export E="$GORUN" ;; *) echo 1>&2 run: unsupported '$GOARCH' @@ -49,15 +49,25 @@ ulimit -c 0 true >pass.out >times.out +exclude=false # exclude nothing +golden=golden.out + +filterout() { + grep '^'"$2"'$' $1 >/dev/null +} + for dir in . ken chan interface nilptr syntax fixedbugs bugs do echo echo '==' $dir'/' for i in $(ls $dir/*.go 2>/dev/null) - do + do ( + if $exclude $i; then + exit 0 # continues for loop + fi export F=$(basename $i .go) export D=$dir - sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|' >$RUNFILE + sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|g' >$RUNFILE if ! { time -p bash -c "bash $RUNFILE >$TMP1FILE 2>&1" ; } 2>$TMP2FILE then echo @@ -87,7 +97,7 @@ do echo $i >>pass.out fi echo $(awk 'NR==1{print $2}' $TMP2FILE) $D/$F >>times.out - done + ) done done | # clean up some stack noise egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' | sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/ @@ -99,12 +109,13 @@ done | # clean up some stack noise /^Trace\/BPT trap/d /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/ /^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d + /Fault in NaCl untrusted code/d /Segmentation fault/d /^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out -rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A *.a $A.out +rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A *.a $A.out diffmsg="" -if ! diff golden.out run.out +if ! diff $golden run.out then diffmsg="; test output differs" failed=1 diff --git a/gcc/testsuite/go.test/test/run-arm b/gcc/testsuite/go.test/test/run-arm deleted file mode 100755 index a62df10ca4b..00000000000 --- a/gcc/testsuite/go.test/test/run-arm +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh -# Copyright 2009 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -export E="" -case X"$GOARCH" in -Xamd64) - export A=6 - ;; -X386) - export A=8 - ;; -Xarm) - export A=5 - export E="${GORUN:-qemu-arm -cpu cortex-a8}" - ;; -*) - echo 1>&2 run: unsupported '$GOARCH' - exit 1 -esac - -export G=${A}g -export L=${A}l -export GOTRACEBACK=0 - -PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$GOROOT/bin}:`pwd` - -RUNFILE=/tmp/gorun-$$-$USER -TMP1FILE=/tmp/gotest1-$$-$USER -TMP2FILE=/tmp/gotest2-$$-$USER -FAILEDFILE=/tmp/gotest3-$$-$USER - -# don't run the machine out of memory: limit individual processes to 4GB. -# on thresher, 3GB suffices to run the tests; with 2GB, peano fails. -ulimit -v 4000000 - -# no core files please -ulimit -c 0 - -true >times.out - -# TODO(kaib): figure out why the GC makes things so utterly slow. -export GOGC=off -export GOTRACEBACK=0 - -for i in $(cat arm-pass.txt | sed 's/#.*//') -do - export F=$(basename $i .go) - dir=$(dirname $i) - export D=$dir - sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|' >$RUNFILE - if ! { time -p bash -c "bash $RUNFILE >$TMP1FILE 2>&1" ; } 2>$TMP2FILE - then - echo - echo "===========" $i - cat $TMP1FILE - echo >&2 fail: $i - touch $FAILEDFILE - elif test -s $TMP1FILE - then - echo - echo "===========" $i - cat $TMP1FILE - elif [ $dir = "bugs" ] - then - echo $i succeeded with no output. - fi - echo $(awk 'NR==1{print $2}' $TMP2FILE) $D/$F >>times.out -done | # clean up some stack noise - egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' | - sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/ - s!'$RUNFILE'!$RUNFILE!g - s/ PC=0x[0-9a-f]*/ PC=xxx/ - s/^pc: 0x[0-9a-f]*/pc: xxx/ - /^Trace\/breakpoint trap/d - /^Trace\/BPT trap/d - s!'$GOROOT'!$GOROOT!g - /Segmentation fault/d - /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/ - /^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d - /^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out - -failed=0 -rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A $A.out -diffmsg="" -if ! diff -b golden-arm.out run.out -then - diffmsg="; test output differs" - failed=1 -fi - -notinbugs=$(sed '/== bugs/q' run.out | grep -c '^BUG') -inbugs=$(sed '1,/== bugs/d' run.out | grep -c '^BUG') - -echo 2>&1 $inbugs known bugs';' $notinbugs unexpected bugs$diffmsg - -if [ "$failed" != "0" ]; then - echo FAILED -fi - -exit $failed diff --git a/gcc/testsuite/go.test/test/sigchld.go b/gcc/testsuite/go.test/test/sigchld.go index 09188fc53ac..1fb2e21bd56 100644 --- a/gcc/testsuite/go.test/test/sigchld.go +++ b/gcc/testsuite/go.test/test/sigchld.go @@ -1,4 +1,3 @@ -// if [ $GOOS == nacl ]; then echo survived SIGCHLD; exit 0; fi # NaCl has no signals. // $G $D/$F.go && $L $F.$A && ./$A.out // Copyright 2009 The Go Authors. All rights reserved. diff --git a/gcc/testsuite/go.test/test/stack.go b/gcc/testsuite/go.test/test/stack.go index 816b555a4c8..1fd57161ff2 100644 --- a/gcc/testsuite/go.test/test/stack.go +++ b/gcc/testsuite/go.test/test/stack.go @@ -30,6 +30,32 @@ func d(t T) { } } +func f0() { + // likely to make a new stack for f0, + // because the call to f1 puts 3000 bytes + // in our frame. + f1() +} + +func f1() [3000]byte { + // likely to make a new stack for f1, + // because 3000 bytes were used by f0 + // and we need 3000 more for the call + // to f2. if the call to morestack in f1 + // does not pass the frame size, the new + // stack (default size 5k) will not be big + // enough for the frame, and the morestack + // check in f2 will die, if we get that far + // without faulting. + f2() + return [3000]byte{} +} + +func f2() [3000]byte { + // just take up space + return [3000]byte{} +} + var c = make(chan int) var t T var b = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} @@ -40,6 +66,7 @@ func recur(n int) { panic("bad []byte -> string") } go g(c, t) + f0() s := <-c if s != len(t) { println("bad go", s) diff --git a/gcc/testsuite/go.test/test/syntax/chan.go b/gcc/testsuite/go.test/test/syntax/chan.go new file mode 100644 index 00000000000..ff3577502f2 --- /dev/null +++ b/gcc/testsuite/go.test/test/syntax/chan.go @@ -0,0 +1,17 @@ +// errchk $G -e $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +type xyz struct { + ch chan +} // ERROR "unexpected .*}.* in channel type" + +func Foo(y chan) { // ERROR "unexpected .*\).* in channel type" +} + +func Bar(x chan, y int) { // ERROR "unexpected comma in channel type" +} diff --git a/gcc/testsuite/go.test/test/syntax/chan1.go b/gcc/testsuite/go.test/test/syntax/chan1.go new file mode 100644 index 00000000000..9c12e5e6fed --- /dev/null +++ b/gcc/testsuite/go.test/test/syntax/chan1.go @@ -0,0 +1,17 @@ +// errchk $G -e $D/$F.go + +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +var c chan int +var v int + +func main() { + if c <- v { // ERROR "send statement.*value.*select" + } +} + +var _ = c <- v // ERROR "send statement.*value.*select" diff --git a/gcc/testsuite/go.test/test/syntax/if.go b/gcc/testsuite/go.test/test/syntax/if.go new file mode 100644 index 00000000000..a3b51f0c07b --- /dev/null +++ b/gcc/testsuite/go.test/test/syntax/if.go @@ -0,0 +1,18 @@ +// errchk $G $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func x() { +} + +func main() { + if { // ERROR "missing condition" + } + + if x(); { // ERROR "missing condition" + } +} diff --git a/gcc/testsuite/go.test/test/syntax/typesw.go b/gcc/testsuite/go.test/test/syntax/typesw.go new file mode 100644 index 00000000000..47f683cdf29 --- /dev/null +++ b/gcc/testsuite/go.test/test/syntax/typesw.go @@ -0,0 +1,13 @@ +// errchk $G -e $D/$F.go + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + switch main() := interface{}(nil).(type) { // ERROR "invalid variable name" + default: + } +} diff --git a/gcc/testsuite/lib/compat.exp b/gcc/testsuite/lib/compat.exp index 3ce3221d186..d686631c03b 100644 --- a/gcc/testsuite/lib/compat.exp +++ b/gcc/testsuite/lib/compat.exp @@ -1,4 +1,4 @@ -# Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008 +# Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2011 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -260,13 +260,6 @@ proc compat-execute { src1 sid use_alt } { set dg-do-what [list ${dg-do-what-default} "" P] set extra_flags_1 [compat-get-options-main $src1] - # Check whether this test is supported for this target. - if { [lindex ${dg-do-what} 1 ] == "N" } { - unsupported "$src1" - verbose "$src1 not supported on this target, skipping it" 3 - return - } - # Set up the names of the other source files. set dir [file dirname $src1] set ext [file extension $src1] @@ -314,10 +307,6 @@ proc compat-execute { src1 sid use_alt } { set testcase [string range "$testcase" [string length "$tmpdir/"] end] set testcase "tmpdir-$testcase" } - regsub "_main.*" $testcase "" testcase - # Set up the base name of executable files so they'll be unique. - regsub -all "\[./\]" $testcase "-" execbase - # If we couldn't rip $srcdir out of `src1' then just do the best we can. # The point is to reduce the unnecessary noise in the logs. Don't strip # out too much because different testcases with the same name can confuse @@ -326,6 +315,17 @@ proc compat-execute { src1 sid use_alt } { set testcase "[file tail [file dirname $src1]]/[file tail $src1]" } + # Check whether this test is supported for this target. + if { [lindex ${dg-do-what} 1 ] == "N" } { + unsupported "$testcase" + verbose "$testcase not supported on this target, skipping it" 3 + return + } + + regsub "_main.*" $testcase "" testcase + # Set up the base name of executable files so they'll be unique. + regsub -all "\[./\]" $testcase "-" execbase + # Loop through all of the option lists used for this test. set count 0 diff --git a/gcc/testsuite/lib/gcc-gdb-test.exp b/gcc/testsuite/lib/gcc-gdb-test.exp index c8933c2b930..22e7a491873 100644 --- a/gcc/testsuite/lib/gcc-gdb-test.exp +++ b/gcc/testsuite/lib/gcc-gdb-test.exp @@ -1,4 +1,4 @@ -# Copyright (C) 2009 Free Software Foundation, Inc. +# Copyright (C) 2009, 2011 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -60,6 +60,12 @@ proc gdb-test { args } { } remote_expect target [timeout_value] { + # Too old GDB + -re "Unhandled dwarf expression|Error in sourced command file" { + unsupported "$testname" + remote_close target + return + } -re {[\n\r]\$1 = ([^\n\r]*)[\n\r]+\$2 = ([^\n\r]*)[\n\r]} { set first $expect_out(1,string) set second $expect_out(2,string) @@ -72,12 +78,6 @@ proc gdb-test { args } { remote_close target return } - # Too old GDB - -re "Unhandled dwarf expression|Error in sourced command file" { - unsupported "$testname" - remote_close target - return - } timeout { unsupported "$testname" remote_close target diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp index f4469eefbab..762dbbf82de 100644 --- a/gcc/testsuite/lib/lto.exp +++ b/gcc/testsuite/lib/lto.exp @@ -418,13 +418,6 @@ proc lto-execute { src1 sid } { set lto_option_list $LTO_OPTIONS } - # Check whether this test is supported for this target. - if { [lindex ${dg-do-what} 1 ] == "N" } { - unsupported "$src1" - verbose "$src1 not supported on this target, skipping it" 3 - return - } - # Set up the names of the other source files. set dir [file dirname $src1] set base [file rootname $src1] @@ -478,11 +471,6 @@ proc lto-execute { src1 sid } { set testcase [string range "$testcase" [string length "$tmpdir/"] end] set testcase "tmpdir-$testcase" } - regsub "_0.*" $testcase "" testcase - - # Set up the base name of executable files so they'll be unique. - regsub -all "\[./\]" $testcase "-" execbase - # If we couldn't rip $srcdir out of `src1' then just do the best we can. # The point is to reduce the unnecessary noise in the logs. Don't strip # out too much because different testcases with the same name can confuse @@ -491,6 +479,18 @@ proc lto-execute { src1 sid } { set testcase "[file tail [file dirname $src1]]/[file tail $src1]" } + # Check whether this test is supported for this target. + if { [lindex ${dg-do-what} 1 ] == "N" } { + unsupported "$testcase" + verbose "$testcase not supported on this target, skipping it" 3 + return + } + + regsub "_0.*" $testcase "" testcase + + # Set up the base name of executable files so they'll be unique. + regsub -all "\[./\]" $testcase "-" execbase + # Loop through all of the option lists used for this test. set count 0 foreach option $lto_option_list { diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp index 4e08bf3d1cc..7e4f9ce1621 100644 --- a/gcc/testsuite/lib/prune.exp +++ b/gcc/testsuite/lib/prune.exp @@ -56,7 +56,10 @@ proc prune_gcc_output { text } { regsub -all "(^|\n)\[^\n\]*ld: warning: can't add line info to anonymous symbol\[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*warning: DWARFDebugInfoEntry::AppendDependants\[^\n\]*AT_\[^\n\]*_bound\[^\n\]*FORM_ref4\[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*warning:\[^\n\]*TAG_variable: AT_location\[^\n\]*didn't have valid function low pc\[^\n\]*" $text "" text - + + # Ignore harmless warnings from Xcode 4.0. + regsub -all "(^|\n)\[^\n\]*ld: warning: could not create compact unwind for\[^\n\]*" $text "" text + #send_user "After:$text\n" return $text diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp index a49085410da..fe66264d974 100644 --- a/gcc/testsuite/lib/scanasm.exp +++ b/gcc/testsuite/lib/scanasm.exp @@ -315,6 +315,92 @@ proc scan-assembler-dem-not { args } { } } +# Call pass if object size is ok, otherwise fail. +# example: /* { dg-final { object-size text <= 54 } } */ +proc object-size { args } { + global size + global base_dir + + if { [llength $args] < 3 } { + error "object-size: too few arguments" + return + } + if { [llength $args] > 4 } { + error "object-size: too many arguments" + return + } + if { [llength $args] >= 4 } { + switch [dg-process-target [lindex $args 1]] { + "S" { } + "N" { return } + "F" { setup_xfail "*-*-*" } + "P" { } + } + } + + # Find size like we find g++ in g++.exp. + if ![info exists size] { + set size [findfile $base_dir/../../../binutils/size \ + $base_dir/../../../binutils/size \ + [findfile $base_dir/../../size $base_dir/../../size \ + [findfile $base_dir/size $base_dir/size \ + [transform size]]]] + verbose -log "size is $size" + } + + upvar 2 name testcase + set testcase [lindex $testcase 0] + set output_file "[file rootname [file tail $testcase]].o" + set output [remote_exec host "$size" "$output_file"] + set status [lindex $output 0] + if { $status != 0 } { + error "object-size: $size failed" + return + } + + set text [lindex $output 1] + set lines [split $text "\n"] + + set line0 [lindex $lines 0] + if ![regexp {^\s*text\s+data\s+bss\s+dec\s+hex\s+filename\s*$} $line0] { + error "object-size: $size did not produce expected first line: $line0" + return + } + + set line1 [lindex $lines 1] + if ![regexp {^\s*\d+\s+\d+\s+\d+\s+\d+\s+[\da-fA-F]+\s+} $line1] { + error "object-size: $size did not produce expected second line: $line1" + return + } + + set what [lindex $args 0] + set where [lsearch { text data bss total } $what] + if { $where == -1 } { + error "object-size: illegal argument: $what" + return + } + set actual [lindex $line1 $where] + verbose -log "$what size is $actual" + + set cmp [lindex $args 1] + if { [lsearch { < > <= >= == != } $cmp] == -1 } { + error "object-size: illegal argument: $cmp" + return + } + + set with [lindex $args 2] + if ![string is integer $with ] { + error "object-size: illegal argument: $with" + return + } + + if [expr $actual $cmp $with] { + pass "$testcase object-size $what $cmp $with" + } else { + fail "$testcase object-size $what $cmp $with" + } +} + # Utility for testing that a function is defined on the current line. # Call pass if so, otherwise fail. Invoked directly; the file must # have been compiled with -g -dA. diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 36cab543bdc..d3d7f75a554 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -541,30 +541,32 @@ proc check_profiling_available { test_what } { if {![info exists profiling_available_saved]} { # Some targets don't have any implementation of __bb_init_func or are # missing other needed machinery. - if { [istarget mmix-*-*] + if { [istarget am3*-*-linux*] || [istarget arm*-*-eabi*] - || [istarget picochip-*-*] - || [istarget *-*-netware*] || [istarget arm*-*-elf] || [istarget arm*-*-symbianelf*] || [istarget avr-*-*] || [istarget bfin-*-*] - || [istarget powerpc-*-eabi*] - || [istarget powerpc-*-elf] || [istarget cris-*-*] || [istarget crisv32-*-*] || [istarget fido-*-elf] || [istarget h8300-*-*] - || [istarget lm32-*-*] - || [istarget m32c-*-elf] + || [istarget lm32-*-*] + || [istarget m32c-*-elf] || [istarget m68k-*-elf] || [istarget m68k-*-uclinux*] || [istarget mep-*-elf] || [istarget mips*-*-elf*] + || [istarget mmix-*-*] + || [istarget mn10300-*-elf*] || [istarget moxie-*-elf*] + || [istarget picochip-*-*] + || [istarget powerpc-*-eabi*] + || [istarget powerpc-*-elf] || [istarget rx-*-*] || [istarget xstormy16-*] || [istarget xtensa*-*-elf] + || [istarget *-*-netware*] || [istarget *-*-rtems*] || [istarget *-*-vxworks*] } { set profiling_available_saved 0 @@ -2308,6 +2310,26 @@ proc check_effective_target_vect_shift_scalar { } { } +# Return 1 if the target supports hardware vector shift operation for char. + +proc check_effective_target_vect_shift_char { } { + global et_vect_shift_char_saved + + if [info exists et_vect_shift_char_saved] { + verbose "check_effective_target_vect_shift_char: using cached result" 2 + } else { + set et_vect_shift_char_saved 0 + if { ([istarget powerpc*-*-*] + && ![istarget powerpc-*-linux*paired*]) + || [check_effective_target_arm32] } { + set et_vect_shift_char_saved 1 + } + } + + verbose "check_effective_target_vect_shift_char: returning $et_vect_shift_char_saved" 2 + return $et_vect_shift_char_saved +} + # Return 1 if the target supports hardware vectors of long, 0 otherwise. # # This can change for different subtargets so do not cache the result. @@ -3119,29 +3141,6 @@ proc check_effective_target_vect_extract_even_odd { } { return $et_vect_extract_even_odd_saved } -# Return 1 if the target supports vector even/odd elements extraction of -# vectors with SImode elements or larger, 0 otherwise. - -proc check_effective_target_vect_extract_even_odd_wide { } { - global et_vect_extract_even_odd_wide_saved - - if [info exists et_vect_extract_even_odd_wide_saved] { - verbose "check_effective_target_vect_extract_even_odd_wide: using cached result" 2 - } else { - set et_vect_extract_even_odd_wide_saved 0 - if { [istarget powerpc*-*-*] - || [istarget i?86-*-*] - || [istarget x86_64-*-*] - || [istarget ia64-*-*] - || [istarget spu-*-*] } { - set et_vect_extract_even_odd_wide_saved 1 - } - } - - verbose "check_effective_target_vect_extract_even_wide_odd: returning $et_vect_extract_even_odd_wide_saved" 2 - return $et_vect_extract_even_odd_wide_saved -} - # Return 1 if the target supports vector interleaving, 0 otherwise. proc check_effective_target_vect_interleave { } { @@ -3164,41 +3163,30 @@ proc check_effective_target_vect_interleave { } { return $et_vect_interleave_saved } -# Return 1 if the target supports vector interleaving and extract even/odd, 0 otherwise. -proc check_effective_target_vect_strided { } { - global et_vect_strided_saved - - if [info exists et_vect_strided_saved] { - verbose "check_effective_target_vect_strided: using cached result" 2 - } else { - set et_vect_strided_saved 0 - if { [check_effective_target_vect_interleave] - && [check_effective_target_vect_extract_even_odd] } { - set et_vect_strided_saved 1 - } - } - - verbose "check_effective_target_vect_strided: returning $et_vect_strided_saved" 2 - return $et_vect_strided_saved -} - -# Return 1 if the target supports vector interleaving and extract even/odd -# for wide element types, 0 otherwise. -proc check_effective_target_vect_strided_wide { } { - global et_vect_strided_wide_saved +foreach N {2 3 4 8} { + eval [string map [list N $N] { + # Return 1 if the target supports 2-vector interleaving + proc check_effective_target_vect_stridedN { } { + global et_vect_stridedN_saved - if [info exists et_vect_strided_wide_saved] { - verbose "check_effective_target_vect_strided_wide: using cached result" 2 - } else { - set et_vect_strided_wide_saved 0 - if { [check_effective_target_vect_interleave] - && [check_effective_target_vect_extract_even_odd_wide] } { - set et_vect_strided_wide_saved 1 - } - } + if [info exists et_vect_stridedN_saved] { + verbose "check_effective_target_vect_stridedN: using cached result" 2 + } else { + set et_vect_stridedN_saved 0 + if { (N & -N) == N + && [check_effective_target_vect_interleave] + && [check_effective_target_vect_extract_even_odd] } { + set et_vect_stridedN_saved 1 + } + if { [istarget arm*-*-*] && N >= 2 && N <= 4 } { + set et_vect_stridedN_saved 1 + } + } - verbose "check_effective_target_vect_strided_wide: returning $et_vect_strided_wide_saved" 2 - return $et_vect_strided_wide_saved + verbose "check_effective_target_vect_stridedN: returning $et_vect_stridedN_saved" 2 + return $et_vect_stridedN_saved + } + }] } # Return 1 if the target supports section-anchors @@ -3556,6 +3544,9 @@ proc add_options_for_ieee { flags } { || [istarget "sh*-*-*"] } { return "$flags -mieee" } + if { [istarget "rx-*-*"] } { + return "$flags -mnofpu" + } return $flags } diff --git a/gcc/testsuite/obj-c++.dg/dwarf-2.mm b/gcc/testsuite/obj-c++.dg/dwarf-2.mm index e938249d7e0..f936b6baef4 100644 --- a/gcc/testsuite/obj-c++.dg/dwarf-2.mm +++ b/gcc/testsuite/obj-c++.dg/dwarf-2.mm @@ -1,4 +1,4 @@ /* { dg-options "-gdwarf-2 -dA" } */ -/* { dg-skip-if "" { { hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ +/* { dg-skip-if "No Dwarf" { { alpha*-dec-osf* hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ /* { dg-final { scan-assembler "0x11\[^0-9a-f\].*DW_AT_language" } } */ int x; diff --git a/gcc/testsuite/obj-c++.dg/naming-1.mm b/gcc/testsuite/obj-c++.dg/naming-1.mm index aed2fd517af..164c8225bb3 100644 --- a/gcc/testsuite/obj-c++.dg/naming-1.mm +++ b/gcc/testsuite/obj-c++.dg/naming-1.mm @@ -5,13 +5,17 @@ typedef struct S { int i; } NSDictionary; @interface A { - NSDictionary * _userInfo; + NSDictionary * _userInfo1; /* { dg-message "previous declaration" } */ + NSDictionary * _userInfo2; /* { dg-message "previous declaration" } */ + NSDictionary * _userInfo3; /* { dg-message "previous declaration" } */ + NSDictionary * _userInfo4; /* { dg-message "previous declaration" } */ } @end @interface B : A { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo1; /* { dg-error "duplicate instance variable" } */ + NSDictionary * _userInfo2; /* { dg-error "duplicate instance variable" } */ } @end @@ -20,7 +24,8 @@ typedef struct S { int i; } NSDictionary; @interface D : C { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo3; /* { dg-error "duplicate instance variable" } */ + NSDictionary * _userInfo4; /* { dg-error "duplicate instance variable" } */ } @end diff --git a/gcc/testsuite/obj-c++.dg/naming-2.mm b/gcc/testsuite/obj-c++.dg/naming-2.mm index 4b7860e10dd..49a83892f24 100644 --- a/gcc/testsuite/obj-c++.dg/naming-2.mm +++ b/gcc/testsuite/obj-c++.dg/naming-2.mm @@ -5,7 +5,7 @@ typedef struct S { int i; } NSDictionary; @interface A { - NSDictionary * _userInfo; + NSDictionary * _userInfo; /* { dg-message "previous declaration" } */ int i1; int i2; int i3; @@ -13,12 +13,13 @@ typedef struct S { int i; } NSDictionary; int i5; int i6; int i7; + NSDictionary * _userInfo1; /* { dg-message "previous declaration" } */ } @end @interface B : A { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo1; /* { dg-error "duplicate instance variable" } */ int ii1; int ii2; int ii3; @@ -34,7 +35,7 @@ typedef struct S { int i; } NSDictionary; @interface D : C { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo; /* { dg-error "duplicate instance variable" } */ } @end diff --git a/gcc/testsuite/obj-c++.dg/naming-3.mm b/gcc/testsuite/obj-c++.dg/naming-3.mm new file mode 100644 index 00000000000..ac812678e74 --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/naming-3.mm @@ -0,0 +1,15 @@ +/* Testing for detecting duplicate ivars. */ +/* { dg-do compile } */ + +@interface A +{ + char x; /* { dg-error "conflicts" } */ + char x; +} /* { dg-error "declaration" } */ +@end + +@interface B : A +{ + char y; +} +@end diff --git a/gcc/testsuite/obj-c++.dg/naming-4.mm b/gcc/testsuite/obj-c++.dg/naming-4.mm new file mode 100644 index 00000000000..4bb731206e5 --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/naming-4.mm @@ -0,0 +1,145 @@ +/* Testing for detecting duplicate ivars. */ +/* { dg-do compile } */ + +/* This check wants to force the compiler to use a hashtable. To do + so, we need lots of instance variable. */ + +@interface A +{ + /* That's 200 instance variables, which is enough to trigger the + hashtable check in the compiler. */ + char a0; char a1; char a2; char a3; char a4; char a5; char a6; char a7; char a8; char a9; + char b0; char b1; char b2; char b3; char b4; char b5; char b6; char b7; char b8; char b9; + char c0; char c1; char c2; char c3; char c4; char c5; char c6; char c7; char c8; char c9; + char d0; char d1; char d2; char d3; char d4; char d5; char d6; char d7; char d8; char d9; + char e0; char e1; char e2; char e3; char e4; char e5; char e6; char e7; char e8; char e9; + char f0; char f1; char f2; char f3; char f4; char f5; char f6; char f7; char f8; char f9; + char g0; char g1; char g2; char g3; char g4; char g5; char g6; char g7; char g8; char g9; + char h0; char h1; char h2; char h3; char h4; char h5; char h6; char h7; char h8; char h9; + char i0; char i1; char i2; char i3; char i4; char i5; char i6; char i7; char i8; char i9; + char j0; char j1; char j2; char j3; char j4; char j5; char j6; char j7; char j8; char j9; + char k0; char k1; char k2; char k3; char k4; char k5; char k6; char k7; char k8; char k9; + char l0; char l1; char l2; char l3; char l4; char l5; char l6; char l7; char l8; char l9; + char m0; char m1; char m2; char m3; char m4; char m5; char m6; char m7; char m8; char m9; + char n0; char n1; char n2; char n3; char n4; char n5; char n6; char n7; char n8; char n9; + char o0; char o1; char o2; char o3; char o4; char o5; char o6; char o7; char o8; char o9; + char p0; char p1; char p2; char p3; char p4; char p5; char p6; char p7; char p8; char p9; + char q0; char q1; char q2; char q3; char q4; char q5; char q6; char q7; char q8; char q9; + char r0; char r1; char r2; char r3; char r4; char r5; char r6; char r7; char r8; char r9; + char s0; char s1; char s2; char s3; char s4; char s5; char s6; char s7; char s8; char s9; + + char x; /* { dg-error "conflicts" } */ + char x; + + char z; /* { dg-message "previous declaration" } */ + char k; /* { dg-message "previous declaration" } */ +} /* { dg-error "declaration" } */ +@end + +@interface B : A +{ + /* That's another 200 instance variables, which should be enough to + trigger the hashtable check in the compiler. */ + char Ba0; char Ba1; char Ba2; char Ba3; char Ba4; char Ba5; char Ba6; char Ba7; char Ba8; char Ba9; + char Bb0; char Bb1; char Bb2; char Bb3; char Bb4; char Bb5; char Bb6; char Bb7; char Bb8; char Bb9; + char Bc0; char Bc1; char Bc2; char Bc3; char Bc4; char Bc5; char Bc6; char Bc7; char Bc8; char Bc9; + char Bd0; char Bd1; char Bd2; char Bd3; char Bd4; char Bd5; char Bd6; char Bd7; char Bd8; char Bd9; + char Be0; char Be1; char Be2; char Be3; char Be4; char Be5; char Be6; char Be7; char Be8; char Be9; + char Bf0; char Bf1; char Bf2; char Bf3; char Bf4; char Bf5; char Bf6; char Bf7; char Bf8; char Bf9; + char Bg0; char Bg1; char Bg2; char Bg3; char Bg4; char Bg5; char Bg6; char Bg7; char Bg8; char Bg9; + char Bh0; char Bh1; char Bh2; char Bh3; char Bh4; char Bh5; char Bh6; char Bh7; char Bh8; char Bh9; + char Bi0; char Bi1; char Bi2; char Bi3; char Bi4; char Bi5; char Bi6; char Bi7; char Bi8; char Bi9; + char Bj0; char Bj1; char Bj2; char Bj3; char Bj4; char Bj5; char Bj6; char Bj7; char Bj8; char Bj9; + char Bk0; char Bk1; char Bk2; char Bk3; char Bk4; char Bk5; char Bk6; char Bk7; char Bk8; char Bk9; + char Bl0; char Bl1; char Bl2; char Bl3; char Bl4; char Bl5; char Bl6; char Bl7; char Bl8; char Bl9; + char Bm0; char Bm1; char Bm2; char Bm3; char Bm4; char Bm5; char Bm6; char Bm7; char Bm8; char Bm9; + char Bn0; char Bn1; char Bn2; char Bn3; char Bn4; char Bn5; char Bn6; char Bn7; char Bn8; char Bn9; + char Bo0; char Bo1; char Bo2; char Bo3; char Bo4; char Bo5; char Bo6; char Bo7; char Bo8; char Bo9; + char Bp0; char Bp1; char Bp2; char Bp3; char Bp4; char Bp5; char Bp6; char Bp7; char Bp8; char Bp9; + char Bq0; char Bq1; char Bq2; char Bq3; char Bq4; char Bq5; char Bq6; char Bq7; char Bq8; char Bq9; + char Br0; char Br1; char Br2; char Br3; char Br4; char Br5; char Br6; char Br7; char Br8; char Br9; + char Bs0; char Bs1; char Bs2; char Bs3; char Bs4; char Bs5; char Bs6; char Bs7; char Bs8; char Bs9; + + char y; /* { dg-message "conflicts" } */ + char y; + + char z; /* { dg-error "duplicate instance variable" } */ +} /* { dg-error "declaration" } */ +@end + +@interface C : A +{ + char w; /* { dg-message "previous declaration" } */ +} +@end + +@interface D : C +{ + /* That's another 200 instance variables, which should be enough to + trigger the hashtable check in the compiler. */ + char Da0; char Da1; char Da2; char Da3; char Da4; char Da5; char Da6; char Da7; char Da8; char Da9; + char Db0; char Db1; char Db2; char Db3; char Db4; char Db5; char Db6; char Db7; char Db8; char Db9; + char Dc0; char Dc1; char Dc2; char Dc3; char Dc4; char Dc5; char Dc6; char Dc7; char Dc8; char Dc9; + char Dd0; char Dd1; char Dd2; char Dd3; char Dd4; char Dd5; char Dd6; char Dd7; char Dd8; char Dd9; + char De0; char De1; char De2; char De3; char De4; char De5; char De6; char De7; char De8; char De9; + char Df0; char Df1; char Df2; char Df3; char Df4; char Df5; char Df6; char Df7; char Df8; char Df9; + char Dg0; char Dg1; char Dg2; char Dg3; char Dg4; char Dg5; char Dg6; char Dg7; char Dg8; char Dg9; + char Dh0; char Dh1; char Dh2; char Dh3; char Dh4; char Dh5; char Dh6; char Dh7; char Dh8; char Dh9; + char Di0; char Di1; char Di2; char Di3; char Di4; char Di5; char Di6; char Di7; char Di8; char Di9; + char Dj0; char Dj1; char Dj2; char Dj3; char Dj4; char Dj5; char Dj6; char Dj7; char Dj8; char Dj9; + char Dk0; char Dk1; char Dk2; char Dk3; char Dk4; char Dk5; char Dk6; char Dk7; char Dk8; char Dk9; + char Dl0; char Dl1; char Dl2; char Dl3; char Dl4; char Dl5; char Dl6; char Dl7; char Dl8; char Dl9; + char Dm0; char Dm1; char Dm2; char Dm3; char Dm4; char Dm5; char Dm6; char Dm7; char Dm8; char Dm9; + char Dn0; char Dn1; char Dn2; char Dn3; char Dn4; char Dn5; char Dn6; char Dn7; char Dn8; char Dn9; + char Do0; char Do1; char Do2; char Do3; char Do4; char Do5; char Do6; char Do7; char Do8; char Do9; + char Dp0; char Dp1; char Dp2; char Dp3; char Dp4; char Dp5; char Dp6; char Dp7; char Dp8; char Dp9; + char Dq0; char Dq1; char Dq2; char Dq3; char Dq4; char Dq5; char Dq6; char Dq7; char Dq8; char Dq9; + char Dr0; char Dr1; char Dr2; char Dr3; char Dr4; char Dr5; char Dr6; char Dr7; char Dr8; char Dr9; + char Ds0; char Ds1; char Ds2; char Ds3; char Ds4; char Ds5; char Ds6; char Ds7; char Ds8; char Ds9; + + char y; /* { dg-message "conflicts" } */ + char y; + + char w; /* { dg-error "duplicate instance variable" } */ + char k; /* { dg-error "duplicate instance variable" } */ +} /* { dg-error "declaration" } */ +@end + +/* Finally, make sure that anonymous instance variables don't trigger + warnings. This is the same as the anon-1.m testcase, but forcing + the hashtable check. */ +@interface E : D +{ + char : 1; + char : 2; +} +@end + +@interface F : E +{ + /* That's another 200 instance variables, which should be enough to + trigger the hashtable check in the compiler. */ + char Fa0; char Fa1; char Fa2; char Fa3; char Fa4; char Fa5; char Fa6; char Fa7; char Fa8; char Fa9; + char Fb0; char Fb1; char Fb2; char Fb3; char Fb4; char Fb5; char Fb6; char Fb7; char Fb8; char Fb9; + char Fc0; char Fc1; char Fc2; char Fc3; char Fc4; char Fc5; char Fc6; char Fc7; char Fc8; char Fc9; + char Fd0; char Fd1; char Fd2; char Fd3; char Fd4; char Fd5; char Fd6; char Fd7; char Fd8; char Fd9; + char Fe0; char Fe1; char Fe2; char Fe3; char Fe4; char Fe5; char Fe6; char Fe7; char Fe8; char Fe9; + char Ff0; char Ff1; char Ff2; char Ff3; char Ff4; char Ff5; char Ff6; char Ff7; char Ff8; char Ff9; + char Fg0; char Fg1; char Fg2; char Fg3; char Fg4; char Fg5; char Fg6; char Fg7; char Fg8; char Fg9; + char Fh0; char Fh1; char Fh2; char Fh3; char Fh4; char Fh5; char Fh6; char Fh7; char Fh8; char Fh9; + char Fi0; char Fi1; char Fi2; char Fi3; char Fi4; char Fi5; char Fi6; char Fi7; char Fi8; char Fi9; + char Fj0; char Fj1; char Fj2; char Fj3; char Fj4; char Fj5; char Fj6; char Fj7; char Fj8; char Fj9; + char Fk0; char Fk1; char Fk2; char Fk3; char Fk4; char Fk5; char Fk6; char Fk7; char Fk8; char Fk9; + char Fl0; char Fl1; char Fl2; char Fl3; char Fl4; char Fl5; char Fl6; char Fl7; char Fl8; char Fl9; + char Fm0; char Fm1; char Fm2; char Fm3; char Fm4; char Fm5; char Fm6; char Fm7; char Fm8; char Fm9; + char Fn0; char Fn1; char Fn2; char Fn3; char Fn4; char Fn5; char Fn6; char Fn7; char Fn8; char Fn9; + char Fo0; char Fo1; char Fo2; char Fo3; char Fo4; char Fo5; char Fo6; char Fo7; char Fo8; char Fo9; + char Fp0; char Fp1; char Fp2; char Fp3; char Fp4; char Fp5; char Fp6; char Fp7; char Fp8; char Fp9; + char Fq0; char Fq1; char Fq2; char Fq3; char Fq4; char Fq5; char Fq6; char Fq7; char Fq8; char Fq9; + char Fr0; char Fr1; char Fr2; char Fr3; char Fr4; char Fr5; char Fr6; char Fr7; char Fr8; char Fr9; + char Fs0; char Fs1; char Fs2; char Fs3; char Fs4; char Fs5; char Fs6; char Fs7; char Fs8; char Fs9; + + char : 1; + char : 2; +} +@end diff --git a/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h b/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h index b9818803322..6a4b4ceed42 100644 --- a/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h +++ b/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h @@ -676,7 +676,7 @@ objc_layout_structure (const char *type, && *ntype++ != '=') /* do nothing */; - /* If there's a "<name>=", ntype - 1 points to '='; skip the the name */ + /* If there's a "<name>=", ntype - 1 points to '='; skip the name */ if (*(ntype - 1) == '=') type = ntype; diff --git a/gcc/testsuite/objc.dg/naming-4.m b/gcc/testsuite/objc.dg/naming-4.m index 9a85229f6a7..6114f6ae6eb 100644 --- a/gcc/testsuite/objc.dg/naming-4.m +++ b/gcc/testsuite/objc.dg/naming-4.m @@ -5,14 +5,17 @@ typedef struct S { int i; } NSDictionary; @interface A { - NSDictionary * _userInfo; + NSDictionary * _userInfo1; /* { dg-message "previous declaration" } */ + NSDictionary * _userInfo2; /* { dg-message "previous declaration" } */ + NSDictionary * _userInfo3; /* { dg-message "previous declaration" } */ + NSDictionary * _userInfo4; /* { dg-message "previous declaration" } */ } @end @interface B : A { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo1; /* { dg-error "duplicate instance variable" } */ + NSDictionary * _userInfo2; /* { dg-error "duplicate instance variable" } */ } @end @@ -21,7 +24,7 @@ typedef struct S { int i; } NSDictionary; @interface D : C { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo3; /* { dg-error "duplicate instance variable" } */ + NSDictionary * _userInfo4; /* { dg-error "duplicate instance variable" } */ } @end diff --git a/gcc/testsuite/objc.dg/naming-5.m b/gcc/testsuite/objc.dg/naming-5.m index 2e2786c41de..7d6805f9329 100644 --- a/gcc/testsuite/objc.dg/naming-5.m +++ b/gcc/testsuite/objc.dg/naming-5.m @@ -5,7 +5,7 @@ typedef struct S { int i; } NSDictionary; @interface A { - NSDictionary * _userInfo; + NSDictionary * _userInfo; /* { dg-message "previous declaration" } */ int i1; int i2; int i3; @@ -18,7 +18,7 @@ typedef struct S { int i; } NSDictionary; @interface B : A { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo1; /* { dg-message "previous declaration" } */ int ii1; int ii2; int ii3; @@ -26,7 +26,7 @@ typedef struct S { int i; } NSDictionary; int ii5; int ii6; int ii7; - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo1; /* { dg-error "duplicate instance variable" } */ } @end @@ -35,8 +35,7 @@ typedef struct S { int i; } NSDictionary; @interface D : C { - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ - NSDictionary * _userInfo; /* { dg-error "duplicate member" } */ + NSDictionary * _userInfo; /* { dg-error "duplicate instance variable" } */ } @end diff --git a/gcc/testsuite/objc.dg/naming-6.m b/gcc/testsuite/objc.dg/naming-6.m new file mode 100644 index 00000000000..86e58e087b4 --- /dev/null +++ b/gcc/testsuite/objc.dg/naming-6.m @@ -0,0 +1,20 @@ +/* Testing for detecting duplicate ivars. */ +/* { dg-do compile } */ + +@interface A +{ + /* TODO: Have the testsuite check that these messages occur only once! */ + char x; /* { dg-message "previous declaration" } */ + char x; /* { dg-error "duplicate instance variable" } */ +} +@end + +/* In some versions of the compiler (eg, 4.6.x), having a subclass + would generate additional, duplicate errors for the duplicate + instance variable in the superclass, so adding the following would + cause the error messages above to be duplicated. */ +@interface B : A +{ + char y; +} +@end diff --git a/gcc/testsuite/objc.dg/naming-7.m b/gcc/testsuite/objc.dg/naming-7.m new file mode 100644 index 00000000000..aa703176db0 --- /dev/null +++ b/gcc/testsuite/objc.dg/naming-7.m @@ -0,0 +1,145 @@ +/* Testing for detecting duplicate ivars. */ +/* { dg-do compile } */ + +/* This check wants to force the compiler to use a hashtable. To do + so, we need lots of instance variable. */ + +@interface A +{ + /* That's 200 instance variables, which is enough to trigger the + hashtable check in the compiler. */ + char a0; char a1; char a2; char a3; char a4; char a5; char a6; char a7; char a8; char a9; + char b0; char b1; char b2; char b3; char b4; char b5; char b6; char b7; char b8; char b9; + char c0; char c1; char c2; char c3; char c4; char c5; char c6; char c7; char c8; char c9; + char d0; char d1; char d2; char d3; char d4; char d5; char d6; char d7; char d8; char d9; + char e0; char e1; char e2; char e3; char e4; char e5; char e6; char e7; char e8; char e9; + char f0; char f1; char f2; char f3; char f4; char f5; char f6; char f7; char f8; char f9; + char g0; char g1; char g2; char g3; char g4; char g5; char g6; char g7; char g8; char g9; + char h0; char h1; char h2; char h3; char h4; char h5; char h6; char h7; char h8; char h9; + char i0; char i1; char i2; char i3; char i4; char i5; char i6; char i7; char i8; char i9; + char j0; char j1; char j2; char j3; char j4; char j5; char j6; char j7; char j8; char j9; + char k0; char k1; char k2; char k3; char k4; char k5; char k6; char k7; char k8; char k9; + char l0; char l1; char l2; char l3; char l4; char l5; char l6; char l7; char l8; char l9; + char m0; char m1; char m2; char m3; char m4; char m5; char m6; char m7; char m8; char m9; + char n0; char n1; char n2; char n3; char n4; char n5; char n6; char n7; char n8; char n9; + char o0; char o1; char o2; char o3; char o4; char o5; char o6; char o7; char o8; char o9; + char p0; char p1; char p2; char p3; char p4; char p5; char p6; char p7; char p8; char p9; + char q0; char q1; char q2; char q3; char q4; char q5; char q6; char q7; char q8; char q9; + char r0; char r1; char r2; char r3; char r4; char r5; char r6; char r7; char r8; char r9; + char s0; char s1; char s2; char s3; char s4; char s5; char s6; char s7; char s8; char s9; + + char x; /* { dg-message "previous declaration" } */ + char x; /* { dg-error "duplicate instance variable" } */ + + char z; /* { dg-message "previous declaration" } */ + char k; /* { dg-message "previous declaration" } */ +} +@end + +@interface B : A +{ + /* That's another 200 instance variables, which should be enough to + trigger the hashtable check in the compiler. */ + char Ba0; char Ba1; char Ba2; char Ba3; char Ba4; char Ba5; char Ba6; char Ba7; char Ba8; char Ba9; + char Bb0; char Bb1; char Bb2; char Bb3; char Bb4; char Bb5; char Bb6; char Bb7; char Bb8; char Bb9; + char Bc0; char Bc1; char Bc2; char Bc3; char Bc4; char Bc5; char Bc6; char Bc7; char Bc8; char Bc9; + char Bd0; char Bd1; char Bd2; char Bd3; char Bd4; char Bd5; char Bd6; char Bd7; char Bd8; char Bd9; + char Be0; char Be1; char Be2; char Be3; char Be4; char Be5; char Be6; char Be7; char Be8; char Be9; + char Bf0; char Bf1; char Bf2; char Bf3; char Bf4; char Bf5; char Bf6; char Bf7; char Bf8; char Bf9; + char Bg0; char Bg1; char Bg2; char Bg3; char Bg4; char Bg5; char Bg6; char Bg7; char Bg8; char Bg9; + char Bh0; char Bh1; char Bh2; char Bh3; char Bh4; char Bh5; char Bh6; char Bh7; char Bh8; char Bh9; + char Bi0; char Bi1; char Bi2; char Bi3; char Bi4; char Bi5; char Bi6; char Bi7; char Bi8; char Bi9; + char Bj0; char Bj1; char Bj2; char Bj3; char Bj4; char Bj5; char Bj6; char Bj7; char Bj8; char Bj9; + char Bk0; char Bk1; char Bk2; char Bk3; char Bk4; char Bk5; char Bk6; char Bk7; char Bk8; char Bk9; + char Bl0; char Bl1; char Bl2; char Bl3; char Bl4; char Bl5; char Bl6; char Bl7; char Bl8; char Bl9; + char Bm0; char Bm1; char Bm2; char Bm3; char Bm4; char Bm5; char Bm6; char Bm7; char Bm8; char Bm9; + char Bn0; char Bn1; char Bn2; char Bn3; char Bn4; char Bn5; char Bn6; char Bn7; char Bn8; char Bn9; + char Bo0; char Bo1; char Bo2; char Bo3; char Bo4; char Bo5; char Bo6; char Bo7; char Bo8; char Bo9; + char Bp0; char Bp1; char Bp2; char Bp3; char Bp4; char Bp5; char Bp6; char Bp7; char Bp8; char Bp9; + char Bq0; char Bq1; char Bq2; char Bq3; char Bq4; char Bq5; char Bq6; char Bq7; char Bq8; char Bq9; + char Br0; char Br1; char Br2; char Br3; char Br4; char Br5; char Br6; char Br7; char Br8; char Br9; + char Bs0; char Bs1; char Bs2; char Bs3; char Bs4; char Bs5; char Bs6; char Bs7; char Bs8; char Bs9; + + char y; /* { dg-message "previous declaration" } */ + char y; /* { dg-error "duplicate instance variable" } */ + + char z; /* { dg-error "duplicate instance variable" } */ +} +@end + +@interface C : A +{ + char w; /* { dg-message "previous declaration" } */ +} +@end + +@interface D : C +{ + /* That's another 200 instance variables, which should be enough to + trigger the hashtable check in the compiler. */ + char Da0; char Da1; char Da2; char Da3; char Da4; char Da5; char Da6; char Da7; char Da8; char Da9; + char Db0; char Db1; char Db2; char Db3; char Db4; char Db5; char Db6; char Db7; char Db8; char Db9; + char Dc0; char Dc1; char Dc2; char Dc3; char Dc4; char Dc5; char Dc6; char Dc7; char Dc8; char Dc9; + char Dd0; char Dd1; char Dd2; char Dd3; char Dd4; char Dd5; char Dd6; char Dd7; char Dd8; char Dd9; + char De0; char De1; char De2; char De3; char De4; char De5; char De6; char De7; char De8; char De9; + char Df0; char Df1; char Df2; char Df3; char Df4; char Df5; char Df6; char Df7; char Df8; char Df9; + char Dg0; char Dg1; char Dg2; char Dg3; char Dg4; char Dg5; char Dg6; char Dg7; char Dg8; char Dg9; + char Dh0; char Dh1; char Dh2; char Dh3; char Dh4; char Dh5; char Dh6; char Dh7; char Dh8; char Dh9; + char Di0; char Di1; char Di2; char Di3; char Di4; char Di5; char Di6; char Di7; char Di8; char Di9; + char Dj0; char Dj1; char Dj2; char Dj3; char Dj4; char Dj5; char Dj6; char Dj7; char Dj8; char Dj9; + char Dk0; char Dk1; char Dk2; char Dk3; char Dk4; char Dk5; char Dk6; char Dk7; char Dk8; char Dk9; + char Dl0; char Dl1; char Dl2; char Dl3; char Dl4; char Dl5; char Dl6; char Dl7; char Dl8; char Dl9; + char Dm0; char Dm1; char Dm2; char Dm3; char Dm4; char Dm5; char Dm6; char Dm7; char Dm8; char Dm9; + char Dn0; char Dn1; char Dn2; char Dn3; char Dn4; char Dn5; char Dn6; char Dn7; char Dn8; char Dn9; + char Do0; char Do1; char Do2; char Do3; char Do4; char Do5; char Do6; char Do7; char Do8; char Do9; + char Dp0; char Dp1; char Dp2; char Dp3; char Dp4; char Dp5; char Dp6; char Dp7; char Dp8; char Dp9; + char Dq0; char Dq1; char Dq2; char Dq3; char Dq4; char Dq5; char Dq6; char Dq7; char Dq8; char Dq9; + char Dr0; char Dr1; char Dr2; char Dr3; char Dr4; char Dr5; char Dr6; char Dr7; char Dr8; char Dr9; + char Ds0; char Ds1; char Ds2; char Ds3; char Ds4; char Ds5; char Ds6; char Ds7; char Ds8; char Ds9; + + char y; /* { dg-message "previous declaration" } */ + char y; /* { dg-error "duplicate instance variable" } */ + + char w; /* { dg-error "duplicate instance variable" } */ + char k; /* { dg-error "duplicate instance variable" } */ +} +@end + +/* Finally, make sure that anonymous instance variables don't trigger + warnings. This is the same as the anon-1.m testcase, but forcing + the hashtable check. */ +@interface E : D +{ + char : 1; + char : 2; +} +@end + +@interface F : E +{ + /* That's another 200 instance variables, which should be enough to + trigger the hashtable check in the compiler. */ + char Fa0; char Fa1; char Fa2; char Fa3; char Fa4; char Fa5; char Fa6; char Fa7; char Fa8; char Fa9; + char Fb0; char Fb1; char Fb2; char Fb3; char Fb4; char Fb5; char Fb6; char Fb7; char Fb8; char Fb9; + char Fc0; char Fc1; char Fc2; char Fc3; char Fc4; char Fc5; char Fc6; char Fc7; char Fc8; char Fc9; + char Fd0; char Fd1; char Fd2; char Fd3; char Fd4; char Fd5; char Fd6; char Fd7; char Fd8; char Fd9; + char Fe0; char Fe1; char Fe2; char Fe3; char Fe4; char Fe5; char Fe6; char Fe7; char Fe8; char Fe9; + char Ff0; char Ff1; char Ff2; char Ff3; char Ff4; char Ff5; char Ff6; char Ff7; char Ff8; char Ff9; + char Fg0; char Fg1; char Fg2; char Fg3; char Fg4; char Fg5; char Fg6; char Fg7; char Fg8; char Fg9; + char Fh0; char Fh1; char Fh2; char Fh3; char Fh4; char Fh5; char Fh6; char Fh7; char Fh8; char Fh9; + char Fi0; char Fi1; char Fi2; char Fi3; char Fi4; char Fi5; char Fi6; char Fi7; char Fi8; char Fi9; + char Fj0; char Fj1; char Fj2; char Fj3; char Fj4; char Fj5; char Fj6; char Fj7; char Fj8; char Fj9; + char Fk0; char Fk1; char Fk2; char Fk3; char Fk4; char Fk5; char Fk6; char Fk7; char Fk8; char Fk9; + char Fl0; char Fl1; char Fl2; char Fl3; char Fl4; char Fl5; char Fl6; char Fl7; char Fl8; char Fl9; + char Fm0; char Fm1; char Fm2; char Fm3; char Fm4; char Fm5; char Fm6; char Fm7; char Fm8; char Fm9; + char Fn0; char Fn1; char Fn2; char Fn3; char Fn4; char Fn5; char Fn6; char Fn7; char Fn8; char Fn9; + char Fo0; char Fo1; char Fo2; char Fo3; char Fo4; char Fo5; char Fo6; char Fo7; char Fo8; char Fo9; + char Fp0; char Fp1; char Fp2; char Fp3; char Fp4; char Fp5; char Fp6; char Fp7; char Fp8; char Fp9; + char Fq0; char Fq1; char Fq2; char Fq3; char Fq4; char Fq5; char Fq6; char Fq7; char Fq8; char Fq9; + char Fr0; char Fr1; char Fr2; char Fr3; char Fr4; char Fr5; char Fr6; char Fr7; char Fr8; char Fr9; + char Fs0; char Fs1; char Fs2; char Fs3; char Fs4; char Fs5; char Fs6; char Fs7; char Fs8; char Fs9; + + char : 1; + char : 2; +} +@end diff --git a/gcc/testsuite/objc/execute/next_mapping.h b/gcc/testsuite/objc/execute/next_mapping.h index 41d40fdf0dc..c28f173ce1a 100644 --- a/gcc/testsuite/objc/execute/next_mapping.h +++ b/gcc/testsuite/objc/execute/next_mapping.h @@ -749,7 +749,7 @@ objc_layout_structure (const char *type, && *ntype++ != '=') /* do nothing */; - /* If there's a "<name>=", ntype - 1 points to '='; skip the the name */ + /* If there's a "<name>=", ntype - 1 points to '='; skip the name */ if (*(ntype - 1) == '=') type = ntype; |