virtual std::string evaluate(index_tuple const & index, unsigned int /*simd_element*/) const { if(!access_name_.empty()) return access_name_; else return generate_default(index); }
void write_back(std::pair<std::string, std::string> const & index, std::set<std::string> & fetched, utils::kernel_generation_stream & stream) { std::string old_access_name = access_name_ ; access_name_ = ""; if(fetched.find(name_)!=fetched.end()){ stream << generate_default(index) << " = " << old_access_name << ';' << std::endl; fetched.erase(name_); } }
void fetch(std::pair<std::string, std::string> const & index, unsigned int vectorization, std::set<std::string> & fetched, utils::kernel_generation_stream & stream) { std::string new_access_name = name_ + "_private"; if(fetched.find(name_)==fetched.end()){ stream << scalartype_; if(vectorization > 1) stream << vectorization; stream << " " << new_access_name << " = " << generate_default(index) << ';' << std::endl; fetched.insert(name_); } access_name_ = new_access_name; }
virtual std::string generate(std::pair<std::string, std::string> const & index, int) const{ if(!access_name_.empty()) return access_name_; else return generate_default(index); }