at.dms.kjc.spacedynamic
Class RawExecutionCode

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.spacedynamic.RawExecutionCode
All Implemented Interfaces:
Constants, DeepCloneable, FlatVisitor, Serializable

public class RawExecutionCode
extends Utils
implements FlatVisitor, Constants

This pass creates the SIR necessary for each filter of the StreamGraph to execute on Raw. It creates SIR to handle the communication for filters by possibly creating a buffer or a circular buffer (see BufferedCommmunication.java) or no buffer (See DirectionCommunication.java).

Author:
mgordon
See Also:
Serialized Form

Field Summary
static String ARRAY_COPY
           
static String ARRAY_INDEX
           
static String arrayReceiveMethod
           
static String exeIndex
           
static String exeIndex1
           
static String initSchedFunction
           
static boolean INLINE_WORK
          if this is true, then inline the work function calls (for each of the code generation schemes), if work remains a function and is called.
static String peekDynamic
          the name of the peek method for each filter when the filter has dynamic input and we are not inlining the method
static String popDynamic
          the name of the pop mehtod for each filter when the filter has dynamic input and we are not inlining
static String rateMatchSendMethod
           
static String rawMain
           
static String receiveMethod
           
static String recvBuffer
          fields for the var names we introduce **
static String recvBufferBits
           
static String recvBufferIndex
           
static String recvBufferSize
           
static String recvIndex
           
static String sendBuffer
           
static String sendBufferIndex
           
static String simpleIndex
           
static String steadySchedFunction
           
static String structReceivePrefix
           
static String structReceivePrefixDynamic
           
static String structReceivePrefixStatic
           
 
Fields inherited from class at.dms.util.Utils
EMPTY_LIST, getForLoopCallers
 
Fields inherited from interface at.dms.kjc.Constants
CMP_VERSION, JAV_CLASS, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_THIS, JAV_THROWABLE, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LE, OPE_LNOT, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BIT, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VECTOR, TID_VOID, VECTOR_EMPTY
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INLINE, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
RawExecutionCode(SpdStaticStreamGraph ssg)
           
 
Method Summary
 void calculateItems(SIRFilter filter)
           
static void doit(SpdStreamGraph streamGraph)
           
static JBlock executeWorkFunction(SIRFilter filter)
          This method is used by the various code generation schemes to return the statement that executes a work function call.
 int getBottomPeek()
           
 int getInitFire()
           
 int getRemaining()
           
static JStatement makeForLoop(JStatement body, JLocalVariable var, JExpression count)
          Returns a for loop that uses field
 void visitNode(FlatNode node)
          The visitor must define this method that will be called once on each FlatNode that is down stream of the accepting node.
 
Methods inherited from class at.dms.util.Utils
asPercent, cellMathEquivalent, cMathEquivalent, cppMathEquivalent, deepClone, deepCloneInto, equalArrays, fail, getEnvironmentVariable, getExpression, hasPeeks, initArray, initArray, initLiteralArray, intArrayToList, isMathMethod, isUniform, kopi_assert, kopi_assert, makeCountdownForLoop, makeDotFileName, makeForLoop, makeForLoop, makeForLoop, makeForLoopFieldIndex, makeForLoopLocalIndex, nextPow2, passThruParens, peelMarkers, popBeforePeek, readFile, removeUnusedPops, replaceAll, setupDotFileName, simplifyMathMethod, splitQualifiedName, splitQualifiedName, toArray, toIntArray, toVector, voidToInt, writeFile
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INLINE_WORK

public static boolean INLINE_WORK
if this is true, then inline the work function calls (for each of the code generation schemes), if work remains a function and is called.


recvBuffer

public static String recvBuffer
fields for the var names we introduce **


recvBufferSize

public static String recvBufferSize

recvBufferBits

public static String recvBufferBits

sendBuffer

public static String sendBuffer

sendBufferIndex

public static String sendBufferIndex

rateMatchSendMethod

public static String rateMatchSendMethod

recvBufferIndex

public static String recvBufferIndex

recvIndex

public static String recvIndex

simpleIndex

public static String simpleIndex

exeIndex

public static String exeIndex

exeIndex1

public static String exeIndex1

ARRAY_INDEX

public static String ARRAY_INDEX

ARRAY_COPY

public static String ARRAY_COPY

initSchedFunction

public static String initSchedFunction

steadySchedFunction

public static String steadySchedFunction

receiveMethod

public static String receiveMethod

structReceivePrefix

public static String structReceivePrefix

structReceivePrefixStatic

public static String structReceivePrefixStatic

structReceivePrefixDynamic

public static String structReceivePrefixDynamic

popDynamic

public static String popDynamic
the name of the pop mehtod for each filter when the filter has dynamic input and we are not inlining


peekDynamic

public static String peekDynamic
the name of the peek method for each filter when the filter has dynamic input and we are not inlining the method


arrayReceiveMethod

public static String arrayReceiveMethod

rawMain

public static String rawMain
Constructor Detail

RawExecutionCode

public RawExecutionCode(SpdStaticStreamGraph ssg)
Method Detail

doit

public static void doit(SpdStreamGraph streamGraph)

visitNode

public void visitNode(FlatNode node)
Description copied from interface: FlatVisitor
The visitor must define this method that will be called once on each FlatNode that is down stream of the accepting node.

Specified by:
visitNode in interface FlatVisitor
Parameters:
node - the node that is being currently visited.

calculateItems

public void calculateItems(SIRFilter filter)

makeForLoop

public static JStatement makeForLoop(JStatement body,
                                     JLocalVariable var,
                                     JExpression count)
Returns a for loop that uses field
var
to count
count
times with the body of the loop being
body
. If count is non-positive, just returns empty (!not legal in the general case)


executeWorkFunction

public static JBlock executeWorkFunction(SIRFilter filter)
This method is used by the various code generation schemes to return the statement that executes a work function call. If we are inlining work, it will return the cloned work body block, otherwise it will return a method call for the work function. Return a block so that we can add statements to the block if necessary.


getBottomPeek

public int getBottomPeek()

getInitFire

public int getInitFire()

getRemaining

public int getRemaining()