at.dms.kjc.rstream
Class JDoLoopStatement

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.compiler.Phylum
          extended by at.dms.kjc.JPhylum
              extended by at.dms.kjc.JStatement
                  extended by at.dms.kjc.JLoopStatement
                      extended by at.dms.kjc.JForStatement
                          extended by at.dms.kjc.rstream.JDoLoopStatement
All Implemented Interfaces:
Constants, DeepCloneable, Finalizable, Serializable

public class JDoLoopStatement
extends JForStatement

An SIR node representing a do loop. It is equivalent to a for loop with: for (*type_of_induction* *induction* = *initExpr*; *induction* < *cond*; *induction* += incr) *body*. The resulting for loop generated by this class will be semantically equal. Note this class is not visited by Kjc visitors!

Author:
Michael Gordon
See Also:
Serialized Form

Field Summary
 
Fields inherited from class at.dms.util.Utils
EMPTY_LIST, getForLoopCallers
 
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 JDoLoopStatement()
           
  JDoLoopStatement(JLocalVariable induction, JExpression initVal, JExpression condVal, JExpression incrVal, JStatement body, boolean countUp)
          construct a new JDoLoopStatement, see the class comment for semantics.
  JDoLoopStatement(JLocalVariable induction, JExpression initVal, JExpression condVal, JExpression incrVal, JStatement body, boolean countUp, boolean zeroInit)
          construct a new JDoLoopStatement, see the class comment for semantics.
 
Method Summary
 boolean countUp()
          return true if this loop increments the induction var
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(JDoLoopStatement other)
          Clones all fields of this into
 JExpression getCondValue()
          return the value that the induction var is compared to in : *induction* < *cond*
 int getIncrInt()
          return the integer value of the increment value, if not a int literal, fail
 JExpression getIncrValue()
          return the value that is added to the induction var for each iterations
 JLocalVariable getInduction()
          return the induction var of this loop
 JExpression getInitValue()
          return the value that the induction var is initialized to
 int getTripCount()
          return the trip count of the loop, for this function to pass, the loop must have static bounds
 boolean staticBounds()
          return true if the init, cond, and incr values are int literals at compile time
 boolean zeroInit()
          return true if this loop initializes the induction to zero
 
Methods inherited from class at.dms.kjc.JForStatement
accept, accept, analyse, deepCloneInto, genCode, getBody, getCondition, getIncrement, getInit, getUnrolled, setBody, setCond, setIncr, setInit, setUnrolled
 
Methods inherited from class at.dms.kjc.JLoopStatement
deepCloneInto, getBreakLabel, getContinueLabel
 
Methods inherited from class at.dms.kjc.JStatement
deepCloneInto, fail, getComments, setComments
 
Methods inherited from class at.dms.kjc.JPhylum
assertMutable, check, check, check, check, deepCloneInto, setLineNumber
 
Methods inherited from class at.dms.compiler.Phylum
deepCloneInto, getTokenReference, setTokenReference
 
Methods inherited from class at.dms.util.Utils
asPercent, cellMathEquivalent, cMathEquivalent, cppMathEquivalent, deepCloneInto, equalArrays, fail, getEnvironmentVariable, getExpression, hasPeeks, initArray, initArray, initLiteralArray, intArrayToList, isMathMethod, isUniform, kopi_assert, kopi_assert, makeCountdownForLoop, makeDotFileName, makeForLoop, makeForLoop, makeForLoop, makeForLoopFieldIndex, makeForLoopLocalIndex, nextPow2, passThruParens, peelMarkers, popBeforePeek, readFile, removeUnusedPops, replaceAll, setupDotFileName, simplifyMathMethod, splitQualifiedName, splitQualifiedName, toArray, toIntArray, toVector, voidToInt, writeFile
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JDoLoopStatement

public JDoLoopStatement(JLocalVariable induction,
                        JExpression initVal,
                        JExpression condVal,
                        JExpression incrVal,
                        JStatement body,
                        boolean countUp)
construct a new JDoLoopStatement, see the class comment for semantics. for (*type_of_induction* *induction* = *initExpr*; *induction* < *cond*; *induction* += incr) *body*. countUp* is true if this loop increments the induction var


JDoLoopStatement

public JDoLoopStatement(JLocalVariable induction,
                        JExpression initVal,
                        JExpression condVal,
                        JExpression incrVal,
                        JStatement body,
                        boolean countUp,
                        boolean zeroInit)
construct a new JDoLoopStatement, see the class comment for semantics. for (*type_of_induction* *induction* = *initExpr*; *induction* < *cond*; *induction* += incr) *body*. countUp* is true if this loop increments the induction var zeroInit* is true if the induction var is initialized to zero


JDoLoopStatement

protected JDoLoopStatement()
Method Detail

getCondValue

public JExpression getCondValue()
return the value that the induction var is compared to in : *induction* < *cond*


getInduction

public JLocalVariable getInduction()
return the induction var of this loop


countUp

public boolean countUp()
return true if this loop increments the induction var


zeroInit

public boolean zeroInit()
return true if this loop initializes the induction to zero


getInitValue

public JExpression getInitValue()
return the value that the induction var is initialized to


getIncrValue

public JExpression getIncrValue()
return the value that is added to the induction var for each iterations


staticBounds

public boolean staticBounds()
return true if the init, cond, and incr values are int literals at compile time


getIncrInt

public int getIncrInt()
return the integer value of the increment value, if not a int literal, fail


getTripCount

public int getTripCount()
return the trip count of the loop, for this function to pass, the loop must have static bounds


deepClone

public Object deepClone()
Returns a deep clone of this object.

Specified by:
deepClone in interface DeepCloneable
Overrides:
deepClone in class JForStatement

deepCloneInto

protected void deepCloneInto(JDoLoopStatement other)
Clones all fields of this into
other