blob: b3bc3e24682d5674acffb173142d2bad3813b3bb [file] [log] [blame]
/* { dg-do compile } */
/* { dg-additional-options "-O2 -std=gnu++11 -w" } */
namespace c {
typedef int d;
template <typename e> struct f { typedef e g; };
template <bool, typename> struct h;
template <typename e> e aa(typename f<e>::g i) { return i; }
template <typename, typename> struct j {};
template <d, typename> struct k;
template <class l, class m> struct k<1, j<l, m>> { typedef m g; };
template <d n, class l, class m> typename k<n, j<l, m>>::g ab(j<l, m>);
} // namespace c
typedef long d;
typedef char o;
typedef int p;
typedef char q;
typedef int r;
namespace {
struct s;
constexpr d t = 6;
template <typename> class ad {
public:
static constexpr d u = t;
d v();
d x();
d y();
};
class z : public ad<int> {};
struct ae {
p af;
};
class ag {
public:
ae ah();
};
} // namespace
typedef __Int32x4_t ai;
typedef struct {
ai aj[2];
} ak;
typedef int al;
void am(p *a, ai b) { __builtin_aarch64_st1v4si(a, b); }
namespace an {
class ao {
public:
bool operator==(ao);
d v();
d x();
};
class ap : public ad<r> {};
class aq {
public:
c::j<int, int> ar();
int as();
int at();
};
class au {
public:
virtual d av(d);
virtual ap aw();
virtual ag ax();
};
class ay {};
class az {
virtual void ba(const ay &, const s &);
};
using bb = az;
class bc;
class bd : bb {
void ba(const ay &, const s &);
bc *be;
bc *bf;
bc *bg;
aq bh;
int bi;
int bj;
ao bk;
};
namespace bl {
namespace bm {
namespace bn {
class bo;
}
} // namespace bm
} // namespace bl
namespace bn {
template <typename ac = c::h<0, bl::bm ::bn::bo>>
ai bp(ac *, ac *, ac *, al, al, al, d, p);
template <typename ac = c::h<0, bl::bm ::bn::bo>>
ak bq(ac *br, ac *bs, ac *bt, al bu, al bv, al bw, d bx, int, int by) {
ak{bp(br, bs, bt, bu, bv, bw, bx, by), bp(br, bs, bt, bu, bv, bw, bx, by)};
}
template <typename ac = c::h<0, bl::bm ::bn::bo>>
ak bz(ac *, ac *, ac *, al, al, al &, int, p);
template <int> void ca(p *, const ak &);
template <> void ca<1>(p *buffer, const ak &cb) {
am(buffer, cb.aj[0]);
am(buffer + 4, cb.aj[1]);
}
int cc(int, int);
} // namespace bn
class bc {
public:
virtual au *cd();
};
class ce {
public:
q *cf();
};
template <d> struct cg {
template <typename ch> static void ci(ay, z cj, ch ck) { ck(cj); }
};
template <typename ch> void cl(ay w, ch ck) {
z cj;
cg<z::u>::ci(w, cj, c::aa<ch>(ck));
}
namespace {
template <typename T1, typename cm, int cn> class co {
public:
static void convolve(ay, int cs, bc *cp, bc *cq, bc *cr, aq cw, int, ao ct) {
int by = cp->cd()->ax().ah().af;
int cu = cq->cd()->ax().ah().af;
cp->cd()->aw().v();
int cv = cp->cd()->aw().x();
cp->cd()->aw().y();
cp->cd()->aw();
int da = cr->cd()->aw().x();
int cx = cq->cd()->aw().x();
cq->cd()->aw().y();
int cy = cr->cd()->av(0);
int cz = cr->cd()->av(1);
bn::cc(cs, cn);
int de = c::ab<1>(cw.ar());
cw.as();
cw.at();
ay db;
ce dc;
ce dd;
ce w;
q *di = w.cf();
cl(db, [&](z) {
int df;
dc;
di;
cx;
auto dg(cu);
auto dh(cu);
auto dl(cu);
for (; cz; df += de) {
auto br = reinterpret_cast<T1 *>(cv);
auto bs = reinterpret_cast<T1 *>(cv);
auto bt = reinterpret_cast<T1 *>(df * ct.x());
auto dj = reinterpret_cast<cm *>(dd.cf() + da);
for (int dk; dk < cy; dk += cs, dj += cs)
if (ct == ao()) {
auto vres = bn::bz(br, bs, bt, dg, dh, dl, cn, by);
bn::ca<cn>(dj, vres);
} else
bn::bq(br, bs, bt, dg, dh, dl, ct.v(), cn, by);
}
});
}
};
template <typename T1, typename cm>
void bz(ay dm, int cs, bc *cp, bc *cq, bc *cr, aq cw, int dn, ao ct) {
co<T1, cm, 1>::convolve(dm, cs, cp, cq, cr, cw, dn, ct);
co<T1, cm, 2>::convolve(dm, cs, cp, cq, cr, cw, dn, ct);
}
} // namespace
void bd::ba(const ay &dm, const s &) {
bz<o, p>(dm, bi, be, bg, bf, bh, bj, bk);
}
} // namespace an