at.dms.kjc.rstream
Class FlatIRToRS

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.rstream.FlatIRToRS
All Implemented Interfaces:
Constants, CodeGenerator, KjcVisitor, SLIRVisitor

public class FlatIRToRS
extends ToC

This class converts the Stream IR (which references the Kopi Java IR) to C code and dumps it to a file, str.c.

Author:
Michael Gordon

Field Summary
 int doLoops
           
 int staticDoLoops
           
 
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
FlatIRToRS()
           
 
Method Summary
 JExpression passParentheses(JExpression exp)
           
 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)
           
 void preVisitSplitJoin(SIRSplitJoin self, SIRSplitJoinIter iter)
           
protected  void print(CType s)
           
protected  void stackAllocateArray(String str)
           
 void visitArrayAccessExpression(JArrayAccessExpression self, JExpression prefix, JExpression accessor)
          prints an array access expression
 void visitAssignmentExpression(JAssignmentExpression self, JExpression left, JExpression right)
          prints an assignment expression
 void visitBlockStatement(JBlock self, JavaStyleComment[] comments)
          prints an expression statement
 void visitCastExpression(JCastExpression self, JExpression expr, CType type)
          prints a cast expression
 void visitComment(JavaStyleComment comment)
          prints an array length expression
 void visitComments(JavaStyleComment[] comments)
          prints an array length expression
 void visitDoLoopStatement(JDoLoopStatement self)
           
 void visitEmptyStatement(JEmptyStatement self)
          prints a empty statement
 void visitFieldDeclaration(JFieldDeclaration self, int modifiers, CType type, String ident, JExpression expr)
          prints a field declaration
 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 visitPushExpression(SIRPushExpression self, CType tapeType, JExpression val)
          Visits a push expression.
 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, setDeclOnly, visitArgs, visitArrayInitializer, visitArrayLengthExpression, visitBinaryExpression, visitBitwiseExpression, visitBooleanLiteral, visitByteLiteral, visitCharLiteral, visitConstructorCall, visitCreatePortalExpression, visitDoubleLiteral, 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, visitBreakStatement, visitClassExpression, visitCompoundAssignmentExpression, visitCompoundStatement, visitCompoundStatement, visitConditionalExpression, visitContinueStatement, visitDoStatement, visitEmittedTextExpression, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitMarker, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitPrintStatement, visitReturnStatement, visitShiftExpression, visitSwitchStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitVariableDeclarationStatement, visitWhileStatement
 
Methods inherited from class at.dms.kjc.SLIREmptyVisitor
visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitIdentity, visitInlineAssembly, visitMainFunction, 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, visitCatchClause, visitClassBody, visitClassDeclaration, visitClassImport, 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

doLoops

public int doLoops

staticDoLoops

public int staticDoLoops
Constructor Detail

FlatIRToRS

public FlatIRToRS()
Method Detail

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

visitFieldDeclaration

public void visitFieldDeclaration(JFieldDeclaration self,
                                  int modifiers,
                                  CType type,
                                  String ident,
                                  JExpression expr)
prints a field declaration

Specified by:
visitFieldDeclaration in interface KjcVisitor
Overrides:
visitFieldDeclaration in class ToC

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

visitBlockStatement

public void visitBlockStatement(JBlock self,
                                JavaStyleComment[] comments)
prints an expression statement

Specified by:
visitBlockStatement in interface KjcVisitor
Overrides:
visitBlockStatement 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

visitDoLoopStatement

public void visitDoLoopStatement(JDoLoopStatement self)

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

visitArrayAccessExpression

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

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

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

passParentheses

public JExpression passParentheses(JExpression exp)
Overrides:
passParentheses in class ToC

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

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

print

protected void print(CType s)

visitComments

public void visitComments(JavaStyleComment[] comments)
Description copied from class: KjcEmptyVisitor
prints an array length expression

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

visitComment

public void visitComment(JavaStyleComment comment)
Description copied from class: KjcEmptyVisitor
prints an array length expression

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

visitCastExpression

public void visitCastExpression(JCastExpression self,
                                JExpression expr,
                                CType type)
prints a cast expression

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

preVisitPipeline

public void preVisitPipeline(SIRPipeline self,
                             SIRPipelineIter iter)

preVisitSplitJoin

public void preVisitSplitJoin(SIRSplitJoin self,
                              SIRSplitJoinIter iter)

preVisitFeedbackLoop

public void preVisitFeedbackLoop(SIRFeedbackLoop self,
                                 SIRFeedbackLoopIter iter)

postVisitPipeline

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


postVisitSplitJoin

public void postVisitSplitJoin(SIRSplitJoin self,
                               SIRSplitJoinIter iter)

postVisitFeedbackLoop

public void postVisitFeedbackLoop(SIRFeedbackLoop self,
                                  SIRFeedbackLoopIter iter)

visitPhasedFilter

public void visitPhasedFilter(SIRPhasedFilter self,
                              SIRPhasedFilterIter iter)

stackAllocateArray

protected void stackAllocateArray(String str)

visitEmptyStatement

public void visitEmptyStatement(JEmptyStatement self)
prints a empty statement

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