Hi Peter, This is, obviously, a fluke. We'll investigate.
Sorry for the noise, -- Maxim Kuvyrkov https://www.linaro.org > On 30 May 2022, at 09:56, ci_not...@linaro.org wrote: > > [TCWG CI] Regression caused by gcc: rs6000: MMA test case ICEs using -O3 > [PR99842]: > commit df4e0359dad239854af0ea9eacb8e7e3719557d0 > Author: Peter Bergner <berg...@linux.ibm.com> > > rs6000: MMA test case ICEs using -O3 [PR99842] > > Results regressed to > # reset_artifacts: > -10 > # build_abe binutils: > -9 > # build_abe stage1: > -5 > # build_abe qemu: > -2 > # linux_n_obj: > 33 > # First few build errors in logs: > # 00:00:57 cc1plus: fatal error: ./include/generated/utsrelease.h: No such > file or directory > # 00:00:57 cc1plus: fatal error: ./include/generated/utsrelease.h: No such > file or directory > # 00:00:57 cc1plus: fatal error: ./include/generated/utsrelease.h: No such > file or directory > # 00:00:57 make[2]: *** [scripts/gcc-plugins/stackleak_plugin.so] Error 1 > # 00:00:57 make[2]: *** [scripts/gcc-plugins/latent_entropy_plugin.so] Error 1 > # 00:00:57 make[2]: *** [scripts/gcc-plugins/randomize_layout_plugin.so] > Error 1 > # 00:00:57 make[1]: *** [scripts/gcc-plugins] Error 2 > # 00:00:59 make: *** [scripts] Error 2 > > from > # reset_artifacts: > -10 > # build_abe binutils: > -9 > # build_abe stage1: > -5 > # build_abe qemu: > -2 > # linux_n_obj: > 21071 > # linux build successful: > all > > THIS IS THE END OF INTERESTING STUFF. BELOW ARE LINKS TO BUILDS, > REPRODUCTION INSTRUCTIONS, AND THE RAW COMMIT. > > This commit has regressed these CI configurations: > - tcwg_kernel/gnu-release-aarch64-next-allyesconfig > > First_bad build: > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/build-df4e0359dad239854af0ea9eacb8e7e3719557d0/ > Last_good build: > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/build-e21e93407202e62a10c372595076c593c561bb11/ > Baseline build: > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/build-baseline/ > Even more details: > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/ > > Reproduce builds: > <cut> > mkdir investigate-gcc-df4e0359dad239854af0ea9eacb8e7e3719557d0 > cd investigate-gcc-df4e0359dad239854af0ea9eacb8e7e3719557d0 > > # Fetch scripts > git clone https://git.linaro.org/toolchain/jenkins-scripts > > # Fetch manifests and test.sh script > mkdir -p artifacts/manifests > curl -o artifacts/manifests/build-baseline.sh > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/manifests/build-baseline.sh > --fail > curl -o artifacts/manifests/build-parameters.sh > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/manifests/build-parameters.sh > --fail > curl -o artifacts/test.sh > https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-release-aarch64-next-allyesconfig/140/artifact/artifacts/test.sh > --fail > chmod +x artifacts/test.sh > > # Reproduce the baseline build (build all pre-requisites) > ./jenkins-scripts/tcwg_kernel-build.sh @@ > artifacts/manifests/build-baseline.sh > > # Save baseline build state (which is then restored in artifacts/test.sh) > mkdir -p ./bisect > rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/ > --exclude /gcc/ ./ ./bisect/baseline/ > > cd gcc > > # Reproduce first_bad build > git checkout --detach df4e0359dad239854af0ea9eacb8e7e3719557d0 > ../artifacts/test.sh > > # Reproduce last_good build > git checkout --detach e21e93407202e62a10c372595076c593c561bb11 > ../artifacts/test.sh > > cd .. > </cut> > > Full commit (up to 1000 lines): > <cut> > commit df4e0359dad239854af0ea9eacb8e7e3719557d0 > Author: Peter Bergner <berg...@linux.ibm.com> > Date: Sun May 30 22:45:55 2021 -0500 > > rs6000: MMA test case ICEs using -O3 [PR99842] > > The mma_assemble_input_operand predicate does not accept reg+reg indexed > addresses which can lead to ICEs. The lxv and lxvp instructions have > indexed forms (lxvx and lxvpx), so the simple solution is to just allow > indexed addresses in the predicate. > > 2021-05-30 Peter Bergner <berg...@linux.ibm.com> > > gcc/ > PR target/99842 > * config/rs6000/predicates.md(mma_assemble_input_operand): Allow > indexed form addresses. > > gcc/testsuite/ > PR target/99842 > * g++.target/powerpc/pr99842.C: New. > --- > gcc/config/rs6000/predicates.md | 3 +- > gcc/testsuite/g++.target/powerpc/pr99842.C | 188 +++++++++++++++++++++++++++++ > 2 files changed, 190 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md > index e21bc745f72..121cbf14810 100644 > --- a/gcc/config/rs6000/predicates.md > +++ b/gcc/config/rs6000/predicates.md > @@ -1172,7 +1172,8 @@ > (match_test "(mode == V16QImode > && (vsx_register_operand (op, mode) > || (MEM_P (op) > - && quad_address_p (XEXP (op, 0), mode, false))))")) > + && (indexed_or_indirect_address (XEXP (op, 0), mode) > + || quad_address_p (XEXP (op, 0), mode, false)))))")) > > ;; Return 1 if this operand is valid for an MMA disassemble insn. > (define_predicate "mma_disassemble_output_operand" > diff --git a/gcc/testsuite/g++.target/powerpc/pr99842.C > b/gcc/testsuite/g++.target/powerpc/pr99842.C > new file mode 100644 > index 00000000000..922450e2c21 > --- /dev/null > +++ b/gcc/testsuite/g++.target/powerpc/pr99842.C > @@ -0,0 +1,188 @@ > +/* PR target/99842 */ > +/* { dg-require-effective-target power10_ok } */ > +/* { dg-options "-O3 -mdejagnu-cpu=power10 -Wno-return-type" } */ > + > +/* Verify we do not ICE on the following noisy creduced test case. */ > + > +enum { a, b, c, d }; > +template <typename> struct e; > +template <typename g, typename h, typename k> struct e<g(h, k)> { > + typedef h f; > +}; > +template <typename> struct ac; > +template <typename ab> struct ac<const ab> : ac<ab> {}; > +template <typename> struct l; > +template <typename, int, int m, int = 0, int = a, int = m> class n; > +template <typename> class o; > +template <typename, typename, typename> class ag; > +template <typename, typename, int = c> class af; > +template <typename> struct ad; > +template <typename ab> struct an { > + typedef n<typename ab ::ah, ac<ab>::ai, ac<ab>::aj> f; > +}; > +template <typename al> struct am { typedef o<al> f; }; > +template <typename al, typename = typename ac<al>::ao, > + typename = typename ac<al>::av> > +struct ak; > +template <typename al, typename ao> struct ak<al, ao, int> { > + typedef typename am<al>::f f; > +}; > +template <typename, typename, typename> struct aq; > +template <typename ar, typename as> struct aq<ar, ar, as> { typedef ar at; }; > +template <typename ap> ap bf(const typename ad<ap>::f *); > +template <typename ap, int> ap aw(typename ad<ap>::f *ax) { return > bf<ap>(ax); } > +typedef __attribute__((altivec(vector__))) double au; > +template <> struct ad<au> { typedef double f; }; > +template <> au bf(const double *ax) { return __builtin_vec_vsx_ld(0, ax); } > +template <typename> struct az {}; > +template <typename al> class o : public l<al> { > +public: > + typedef typename ac<al>::ah ah; > + template <typename ay> al &operator+=(const o<ay> &); > +}; > +template <typename> struct l {}; > +template <typename ba, typename bb, int bd> struct ac<af<ba, bb, bd>> { > + typedef typename ba::ah ah; > + enum { ai, aj }; > +}; > +template <typename, typename, int bd> > +class af > + : public ak< > + af<ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, > + n<double, -1, 1, 3>, bd>, > + int, int>::f {}; > +template <typename, typename, typename> struct be; > +template <typename bj, typename bg, typename g> void bi(bj, bg bm, g) { > + typename an<bg>::f bk(bm); > +} > +template <typename bj, typename bg, typename g> void bl(bj, bg bm, g bp) { > + be<bj, bg, g>::bn(a, bm, bp); > +} > +template <typename, typename, typename, typename> struct bo; > +class bs { > +public: > + bs(double *, int); > + double &operator()(int, int) { return bq[br]; } > + template <typename bw, int> bw bt(int i, int j) { > + double &bu = operator()(i, j); > + return aw<bw, b>(&bu); > + } > + double *bq; > + int br; > +}; > +class ca : public bs { > +public: > + ca(double *by, int bz) : bs(by, bz) {} > +}; > +template <typename al> class ce : public am<al>::f { > +protected: > + template <typename ay> void cb(l<ay>) { > + af<ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, > + n<double, -1, 1, 3>> > + cc; > + bl(0, cc, az<typename ay::ah>()); > + } > + template <typename> void ch(long); > + template <typename ay> void ch(l<ay> cf) { cb(cf); } > +}; > +template <typename cg, int aa, int m, int cl, int ci, int cj> > +struct ac<n<cg, aa, m, cl, ci, cj>> { > + typedef cg ah; > + typedef int av; > +}; > +template <typename cg, int, int m, int, int, int> > +class n : public ce<n<cg, m, c>> { > +public: > + template <typename ab> n(ab p) { n::template ch<ab>(p); } > +}; > +template <typename bc, typename ba, typename bb> struct ac<ag<bc, ba, bb>> { > + typedef ba ao; > + typedef typename e<bc(typename ba::ah, typename bb::ah)>::f ah; > + typedef typename aq<typename ac<ba>::av, typename ac<bb>::av, bc>::at av; > +}; > +template <typename> class cm; > +template <typename, typename r, typename cs> > +class ag > + : public cm<typename aq<typename ac<r>::av, typename ac<cs>::av, > int>::at> { > +}; > +template <typename> > +class cm : public ak<ag<int, n<double, 1, 1>, n<double, 1, 1>>>::f {}; > +template <typename al> > +template <typename ay> > +al &o<al>::operator+=(const o<ay> &) { > + af<ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, > + n<double, -1, 1, 3>> > + co; > + bi(0, co, int()); > +} > +enum { cp }; > +template <int> struct cq; > +template <typename> struct cr { > + enum { q }; > + enum { ae = cq<q>::at }; > +}; > +template <> struct cq<cp> { > + enum { at = d }; > +}; > +struct t { > + template <typename ba, typename bb, typename s> static void bn(ba, bb, s) { > + typedef typename bb::ah x; > + x u; > + bo<long, ca, x, ca>::bn(0, 0, ca(0, 0), ca(&u, 1), 0, 0, 0); > + } > +}; > +template <typename, typename bb, int = cr<bb>::ae> struct cu; > +template <typename cd, typename ba, typename bb, int ct, typename ah> > +struct be<cd, af<ba, bb, ct>, az<ah>> { > + static void bn(cd, af<ba, bb> bm, az<ah>) { > + ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>> da; > + cu<ba, bb>::cv(c, da, bm); > + } > +}; > +template <typename al> struct cw { > + template <typename bj> > + static void > + cv(bj, ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, > + n<double, -1, 1, 3> bx) { > + double alpha; > + ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>> bh; > + al::cx(c, bh, bx, alpha); > + } > +}; > +template <typename ba, typename bb> struct cu<ba, bb, d> : cw<cu<ba, bb>> { > + template <typename s> static void cx(s, ba, bb bx, typename af<ba, > bb>::ah) { > + ba cz; > + t::bn(cz, bx, c); > + } > +}; > +template <typename dj, typename, bool> > +void db(__vector_quad *, __vector_pair &, dj); > +template <typename, typename, typename, typename, typename, typename, int> > +void dc(ca alhs) { > + typedef au dj; > + typedef au dd; > + ca bh(alhs); > + enum { de }; > + __vector_quad df, dg; > + int j; > + dd v; > + __vector_pair dh; > + __builtin_mma_assemble_pair( > + &dh, (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j), > + (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j)); > + db<dj, dd, true>(&df, dh, v); > + __vector_pair di; > + __builtin_mma_assemble_pair( > + &di, (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j), > + (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j)); > + db<dj, dd, true>(&dg, di, v); > +} > +template <typename bv, typename w, typename cy> struct bo<bv, w, double, cy> > { > + static void bn(bv, bv, w bh, cy, double, bv, double) { > + dc<bv, double, w, double, cy, double, d>(bh); > + } > +}; > +void dm() { > + n<double, 1, 1> dk(1), y(0); > + y += dk; > +} > </cut> _______________________________________________ linaro-toolchain mailing list -- linaro-toolchain@lists.linaro.org To unsubscribe send an email to linaro-toolchain-le...@lists.linaro.org