block.addStatement(makeForLoop(send, localVariables.exeIndex,
block.addStatement(RawExecutionCode.makeForLoop(send, localVariables.exeIndex,
    JStatement generateRateMatchSteadyState(SIRFilter filter,            LocalVariables localVariables) {        JBlock block = new JBlock(null, new JStatement[0], null);        int steady = ssg.getMult(layout.getNode(layout.getTile(filter)), false);        // reset the simple index        if (isSimple(filter)) {            block.addStatement(new JExpressionStatement(null,                    (new JAssignmentExpression(null,                            new JLocalVariableExpression(null,                                    localVariables.simpleIndex),                            new JIntLiteral(-1))), null));        }        // should be at least peek - pop items in the buffer, so        // just receive pop * steady in the buffer and we can        // run for an entire steady state        block.addStatement(makeForLoop(receiveCode(filter, filter                .getInputType(), localVariables), localVariables.exeIndex,                new JIntLiteral(filter.getPopInt() * steady)));        if (filter.getPushInt() > 0) {            // reset the send buffer index            block.addStatement(new JExpressionStatement(null,                    new JAssignmentExpression(null,                            new JLocalVariableExpression(null,                                    localVariables.sendBufferIndex),                            new JIntLiteral(-1)), null));        }        // now, run the work function steady times...        JBlock workBlock = (JBlock) ObjectDeepCloner.deepCopy(filter.getWork()                .getBody());        // convert all of the push expressions in the steady state work block        // into        // stores to the output buffer        workBlock.accept(new RateMatchConvertPush(localVariables));        // if we are in debug mode, print out that the filter is firing        if (SpaceDynamicBackend.FILTER_DEBUG_MODE) {            block.addStatement(new SIRPrintStatement(null, new JStringLiteral(                    null, filter.getName() + " firing.\\n"), null));        }        // add the cloned work function to the block        block.addStatement(makeForLoop(workBlock, localVariables.exeIndex,                new JIntLiteral(steady)));        // now add the code to push the output buffer onto the static network        // and        // reset the output buffer index        // for (steady*push*typesize)        // push(__SENDBUFFER__[++ __SENDBUFFERINDEX__])        if (filter.getPushInt() > 0) {            SIRPushExpression pushExp = new SIRPushExpression(                    new JArrayAccessExpression(null,                            new JLocalVariableExpression(null,                                    localVariables.sendBuffer),                            new JLocalVariableExpression(null,                                    localVariables.exeIndex)));            pushExp.setTapeType(Util.getBaseType(filter.getOutputType()));            JExpressionStatement send = new JExpressionStatement(null, pushExp,                    null);            block.addStatement(makeForLoop(send, localVariables.exeIndex,                    new JIntLiteral(steady * filter.getPushInt()                            * Util.getTypeSize(filter.getOutputType()))));        }        // if we are in decoupled mode do not put the work function in a for        // loop        // and add the print statements        if (KjcOptions.decoupled) {            block.addStatementFirst(new SIRPrintStatement(null,                    new JIntLiteral(0), null));            block.addStatement(block.size(), new SIRPrintStatement(null,                    new JIntLiteral(1), null));            return block;        }        // return the infinite loop        return new JWhileStatement(null, new JBooleanLiteral(null, true),                block, null);    }