at.dms.kjc.cluster
Class CodeEstimate

java.lang.Object
  extended by at.dms.kjc.KjcEmptyVisitor
      extended by at.dms.kjc.SLIREmptyVisitor
          extended by at.dms.kjc.cluster.CodeEstimate
All Implemented Interfaces:
Constants, KjcVisitor, SLIRVisitor

public class CodeEstimate
extends SLIREmptyVisitor

Estimates the code size and size of local variables for a SIRFilter


Field Summary
 
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
 
Method Summary
static CodeEstimate estimate(SIRFilter filter)
          Creates a new instance of CodeEstimate and passes a filter to it.
static int estimateCode(SIRFilter filter)
          Returns estimated code size.
static int estimateLocals(SIRFilter filter)
          Returns estimated size of locals.
 int getCodeSize()
          Returns size of code
 int getLocalsSize()
          Returns size of locals
 void visitArrayAccessExpression(JArrayAccessExpression self, JExpression prefix, JExpression accessor)
          visits an array access expression
 void visitBinaryExpression(JBinaryExpression self, String oper, JExpression left, JExpression right)
          visits a binary expression
 void visitBitwiseComplementExpression(JUnaryExpression self, JExpression expr)
          visits a bitwise complement expression
 void visitConditionalExpression(JConditionalExpression self, JExpression cond, JExpression left, JExpression right)
          visits a conditional expression
 void visitFieldExpression(JFieldAccessExpression self, JExpression left, String ident)
          visits a field expression
 void visitFilter(SIRFilter self)
          visit a SIRFilter
 void visitForStatement(JForStatement self, JStatement init, JExpression cond, JStatement incr, JStatement body)
          visits a for statement
 void visitLogicalComplementExpression(JUnaryExpression self, JExpression expr)
          visits a logical complement expression
 void visitMethodCallExpression(JMethodCallExpression self, JExpression prefix, String ident, JExpression[] args)
          visits a method call expression
 void visitPeekExpression(SIRPeekExpression self, CType tapeType, JExpression arg)
          visits a peek expression.
 void visitPopExpression(SIRPopExpression self, CType tapeType)
          visits a pop expression.
 void visitPostfixExpression(JPostfixExpression self, int oper, JExpression expr)
          visits a postfix expression
 void visitPrefixExpression(JPrefixExpression self, int oper, JExpression expr)
          visits a prefix expression
 void visitPrintStatement(SIRPrintStatement self, JExpression arg)
          visits a print statement.
 void visitPushExpression(SIRPushExpression self, CType tapeType, JExpression arg)
          visits a push expression.
 void visitUnaryMinusExpression(JUnaryExpression self, JExpression expr)
          visits an unary minus expression
 void visitUnaryPlusExpression(JUnaryExpression self, JExpression expr)
          visits an unary plus expression
 void visitVariableDefinition(JVariableDefinition self, int modifiers, CType type, String ident, JExpression expr)
          visits a variable definition, this increase size of locals
 
Methods inherited from class at.dms.kjc.SLIREmptyVisitor
visitCreatePortalExpression, visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitIdentity, visitInitStatement, visitInlineAssembly, visitInterfaceTable, visitLatency, visitLatencyMax, visitLatencyRange, visitLatencySet, visitMainFunction, visitMarker, visitMessageStatement, visitNode, visitPortal, visitRangeExpression, visitRegisterReceiver, visitRegReceiverStatement, visitRegSenderStatement, visitSetBodyOfFeedback, visitSetChild, visitSetDecode, visitSetDelay, visitSetEncode, visitSetJoiner, visitSetLoopOfFeedback, visitSetParallelStream, visitSetPeek, visitSetPop, visitSetPush, visitSetSplitter, visitSetStreamType, visitSetTape, visitSetWork, visitVectorLiteral, visitWorkEntry, visitWorkExit
 
Methods inherited from class at.dms.kjc.KjcEmptyVisitor
visitArgs, visitArrayInitializer, visitArrayLengthExpression, visitAssignmentExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundAssignmentExpression, visitCompoundStatement, visitCompoundStatement, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldDeclaration, visitFloatLiteral, visitFormalParameters, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLocalVariableExpression, visitLongLiteral, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDeclarationStatement, visitWhileStatement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface at.dms.kjc.KjcVisitor
visitArrayInitializer, visitArrayLengthExpression, visitAssignmentExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundAssignmentExpression, visitCompoundStatement, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldDeclaration, visitFloatLiteral, visitFormalParameters, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLocalVariableExpression, visitLongLiteral, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDeclarationStatement, visitWhileStatement
 

Method Detail

estimate

public static CodeEstimate estimate(SIRFilter filter)
Creates a new instance of CodeEstimate and passes a filter to it. This will result in calculating the size of code and local variables. The size of code and locals will be saved in a cache.

Parameters:
filter - the filter
Returns:
instance of CodeEstimate with code and locals estimates

estimateCode

public static int estimateCode(SIRFilter filter)
Returns estimated code size. If this has already been calculated look up the value in cache. Otherwise do calculation.

Parameters:
filter - the filter
Returns:
estimated size of code

estimateLocals

public static int estimateLocals(SIRFilter filter)
Returns estimated size of locals. If this has already been calculated look up the value in cache. Otherwise do calculation.

Parameters:
filter - the filter
Returns:
estimated size of locals

getLocalsSize

