void FirScalarCodeContainer::dumpCompute(FIRInstVisitor& firvisitor, ostream* dst) { *dst << "======= Compute DSP ==========" << std::endl << std::endl; ForLoopInst* loop = fCurLoop->generateScalarLoop("count"); // Complexity estimation dumpCost(loop, dst); loop->accept(&firvisitor); *dst << std::endl; }
void JAVACodeContainer::produceInternal() { int n = 1; // Global declarations tab(n, *fOut); fCodeProducer.Tab(n); //generateGlobalDeclarations(&fCodeProducer); tab(n, *fOut); *fOut << "final class " << fKlassName << " {"; tab(n+1, *fOut); tab(n+1, *fOut); // Fields fCodeProducer.Tab(n+1); generateDeclarations(&fCodeProducer); tab(n+1, *fOut); // fKlassName used in method naming for subclasses produceInfoFunctions(n+1, fKlassName, false); // Inits tab(n+1, *fOut); *fOut << "void instanceInit" << fKlassName << "(int samplingFreq) {"; tab(n+2, *fOut); fCodeProducer.Tab(n+2); generateInit(&fCodeProducer); tab(n+1, *fOut); *fOut << "}"; // Fill string counter = "count"; if (fSubContainerType == kInt) { tab(n+1, *fOut); *fOut << "void fill" << fKlassName << subst("(int $0, int[] output) {", counter); } else { tab(n+1, *fOut); *fOut << "void fill" << fKlassName << subst("(int $0, $1[] output) {", counter, ifloat()); } tab(n+2, *fOut); fCodeProducer.Tab(n+2); generateComputeBlock(&fCodeProducer); ForLoopInst* loop = fCurLoop->generateScalarLoop(counter); loop->accept(&fCodeProducer); tab(n+1, *fOut); *fOut << "}"; tab(n, *fOut); *fOut << "};" << endl; // Memory methods (as globals) tab(n, *fOut); *fOut << fKlassName << " new" << fKlassName << "() {" << "return new "<< fKlassName << "()" << "; }"; tab(n, *fOut); *fOut << "void delete" << fKlassName << "(" << fKlassName <<" dsp) {}"; tab(n, *fOut); }
ForLoopInst* CodeLoop::generateScalarLoop(const string& counter) { DeclareVarInst* loop_decl = InstBuilder::genDecLoopVar(fLoopIndex, InstBuilder::genBasicTyped(Typed::kInt), InstBuilder::genIntNumInst(0)); ValueInst* loop_end = InstBuilder::genLessThan(loop_decl->load(), InstBuilder::genLoadFunArgsVar(counter)); StoreVarInst* loop_increment = loop_decl->store(InstBuilder::genAdd(loop_decl->load(), 1)); BlockInst* block = InstBuilder::genBlockInst(); pushBlock(fPreInst, block); pushBlock(fComputeInst, block); pushBlock(fPostInst, block); BasicCloneVisitor cloner; ForLoopInst* loop = InstBuilder::genForLoopInst(loop_decl, loop_end, loop_increment, block); return dynamic_cast<ForLoopInst*>(loop->clone(&cloner)); }
void JAVAScalarCodeContainer::generateCompute(int n) { tab(n+1, *fOut); tab(n+1, *fOut); *fOut << subst("public void compute(int $0, $1[][] inputs, $1[][] outputs) {", fFullCount, ifloat()); tab(n+2, *fOut); fCodeProducer.Tab(n+2); // Generates local variables declaration and setup generateComputeBlock(&fCodeProducer); // Generates one single scalar loop ForLoopInst* loop = fCurLoop->generateScalarLoop(fFullCount); loop->accept(&fCodeProducer); tab(n+1, *fOut); *fOut << "}"; }