at.dms.kjc.spacetime
Class BufferedCommunication

java.lang.Object
  extended by at.dms.kjc.spacetime.RawExecutionCode
      extended by at.dms.kjc.spacetime.BufferedCommunication
All Implemented Interfaces:
Constants
Direct Known Subclasses:
Linear

public class BufferedCommunication
extends RawExecutionCode
implements Constants

This class implements filter communication with a peek buffer. The peek buffer can either be circular with and'ing or linear with reseting of indices. This class follows the RawExecutionCode model and defines classes for calculating and retrieving the init, prime pump, and steady-state methods for the given filter of the slice that this object is used for. RawComputeCodeStore uses this when it is constructing each tile's compute code.

Author:
mgordon

Field Summary
 
Fields inherited from class at.dms.kjc.spacetime.RawExecutionCode
ARRAY_COPY, ARRAY_INDEX, arrayReceiveMethod, exeIndex, exeIndex1, filterInfo, gdnInput, gdnOutput, gdnReceiveMethod, gdnSendMethod, generatedVariables, initSchedFunction, initStage, INLINE_WORK, layout, primePumpMethod, primePumpStage, rateMatchSendMethod, recvBuffer, recvBufferBits, recvBufferIndex, recvBufferSize, recvIndex, sendBuffer, sendBufferIndex, simpleIndex, staticReceiveMethod, staticSendMethod, steadySchedFunction, steadyStage, structReceiveMethodPrefix, structReceivePrefix, structReceivePrefixDynamic, structReceivePrefixStatic, tile, uniqueID, workCounter
 
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
BufferedCommunication(RawTile tile, FilterInfo filterInfo, Layout layout)
          Create a new Buffered communication object that will be used to generate code for the FilterTraceNode described by filterInfo.
 
Method Summary
 JMethodDeclaration[] getHelperMethods()
          Return an array of methods for any helper methods that we create or that were present in this filter.
 JMethodDeclaration getInitStageMethod()
          Calculate and return the method that implements the init stage computation for this filter.
 JMethodDeclaration getPrimePumpMethod()
          Calculate and return the method that will implement one execution of this filter in the primepump stage.
 JBlock getSteadyBlock()
          Return the block that implements this filter in the steady state.
 JFieldDeclaration[] getVarDecls()
          Return an array of JFieldDecl's that need to be added to the fields of this tile becuase they are generated by this pass.
protected  JStatement getWorkFunctionCall(FilterContent filter)
          Return the code that will call the work work function once.
 
Methods inherited from class at.dms.kjc.spacetime.RawExecutionCode
boundToSwitchStmt, constToSwitchStmt, gdnCacheAlign, gdnDisregardIncoming, gdnDummyOutgoing, gdnReceive, getUniqueID, sendRatesToSwitch, setDynMsgHeader, setupGDNStore
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BufferedCommunication

public BufferedCommunication(RawTile tile,
                             FilterInfo filterInfo,
                             Layout layout)
Create a new Buffered communication object that will be used to generate code for the FilterTraceNode described by filterInfo.

Parameters:
tile - The tile assigned to filterInfo
filterInfo - The filter we this is going to generate code for.
layout - The layout of the entire application.
Method Detail

getVarDecls

public JFieldDeclaration[] getVarDecls()
Return an array of JFieldDecl's that need to be added to the fields of this tile becuase they are generated by this pass.

Specified by:
getVarDecls in class RawExecutionCode
Returns:
fields that are created by this pass and used in its generated code.

getHelperMethods

public JMethodDeclaration[] getHelperMethods()
Return an array of methods for any helper methods that we create or that were present in this filter. They need to be added to the methods of the entire tile.

Specified by:
getHelperMethods in class RawExecutionCode
Returns:
helper methods that need to be placed in the tile's code.

getPrimePumpMethod

public JMethodDeclaration getPrimePumpMethod()
Calculate and return the method that will implement one execution of this filter in the primepump stage. This method may be called multiple times depending on the number of stages in the primepump stage itself.

Specified by:
getPrimePumpMethod in class RawExecutionCode
Returns:
The method that implements one stage of the primepump exeuction of this filter.

getInitStageMethod

public JMethodDeclaration getInitStageMethod()
Calculate and return the method that implements the init stage computation for this filter. It should be called only once in the generated code.

This does not include the call to the init function of the filter. That is done in ComputeCodeStore.addInitFunctionCall(at.dms.kjc.JMethodDeclaration).

Specified by:
getInitStageMethod in class RawExecutionCode
Returns:
The method that implements the init stage for this filter.

getSteadyBlock

public JBlock getSteadyBlock()
Return the block that implements this filter in the steady state. It may be a functino call to the work function or the inlined work function itself.

Specified by:
getSteadyBlock in class RawExecutionCode
Returns:
The steady-state code for one complete steady-state firing of the filter.
See Also:
RawExecutionCode.INLINE_WORK

getWorkFunctionCall

protected JStatement getWorkFunctionCall(FilterContent filter)
Return the code that will call the work work function once. It will either be the entire function inlined or a function call.

Parameters:
filter - The filter content for this filter.
Returns:
The code to execute the work function once.
See Also:
RawExecutionCode.INLINE_WORK