at.dms.kjc.sir.linear
Class LinearDirectReplacer

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

public class LinearDirectReplacer
extends LinearReplacer
implements Constants

A LinearDirectReplacer replaces the contents of the work functions for linear filters (as determined by the linear filter analyzer) with an appripriate direct implementation (eg a bunch of push statements with the specified combination of input values.

Eg a filter that had linear form [1; 2; 3]+4 would get a work function:

 work {
   push(3*peek(0) + 2*peek(1) + 1*peek(2) + 4);
 }
 
It also can replace splitjoins and pipelines with linear representations with a single filter that computes the same function.
$Id: LinearDirectReplacer.java,v 1.11 2006/09/25 13:54:42 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
protected LinearDirectReplacer(LinearAnalyzer lfa, at.dms.kjc.sir.linear.LinearDirectReplacer.LinearReplaceCalculator costs)
           
 
Method Summary
static void doReplace(LinearAnalyzer lfa, SIRStream str)
          Start the process of replacement on str using the Linearity information in lfa.
protected  SIRFilter makeEfficientImplementation(SIRStream oldStream, LinearFilterRepresentation linearRep)
          Creates a filter that has a work function that directly implements the linear representation that is passed in.
 Vector makePushStatementVector(LinearFilterRepresentation representation, CType inputType, CType outputType)
          Generate a Vector of JExprssionStatements which wrap SIRPushExpressions that implement (directly) the matrix multiplication represented by the linear representation.
 boolean makeReplacement(SIRStream self)
          Visit a pipeline, splitjoin or filter, replacing them with a new filter that directly implements the linear representation.
 
Methods inherited from class at.dms.kjc.sir.linear.LinearReplacer
appendFieldDeclaration, appendFieldDeclarations, getArrayType, makeArrayFieldAccessExpr, makeArrayFieldAccessExpr, makeArrayFieldAccessExpr, makeAssignmentStatement, makeComment, makeFieldAccessExpression, makeFieldInitialization, makeIncrementStatement, makeLessThanExpression, makeLocalVarExpression, preVisitFeedbackLoop, preVisitPipeline, preVisitSplitJoin, visitFilter
 
Methods inherited from class at.dms.kjc.sir.EmptyStreamVisitor
postVisitFeedbackLoop, postVisitPipeline, postVisitSplitJoin, postVisitStream, preVisitStream, visitPhasedFilter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LinearDirectReplacer

protected LinearDirectReplacer(LinearAnalyzer lfa,
                               at.dms.kjc.sir.linear.LinearDirectReplacer.LinearReplaceCalculator costs)
Method Detail

doReplace

public static void doReplace(LinearAnalyzer lfa,
                             SIRStream str)
Start the process of replacement on str using the Linearity information in lfa.


makeReplacement

public boolean makeReplacement(SIRStream self)
Visit a pipeline, splitjoin or filter, replacing them with a new filter that directly implements the linear representation. This only occurs if the replace calculator says that this stream should be replaced.

Specified by:
makeReplacement in class LinearReplacer

makeEfficientImplementation

protected SIRFilter makeEfficientImplementation(SIRStream oldStream,
                                                LinearFilterRepresentation linearRep)
Creates a filter that has a work function that directly implements the linear representation that is passed in.


makePushStatementVector

public Vector makePushStatementVector(LinearFilterRepresentation representation,
                                      CType inputType,
                                      CType outputType)
Generate a Vector of JExprssionStatements which wrap SIRPushExpressions that implement (directly) the matrix multiplication represented by the linear representation.