static int applicable0(const solver *ego_, const problem *p_, const planner *plnr, int *dp) { const S *ego = (const S *) ego_; const problem_dft *p = (const problem_dft *) p_; return (1 && plnr->nthr > 1 && FINITE_RNK(p->vecsz->rnk) && p->vecsz->rnk > 0 && pickdim(ego, p->vecsz, p->ri != p->ro, dp) ); }
static int applicable0(const solver *ego_, const problem *p_, int *dp) { const S *ego = (const S *) ego_; const problem_rdft2 *p = (const problem_rdft2 *) p_; if (FINITE_RNK(p->vecsz->rnk) && p->vecsz->rnk > 0 && pickdim(ego, p->vecsz, p->r0 != p->cr, dp)) { if (p->r0 != p->cr) return 1; /* can always operate out-of-place */ return(X(rdft2_inplace_strides)(p, *dp)); } return 0; }
static int applicable0(const solver *ego_, const problem *p_, int *dp) { if (DFTP(p_)) { const S *ego = (const S *) ego_; const problem_dft *p = (const problem_dft *) p_; return (1 && FINITE_RNK(p->vecsz->rnk) && p->vecsz->rnk > 0 && pickdim(ego, p->vecsz, p->ri != p->ro, dp) ); } return 0; }
static int applicable0(const solver *ego_, const problem *p_, int *dp) { const S *ego = (const S *) ego_; const problem_dft *p = (const problem_dft *) p_; return (1 && FINITE_RNK(p->vecsz->rnk) && p->vecsz->rnk > 0 /* do not bother looping over rank-0 problems, since they are handled via rdft */ && p->sz->rnk > 0 && pickdim(ego, p->vecsz, p->ri != p->ro, dp) ); }
static int applicable0(const solver *ego_, const problem *p_, const planner *plnr, int *pdim0, int *pdim1) { const problem_dft *p = (const problem_dft *) p_; UNUSED(ego_); UNUSED(plnr); return (1 && FINITE_RNK(p->vecsz->rnk) && FINITE_RNK(p->sz->rnk) /* FIXME: can/should we relax this constraint? */ && X(tensor_inplace_strides2)(p->vecsz, p->sz) && pickdim(p->vecsz, p->sz, pdim0, pdim1) /* output should not *already* include the transpose (in which case we duplicate the regular indirect.c) */ && (p->sz->dims[*pdim1].os != p->vecsz->dims[*pdim0].is) ); }