generate code to access input values in the kernel
| 76 | |
| 77 | //! generate code to access input values in the kernel |
| 78 | void gen_input_code( |
| 79 | str_util::StrReplaceMap& replace_map, VarNode2AST& var2ast, |
| 80 | const JITExecutor::Args& args, const PlaceholderArray& placeholders) { |
| 81 | std::string decl_exps_str, assign_exps_str, decl_fastdiv_offset_str; |
| 82 | for (size_t i = 0; i < args.inputs.size(); i++) { |
| 83 | ASTPtr elem_var = ASTPtr::make<VariableAST>("x" + std::to_string(i)); |
| 84 | ASTPtr elem_val = gen_data_ast(i, args.inputs[i]); |
| 85 | ASTPtr elem_decl = |
| 86 | ASTPtr::make<DeclFloatAST>(elem_var, CompNode::DeviceType::CUDA); |
| 87 | ASTPtr elem_assign = ASTPtr::make<AssignAST>(elem_var, elem_val); |
| 88 | var2ast[placeholders[args.inputs[i].idx]->output(0)] = elem_var; |
| 89 | decl_exps_str += elem_decl->code_gen(); |
| 90 | assign_exps_str += elem_assign->code_gen(); |
| 91 | |
| 92 | ASTPtr offset_var = ASTPtr::make<VariableAST>("offset_" + std::to_string(i)); |
| 93 | ASTPtr offset_decl = ASTPtr::make<DeclIntAST>(offset_var); |
| 94 | decl_fastdiv_offset_str += offset_decl->code_gen(); |
| 95 | } |
| 96 | str_util::append_replace_map( |
| 97 | replace_map, {{"{{DECL_fastdiv_offset}}", decl_fastdiv_offset_str}, |
| 98 | {"{{DECL_EXPRS}}", decl_exps_str}, |
| 99 | {"{{ASSIGN_EXPRS}}", assign_exps_str}}); |
| 100 | } |
| 101 | |
| 102 | ASTPtr gen_opr_ast(cg::OperatorNodeBase* opr, const VarNode2AST& var2ast) { |
| 103 | ASTPtrArray cur_inputs; |
no test coverage detected