at.dms.kjc.raw
Class FlatIRToC

java.lang.Object
  extended by at.dms.kjc.KjcEmptyVisitor
      extended by at.dms.kjc.SLIREmptyVisitor
          extended by at.dms.kjc.common.ToCCommon
              extended by at.dms.kjc.common.ToC
                  extended by at.dms.kjc.raw.FlatIRToC
All Implemented Interfaces:
Constants, CodeGenerator, KjcVisitor, StreamVisitor, SLIRVisitor

public class FlatIRToC
extends ToC
implements StreamVisitor

This class dumps the tile code for each filter into a file based on the tile number assigned


Field Summary
static String ARGHELPER_COUNTER
           
 boolean debug
           
static String MAINMETHOD_ARGC
           
static String MAINMETHOD_ARGV
           
static String MAINMETHOD_COUNTER
           
 
Fields inherited from class at.dms.kjc.common.ToC
isInit, method
 
Fields inherited from class at.dms.kjc.common.ToCCommon
alternatePrintsForTiming, hasBoolType, lastLeft, p, printPostfixMap, printPrefixMap
 
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
FlatIRToC()
           
FlatIRToC(CodegenPrintWriter p)
           
FlatIRToC(SIRFilter f)
           
 
Method Summary
static void generateCode(FlatNode node)
           
 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 pushClass(SIRPushExpression self, CType tapeType, JExpression val)
           
 void visitAssignmentExpression(JAssignmentExpression self, JExpression left, JExpression right)
          prints an assignment expression
 void visitDynamicToken(SIRDynamicToken self)
          Visits a dynamic token.
 void visitEmptyStatement(JEmptyStatement self)
          prints a empty statement
 void visitFilter(SIRFilter self, SIRFilterIter iter)
          PLAIN-VISITS
 void visitForStatement(JForStatement self, JStatement init, JExpression cond, JStatement incr, JStatement body)
          prints a for statement
 void visitMethodCallExpression(JMethodCallExpression self, JExpression prefix, String ident, JExpression[] args)
          prints a method call expression
 void visitMethodDeclaration(JMethodDeclaration self, int modifiers, CType returnType, String ident, JFormalParameter[] parameters, CClassType[] exceptions, JBlock body)
          prints a method declaration
 void visitPeekExpression(SIRPeekExpression self, CType tapeType, JExpression num)
          Visits a peek expression.
 void visitPhasedFilter(SIRPhasedFilter self, SIRPhasedFilterIter iter)
           
 void visitPopExpression(SIRPopExpression self, CType tapeType)
          Visits a pop expression.
 void visitPrintStatement(SIRPrintStatement self, JExpression exp)
          Process a Print statment, table driven to allow several backends Deals with the problem of string concatenation in Java not translating to our output languages C or C++
 void visitPushExpression(SIRPushExpression self, CType tapeType, JExpression val)
          Visits a push expression.
 void visitRangeExpression(SIRRangeExpression self)
          Visits a range expression.
 void visitRegReceiverStatement(SIRRegReceiverStatement self, JExpression portal, SIRStream receiver, JMethodDeclaration[] methods)
          Visits a register-receiver statement.
 void visitRegSenderStatement(SIRRegSenderStatement self, String fn, SIRLatency latency)
          Visits a register-sender statement.
 void visitVariableDefinition(JVariableDefinition self, int modifiers, CType type, String ident, JExpression expr)
          prints a variable declaration statement
 
Methods inherited from class at.dms.kjc.common.ToC
clear, declareInitializedArray, isDeclOnly, passParentheses, setDeclOnly, visitArgs, visitArrayAccessExpression, visitArrayInitializer, visitArrayLengthExpression, visitBinaryExpression, visitBitwiseExpression, visitBooleanLiteral, visitByteLiteral, visitCharLiteral, visitConstructorCall, visitCreatePortalExpression, visitDoubleLiteral, visitFieldDeclaration, visitFieldExpression, visitFloatLiteral, visitFormalParameters, visitIfStatement, visitInitStatement, visitInterfaceTable, visitIntLiteral, visitLatency, visitLatencyMax, visitLatencyRange, visitLatencySet, visitLongLiteral, visitMessageStatement, visitNameExpression, visitNullLiteral, visitRelationalExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitThisExpression
 
Methods inherited from class at.dms.kjc.common.ToCCommon
getPrinter, makeArrayStrings, makeString, printDecl, printExp, printLParen, printRParen, printType, splitForPrint, visitBitwiseComplementExpression, visitBlockStatement, visitBreakStatement, visitCastExpression, visitClassExpression, visitCompoundAssignmentExpression, visitCompoundStatement, visitCompoundStatement, visitConditionalExpression, visitContinueStatement, visitDoStatement, visitEmittedTextExpression, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitMarker, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitReturnStatement, visitShiftExpression, visitSwitchStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitVariableDeclarationStatement, visitWhileStatement
 
