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

Reply via email to