public int getLocalsSize()
Returns size of locals

Returns:
size of locals

getCodeSize

public int getCodeSize()
Returns size of code

Returns:
size of code

visitFilter

public void visitFilter(SIRFilter self)
visit a SIRFilter

Parameters:
self - the filter

visitVariableDefinition

public void visitVariableDefinition(JVariableDefinition self,
                                    int modifiers,
                                    CType type,
                                    String ident,
                                    JExpression expr)
visits a variable definition, this increase size of locals

Specified by:
visitVariableDefinition in interface KjcVisitor
Overrides:
visitVariableDefinition in class KjcEmptyVisitor

visitMethodCallExpression

public void visitMethodCallExpression(JMethodCallExpression self,
                                      JExpression prefix,
                                      String ident,
                                      JExpression[] args)
visits a method call expression

Specified by:
visitMethodCallExpression in interface KjcVisitor
Overrides:
visitMethodCallExpression in class KjcEmptyVisitor

visitForStatement

public void visitForStatement(JForStatement self,
                              JStatement init,
                              JExpression cond,
                              JStatement incr,
                              JStatement body)
visits a for statement

Specified by:
visitForStatement in interface KjcVisitor
Overrides:
visitForStatement in class KjcEmptyVisitor

visitPeekExpression

public void visitPeekExpression(SIRPeekExpression self,
                                CType tapeType,
                                JExpression arg)
visits a peek expression.

Specified by:
visitPeekExpression in interface SLIRVisitor
Overrides:
visitPeekExpression in class SLIREmptyVisitor

visitPopExpression

public void visitPopExpression(SIRPopExpression self,
                               CType tapeType)
visits a pop expression.

Specified by:
visitPopExpression in interface SLIRVisitor
Overrides:
visitPopExpression in class SLIREmptyVisitor

visitPrintStatement

public void visitPrintStatement(SIRPrintStatement self,
                                JExpression arg)
visits a print statement.

Specified by:
visitPrintStatement in interface SLIRVisitor
Overrides:
visitPrintStatement in class SLIREmptyVisitor

visitPushExpression

public void visitPushExpression(SIRPushExpression self,
                                CType tapeType,
                                JExpression arg)
visits a push expression.

Specified by:
visitPushExpression in interface SLIRVisitor
Overrides:
visitPushExpression in class SLIREmptyVisitor

visitUnaryPlusExpression

public void visitUnaryPlusExpression(JUnaryExpression self,
                                     JExpression expr)
visits an unary plus expression

Specified by:
visitUnaryPlusExpression in interface KjcVisitor
Overrides:
visitUnaryPlusExpression in class KjcEmptyVisitor

visitUnaryMinusExpression

public void visitUnaryMinusExpression(JUnaryExpression self,
                                      JExpression expr)
visits an unary minus expression

Specified by:
visitUnaryMinusExpression in interface KjcVisitor
Overrides:
visitUnaryMinusExpression in class KjcEmptyVisitor

visitBitwiseComplementExpression

public void visitBitwiseComplementExpression(JUnaryExpression self,
                                             JExpression expr)
visits a bitwise complement expression

Specified by:
visitBitwiseComplementExpression in interface KjcVisitor
Overrides:
visitBitwiseComplementExpression in class KjcEmptyVisitor

visitLogicalComplementExpression

public void visitLogicalComplementExpression(JUnaryExpression self,
                                             JExpression expr)
visits a logical complement expression

Specified by:
visitLogicalComplementExpression in interface KjcVisitor
Overrides:
visitLogicalComplementExpression in class KjcEmptyVisitor

visitPrefixExpression

public void visitPrefixExpression(JPrefixExpression self,
                                  int oper,
                                  JExpression expr)
visits a prefix expression

Specified by:
visitPrefixExpression in interface KjcVisitor
Overrides:
visitPrefixExpression in class KjcEmptyVisitor

visitPostfixExpression

public void visitPostfixExpression(JPostfixExpression self,
                                   int oper,
                                   JExpression expr)
visits a postfix expression

Specified by:
visitPostfixExpression in interface KjcVisitor
Overrides:
visitPostfixExpression in class KjcEmptyVisitor

visitBinaryExpression

public void visitBinaryExpression(JBinaryExpression self,
                                  String oper,
                                  JExpression left,
                                  JExpression right)
visits a binary expression

Specified by:
visitBinaryExpression in interface KjcVisitor
Overrides:
visitBinaryExpression in class KjcEmptyVisitor

visitConditionalExpression

public void visitConditionalExpression(JConditionalExpression self,
                                       JExpression cond,
                                       JExpression left,
                                       JExpression right)
visits a conditional expression

Specified by:
visitConditionalExpression in interface KjcVisitor
Overrides:
visitConditionalExpression in class KjcEmptyVisitor

visitFieldExpression

public void visitFieldExpression(JFieldAccessExpression self,
                                 JExpression left,
                                 String ident)
visits a field expression

Specified by:
visitFieldExpression in interface KjcVisitor
Overrides:
visitFieldExpression in class KjcEmptyVisitor

visitArrayAccessExpression

public void visitArrayAccessExpression(JArrayAccessExpression self,
                                       JExpression prefix,
                                       JExpression accessor)
visits an array access expression

Specified by:
visitArrayAccessExpression in interface KjcVisitor
Overrides:
visitArrayAccessExpression in class KjcEmptyVisitor