Methods inherited from class at.dms.kjc.SLIREmptyVisitor
visitFileReader, visitFileWriter, visitFunctionPointer, visitIdentity, visitInlineAssembly, visitMainFunction, visitNode, visitPortal, visitRegisterReceiver, 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, visitCatchClause, visitClassBody, visitClassDeclaration, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitConstructorDeclaration, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitJavadoc, visitNewArrayExpression, visitPackageImport, visitPackageName, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitSynchronizedStatement, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation
 
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.common.CodeGenerator
getPrinter
 

Field Detail

debug

public boolean debug

MAINMETHOD_ARGC

public static String MAINMETHOD_ARGC

MAINMETHOD_ARGV

public static String MAINMETHOD_ARGV

MAINMETHOD_COUNTER

public static String MAINMETHOD_COUNTER

ARGHELPER_COUNTER

public static String ARGHELPER_COUNTER
Constructor Detail

FlatIRToC

public FlatIRToC()

FlatIRToC

public FlatIRToC(CodegenPrintWriter p)

FlatIRToC

public FlatIRToC(SIRFilter f)
Method Detail

generateCode

public static void generateCode(FlatNode node)

visitFilter

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

Specified by:
visitFilter in interface StreamVisitor

visitPhasedFilter

public void visitPhasedFilter(SIRPhasedFilter self,
                              SIRPhasedFilterIter iter)
Specified by:
visitPhasedFilter in interface StreamVisitor

visitForStatement

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

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

visitEmptyStatement

public void visitEmptyStatement(JEmptyStatement self)
prints a empty statement

Specified by:
visitEmptyStatement in interface KjcVisitor
Overrides:
visitEmptyStatement in class ToCCommon

visitMethodDeclaration

public void visitMethodDeclaration(JMethodDeclaration self,
                                   int modifiers,
                                   CType returnType,
                                   String ident,
                                   JFormalParameter[] parameters,
                                   CClassType[] exceptions,
                                   JBlock body)
prints a method declaration

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

visitVariableDefinition

public void visitVariableDefinition(JVariableDefinition self,
                                    int modifiers,
                                    CType type,
                                    String ident,
                                    JExpression expr)
prints a variable declaration statement

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

visitAssignmentExpression

public void visitAssignmentExpression(JAssignmentExpression self,
                                      JExpression left,
                                      JExpression right)
prints an assignment expression

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

visitMethodCallExpression

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

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

visitDynamicToken

public void visitDynamicToken(SIRDynamicToken self)
Description copied from class: SLIREmptyVisitor
Visits a dynamic token.

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

visitRangeExpression

public void visitRangeExpression(SIRRangeExpression self)
Description copied from class: SLIREmptyVisitor
Visits a range expression.

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

visitPeekExpression

public void visitPeekExpression(SIRPeekExpression self,
                                CType tapeType,
                                JExpression num)
Description copied from class: SLIREmptyVisitor
Visits a peek expression.

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

visitPopExpression

public void visitPopExpression(SIRPopExpression self,
                               CType tapeType)
Description copied from class: SLIREmptyVisitor
Visits a pop expression.

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

visitPrintStatement

public void visitPrintStatement(SIRPrintStatement self,
                                JExpression exp)
Description copied from class: ToCCommon
Process a Print statment, table driven to allow several backends Deals with the problem of string concatenation in Java not translating to our output languages C or C++

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

pushClass

public void pushClass(SIRPushExpression self,
                      CType tapeType,
                      JExpression val)

visitPushExpression

public void visitPushExpression(SIRPushExpression self,
                                CType tapeType,
                                JExpression val)
Description copied from class: SLIREmptyVisitor
Visits a push expression.

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

visitRegReceiverStatement

public void visitRegReceiverStatement(SIRRegReceiverStatement self,
                                      JExpression portal,
                                      SIRStream receiver,
                                      JMethodDeclaration[] methods)
Description copied from class: SLIREmptyVisitor
Visits a register-receiver statement.

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

visitRegSenderStatement

public void visitRegSenderStatement(SIRRegSenderStatement self,
                                    String fn,
                                    SIRLatency latency)
Description copied from class: SLIREmptyVisitor
Visits a register-sender statement.

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

preVisitPipeline

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

Specified by:
preVisitPipeline in interface StreamVisitor

preVisitSplitJoin

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

preVisitFeedbackLoop

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

postVisitPipeline

public void postVisitPipeline(SIRPipeline self,
                              SIRPipelineIter iter)
POST-VISITS

Specified by:
postVisitPipeline in interface StreamVisitor

postVisitSplitJoin

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

postVisitFeedbackLoop

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