at.dms.kjc.sir.linear
Class LinearDiagonalReplacer

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
              extended by at.dms.kjc.sir.linear.LinearDiagonalReplacer
All Implemented Interfaces:
Constants, StreamVisitor

public class LinearDiagonalReplacer
extends LinearDirectReplacer
implements Constants

This replacer works well when the non-zero elements of the matrix form a strip or diagonal -- more specifically, when some contiguous elements in each column are non-zero. It simply strips out the zero multiplies on the top and bottom edge of each column. (Thus it deals equally well with diagonal, lower-triangular, and upper-triangular mtatrices.) This replacer was inspired by the Radar (CoarseSerializedBeamFormer) benchmark.
$Id: LinearDiagonalReplacer.java,v 1.7 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 LinearDiagonalReplacer(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 linearRep, CType inputType, CType outputType)
          Generate a Vector of Statements which implement (directly) the matrix multiplication represented by the linear representation.
The basic format of the resulting statements is:
 
Methods inherited from class at.dms.kjc.sir.linear.LinearDirectReplacer
makeReplacement
 
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

LinearDiagonalReplacer

protected LinearDiagonalReplacer(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.


makeEfficientImplementation

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

Overrides:
makeEfficientImplementation in class LinearDirectReplacer

makePushStatementVector

public Vector makePushStatementVector(LinearFilterRepresentation linearRep,
                                      CType inputType,
                                      CType outputType)
Generate a Vector of Statements which implement (directly) the matrix multiplication represented by the linear representation.
The basic format of the resulting statements is:
 int sum, count, iters;
 for (int j=0; j

Overrides:
makePushStatementVector in class LinearDirectReplacer