/**
* @brief Construct nested transfer loop-nest that correponds to a given Shuffle instruction
*/
-TransferNest as_nest(const coco::Shuffle *shuffle)
+TransferNest as_nest(const TransferSequence &seq)
{
TransferNest nest;
- TransferSequence seq = as_transfer_sequence(shuffle);
auto beg = seq.begin();
auto end = seq.end();
//
// Analyze 'Shuffle' pattern, and convert it as nested loops
//
- auto nest = as_nest(shuffle);
- assert(shuffle->into()->size() % loop_count(nest) == 0);
- uint32_t window = shuffle->into()->size() / loop_count(nest);
+ auto tseq = as_transfer_sequence(shuffle);
+ auto nest = as_nest(tseq);
+ assert(tseq.size() % loop_count(nest) == 0);
+ uint32_t window = tseq.size() / loop_count(nest);
//
// Generate loop body
const auto src_base = pp::fmt("reinterpret_cast<const float *>(", _mem.base(from), ")");
const auto dst_base = pp::fmt("reinterpret_cast<float *>(", _mem.base(into), ")");
- loop_body.front().append(dst_base, "[", dst_index, " + ", n, "] = ", src_base, "[", src_index,
- " + ", shuffle->at(n).value(), "];");
+ loop_body.front().append(dst_base, "[", dst_index, " + ", tseq.at(n).into(), "] = ", src_base,
+ "[", src_index, " + ", tseq.at(n).from(), "];");
}
pp::LinearDocument res;