at.dms.kjc.sir.statespace
Class LinearReplacer

java.lang.Object
  extended by at.dms.kjc.sir.EmptyStreamVisitor
      extended by at.dms.kjc.sir.statespace.LinearReplacer
All Implemented Interfaces:
Constants, StreamVisitor
Direct Known Subclasses:
LinearDirectReplacer

public abstract class LinearReplacer
extends EmptyStreamVisitor
implements Constants

A LinearReplacer is the base class that all replacers that make use of linear information inherit from.
$Id: LinearReplacer.java,v 1.5 2006/09/25 13:54:46 dimock Exp $


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
 
Constructor Summary
LinearReplacer()
           
 
Method Summary
static JFieldDeclaration[] appendFieldDeclaration(JFieldDeclaration[] originals, JVariableDefinition newField)
          Returns an array that is a field declaration for (newField) appended to the original field declarations.
static JFieldDeclaration[] appendFieldDeclarations(JFieldDeclaration[] decl1, JFieldDeclaration[] decl2)
          Appends two arrays of field declarations and returns the result.
static CType getArrayType()
          Returns the type to use for buffers.
static JExpression makeArrayFieldAccessExpr(JLocalVariable arrField, int index)
           
static JExpression makeArrayFieldAccessExpr(JLocalVariable arrField, JExpression index)
          Makes a field array access expression of the form prefix-arrField[index], where user can set prefix.
static JExpression makeArrayFieldAccessExpr(String arrFieldName, int index)
           
static JStatement makeAssignmentStatement(JExpression left, JExpression right)
          Creates a statement assigning "right" to "left".
static JavaStyleComment[] makeComment(String c)
          Make an array of one java comments from a string.
static JExpression makeFieldAccessExpression(String name)
          Create a field access expression for the field named "name"
static JStatement makeFieldInitialization(String name, int initValue, String commentString)
          Initializes a field to a particular integer value.
static JStatement makeIncrementStatement(JExpression expr)
          Creates a post increment statement: expr++.
static JExpression makeLessThanExpression(JExpression left, JExpression right)
          Creates a less than expression: left < right.
static JExpression makeLocalVarExpression(JLocalVariable var)
          Creates a local variable expression.
abstract  boolean makeReplacement(SIRStream self)
          Visit a pipeline, splitjoin or filter, replacing them with a new filter that presumably executes more efficiently.
 void postVisitFeedbackLoop(SIRFeedbackLoop self, SIRFeedbackLoopIter iter)
           
 void postVisitPipeline(SIRPipeline self, SIRPipelineIter iter)
          POST-VISITS
 void postVisitSplitJoin(SIRSplitJoin self, SIRSplitJoinIter iter)
           
 void preVisitFeedbackLoop(SIRFeedbackLoop self, SIRFeedbackLoopIter iter)
           
 void preVisitPipeline(SIRPipeline self, SIRPipelineIter iter)
          PRE-VISITS
 void preVisitSplitJoin(SIRSplitJoin self, SIRSplitJoinIter iter)
           
 void visitFilter(SIRFilter self, SIRFilterIter iter)
          PLAIN-VISITS
 
Methods inherited from class at.dms.kjc.sir.EmptyStreamVisitor
postVisitStream, preVisitStream, visitPhasedFilter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LinearReplacer

public LinearReplacer()
Method Detail

preVisitFeedbackLoop

public void preVisitFeedbackLoop(SIRFeedbackLoop self,
                                 SIRFeedbackLoopIter iter)
Specified by:
preVisitFeedbackLoop in interface StreamVisitor
Overrides:
preVisitFeedbackLoop in class EmptyStreamVisitor

preVisitPipeline

public void preVisitPipeline(SIRPipeline self,
                             SIRPipelineIter iter)
Description copied from class: EmptyStreamVisitor
PRE-VISITS

Specified by:
preVisitPipeline in interface StreamVisitor
Overrides:
preVisitPipeline in class EmptyStreamVisitor

preVisitSplitJoin

public void preVisitSplitJoin(SIRSplitJoin self,
                              SIRSplitJoinIter iter)
Specified by:
preVisitSplitJoin in interface StreamVisitor
Overrides:
preVisitSplitJoin in class EmptyStreamVisitor

postVisitFeedbackLoop

public void postVisitFeedbackLoop(SIRFeedbackLoop self,
                                  SIRFeedbackLoopIter iter)
Specified by:
postVisitFeedbackLoop in interface StreamVisitor
Overrides:
postVisitFeedbackLoop in class EmptyStreamVisitor

postVisitPipeline

public void postVisitPipeline(SIRPipeline self,
                              SIRPipelineIter iter)
Description copied from class: EmptyStreamVisitor
POST-VISITS

Specified by:
postVisitPipeline in interface StreamVisitor
Overrides:
postVisitPipeline in class EmptyStreamVisitor

postVisitSplitJoin

public void postVisitSplitJoin(SIRSplitJoin self,
                               SIRSplitJoinIter iter)
Specified by:
postVisitSplitJoin in interface StreamVisitor
Overrides:
postVisitSplitJoin in class EmptyStreamVisitor

visitFilter

public void visitFilter(SIRFilter self,
                        SIRFilterIter iter)
Description copied from class: EmptyStreamVisitor
PLAIN-VISITS

Specified by:
visitFilter in interface StreamVisitor
Overrides:
visitFilter in class EmptyStreamVisitor

makeReplacement

public abstract boolean makeReplacement(SIRStream self)
Visit a pipeline, splitjoin or filter, replacing them with a new filter that presumably executes more efficiently. Returns whether or not any replacement was done.


appendFieldDeclaration

public static JFieldDeclaration[] appendFieldDeclaration(JFieldDeclaration[] originals,
                                                         JVariableDefinition newField)
Returns an array that is a field declaration for (newField) appended to the original field declarations.


getArrayType

public static CType getArrayType()
Returns the type to use for buffers. In this case float[].


appendFieldDeclarations

public static JFieldDeclaration[] appendFieldDeclarations(JFieldDeclaration[] decl1,
                                                          JFieldDeclaration[] decl2)
Appends two arrays of field declarations and returns the result.


makeComment

public static JavaStyleComment[] makeComment(String c)
Make an array of one java comments from a string.


makeFieldAccessExpression

public static JExpression makeFieldAccessExpression(String name)
Create a field access expression for the field named "name"


makeAssignmentStatement

public static JStatement makeAssignmentStatement(JExpression left,
                                                 JExpression right)
Creates a statement assigning "right" to "left".


makeLocalVarExpression

public static JExpression makeLocalVarExpression(JLocalVariable var)
Creates a local variable expression.


makeLessThanExpression

public static JExpression makeLessThanExpression(JExpression left,
                                                 JExpression right)
Creates a less than expression: left < right.


makeIncrementStatement

public static JStatement makeIncrementStatement(JExpression expr)
Creates a post increment statement: expr++.


makeFieldInitialization

public static JStatement makeFieldInitialization(String name,
                                                 int initValue,
                                                 String commentString)
Initializes a field to a particular integer value.


makeArrayFieldAccessExpr

public static JExpression makeArrayFieldAccessExpr(JLocalVariable arrField,
                                                   int index)

makeArrayFieldAccessExpr

public static JExpression makeArrayFieldAccessExpr(JLocalVariable arrField,
                                                   JExpression index)
Makes a field array access expression of the form prefix-arrField[index], where user can set prefix. (For example, prefix could be "this", or another array access expression.)


makeArrayFieldAccessExpr

public static JExpression makeArrayFieldAccessExpr(String arrFieldName,
                                                   int index)