coins.ir.hir
クラス HirModify

java.lang.Object
  |
  +--coins.ir.hir.HIR_Impl
        |
        +--coins.ir.hir.HirModify
すべての実装インタフェース:
java.lang.Cloneable, HasStringObject, HIR, HIR0, IR, IR0

public class HirModify
extends HIR_Impl

HirModify class This class contains methods to modify HIR tree.


フィールドの概要
protected  HIR hir
           
protected  IoRoot ioRoot
           
 
クラス coins.ir.hir.HIR_Impl から継承したフィールド
fAdditionalChild, fChildCount, fChildNode1, fChildNode2, fDbgLevel, fHirAnnex, fOperator, fParentNode, fType, hirRoot, inversionTable, machineParam, sourceLanguage
 
インタフェース coins.ir.hir.HIR から継承したフィールド
OP_CODE_NAME, OP_CODE_NAME_DENSE
 
インタフェース coins.ir.IR から継承したフィールド
OP_INF, OP_LIST, OP_PROG, OP_SUBP_DEF
 
インタフェース coins.ir.hir.HIR0 から継承したフィールド
FLAG_C_PTR, FLAG_CONST_EXP, FLAG_INIT_BLOCK, FLAG_LOOP_WITH_CONDITIONAL_INIT, FLAG_NOCHANGE, FLAG_NONTERMINAL, OP_ADD, OP_ADD_ASSIGN, OP_ADDR, OP_AND, OP_AND_ASSIGN, OP_ARROW, OP_ASM, OP_ASSIGN, OP_BLOCK, OP_CALL, OP_CMP_EQ, OP_CMP_GE, OP_CMP_GT, OP_CMP_LE, OP_CMP_LT, OP_CMP_NE, OP_COMMA, OP_CONST, OP_CONTENTS, OP_CONV, OP_DECAY, OP_DIV, OP_DIV_ASSIGN, OP_ELEM, OP_ENCLOSE, OP_EQ_ZERO, OP_EXP_STMT, OP_EXPLIST, OP_EXPREPEAT, OP_FOR, OP_IF, OP_INDEX, OP_INDEXED_LOOP, OP_JUMP, OP_LABEL, OP_LABEL_DEF, OP_LABELED_STMT, OP_LG_AND, OP_LG_OR, OP_MOD, OP_MOD_ASSIGN, OP_MULT, OP_MULT_ASSIGN, OP_NEG, OP_NOT, OP_NULL, OP_OFFSET, OP_OR, OP_OR_ASSIGN, OP_PARAM, OP_PHI, OP_POST_DECR, OP_POST_INCR, OP_PRE_DECR, OP_PRE_INCR, OP_QUAL, OP_REPEAT, OP_RETURN, OP_SELECT, OP_SEQ, OP_SETDATA, OP_SHIFT_L_ASSIGN, OP_SHIFT_LL, OP_SHIFT_R, OP_SHIFT_R_ASSIGN, OP_SHIFT_RL, OP_SIZEOF, OP_STMT, OP_STMT_UPPER, OP_SUB, OP_SUB_ASSIGN, OP_SUBP, OP_SUBS, OP_SWITCH, OP_SYM, OP_TYPE, OP_UNDECAY, OP_UNTIL, OP_VAR, OP_WHILE, OP_XOR, OP_XOR_ASSIGN
 
コンストラクタの概要
HirModify(HirRoot pHirRoot)
          Construct HirModify object that can be used to invoke methods of HirModyfy in other classes.
 
メソッドの概要
 void adjustLabelInf(HIR pHir, IrList pLabelCorresp)
           adjustLabelInf is called from HIR.copyWithOperandsChangingLabels and adjust labal information for compound HIR subtrees that may contain labeled statements such as SWITCH, LOOP, IF, BLOCK, SEQ, LIST, LabeledStmt.
 void changeLabelsInTree(HIR pTree, IrList pLabelCorrespondence)
          changeLabelsInTree Change labels defined in pTree and return the list of labels showing the old-new correspondence.
protected  void checkStmtInExp(HIR pHir, java.util.List pModPairList, java.util.List pPeelList, Stmt pAncestorStmt, boolean pWithinExp)
           
 Label getNewLabel(Label pOldLabel, IrList pLabelCorresp)
          getNewLabel Get the new label corresponding to pOldLabel by looking up pLabelCorresp list.
 IrList makeLabelCorrespondenceList(HIR pTree)
          makeLabelCrrespondenceList Change labels defined in pTree and return the list of labels showing the old-new correspondence.
 boolean modifyHirIfNecerrary(HIR pHir)
          Called from finishHir() to modify HIR or examine HIR if necessary.
 HIR popoutStmtInExp(Stmt pStmt)
           popoutStmtInExp pops out statements within expressions in front of the statement where the popped out statement can be placed.
 
クラス coins.ir.hir.HIR_Impl から継承したメソッド
accept, addInf, addrExp, asmStmt, assignStmt, blockStmt, callStmt, checkLinkage, clone, conditionalExp, conditionalExp1, constNode, contains, contentsExp, convExp, copyInfListFrom, copyWithOperands, copyWithOperandsChangingLabels, cutParentLink, cutParentLink, decayExp, elemNode, exp, exp, exp, expList, expRepeat, expStmt, falseNode, fatalError, finishHir, flagsAreAllFalse, forStmt, forStmt, functionExp, getChild, getChild1, getChild2, getChildCount, getChildNumber, getClone, getExpId, getFlag, getFlagBox, getFlowAnalSym, getIndentSpace, getIndex, getInf, getInfList, getInfString, getIrName, getNextNode, getNextNodeSeeingAncestor, getNextStmt, getOperator, getParent, getResultOperand, getResultVar, getSourceNode, getSourceNode1, getSourceNode2, getStmtContainingThisNode, getSym, getSymOrExpId, getType, getWork, hirClone, hirIterator, hirList, hirNodeClone, hirSeq, hirSeq, hirSeq, ifStmt, indexedLoopStmt, indexedLoopStmt, infStmt, infStmt, intConstNode, intConstNode, irList, irList, isEmpty, isHIR, isLIR, isSameAs, isStmt, isSym, isTerminal, isTree, isTree, jumpStmt, labelDef, labeledStmt, labelNode, nullNode, nullStmt, offsetConstNode, phiExp, pointedExp, print, print, program, qualifiedExp, removeInf, repeatStmt, repeatStmt, replaceOperator, replaceResultOperand, replaceResultVar, replaceSource, replaceSource1, replaceSource2, replaceThisNode, returnStmt, returnStmt, setChild, setChild1, setChild2, setChildren, setChildren, setChildren, setChildren, setDataStmt, setFlag, setIndex, setIndexNumberToAllNodes, setIndexNumberToAllNodes, setIndexNumberToAllNodes2, setParameters, setParent, setType, setWork, severeError, sizeofExp, sizeofExp, slightError, subpDefinition, subpDefinition, subpDefinition, subpIterator, subpNode, subscriptedExp, subscriptedExp, switchStmt, symNode, toString, toStringDetail, toStringShort, toStringWithChildren, trueNode, typeNode, undecayExp, undecayExp, undecayExp, undecayExp, varNode, warinig, whileStmt, whileStmt, withInf
 
クラス java.lang.Object から継承したメソッド
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

フィールドの詳細

ioRoot

protected final IoRoot ioRoot

hir

protected final HIR hir
コンストラクタの詳細

HirModify

public HirModify(HirRoot pHirRoot)
Construct HirModify object that can be used to invoke methods of HirModyfy in other classes.

パラメータ:
pHirRoot - Instance of HirRoot to be recorded in the HirModify object.
メソッドの詳細

changeLabelsInTree

public void changeLabelsInTree(HIR pTree,
                               IrList pLabelCorrespondence)
changeLabelsInTree
  Change labels defined in pTree and return the list of
  labels showing the old-new correspondence.
  pTree should not contain labels listed in (IrList of new labels)
  so as not to fall in infinite replacement loop.
  If pTree contains an instance of LoopStmt, IfStmt, SwitchStmt,
  SubpDefinition, then the labels got by getLoopBackLabel(),
  getLoopEndLabel(), etc. are also changed.

パラメータ:
pLabelCorrespondence - List of label correspondence (IrList (IrList of original labels) (IrList of new labels) )

makeLabelCorrespondenceList

public IrList makeLabelCorrespondenceList(HIR pTree)
makeLabelCrrespondenceList Change labels defined in pTree and return the list of labels showing the old-new correspondence.

パラメータ:
pTree - HIR tree to be changed.
戻り値:
(IrList (IrList original labels) (IrList new labels) )

getNewLabel

public Label getNewLabel(Label pOldLabel,
                         IrList pLabelCorresp)
getNewLabel Get the new label corresponding to pOldLabel by looking up pLabelCorresp list.

パラメータ:
pOldLabel - Old label to be changed.
pLabelCorresp - List of label correspondence (IrList (IrList original labels) (IrList new labels) )
戻り値:
the new label corresponding to pOldLabel. If pOldLabel is not listed in pLabelCorresp, return pOldLabel.

adjustLabelInf

public void adjustLabelInf(HIR pHir,
                           IrList pLabelCorresp)
 adjustLabelInf is called from HIR.copyWithOperandsChangingLabels
 and adjust labal information for compound HIR subtrees
 that may contain labeled statements such as
     SWITCH, LOOP, IF, BLOCK, SEQ, LIST, LabeledStmt.

パラメータ:
pHir - copied HIR after changing labels but before adsjusting label information.
pLabelCorresp - shows correspondence between old labels and new labels.

popoutStmtInExp

public HIR popoutStmtInExp(Stmt pStmt)
 popoutStmtInExp pops out statements within expressions
 in front of the statement where the popped out
 statement can be placed.
 When an HIR containing a block or a list where expression
 is expected is produced by optimization, etc.,
 the popoutStmtInExp method changes the HIR to a normal
 HIR so that other modules can handle it.
 When a block having ExpStmt as its last statement is
 included where expression is expected, then statements
 except the last one are popped out and the block
 is replaced with the expression reppresented by the
 last ExpStmt.
 When a list having an expression as its last element is
 included where expression is expected, then statements
 included in the list are popped out and the list
 is replaced with the last expression in the list.
 If no modification is necessary, then the given parameter
 (pStmt) itsself is returned.

パラメータ:
pStmt - statement that may contain statements where expression is expected.
戻り値:
the normalized HIR that does not contain statements where expression is expected.

checkStmtInExp

protected void checkStmtInExp(HIR pHir,
                              java.util.List pModPairList,
                              java.util.List pPeelList,
                              Stmt pAncestorStmt,
                              boolean pWithinExp)

modifyHirIfNecerrary

public boolean modifyHirIfNecerrary(HIR pHir)
Called from finishHir() to modify HIR or examine HIR if necessary. This may be used also to change or examine HIR for tentative purpose such as checking and debugging. In that case, appropriate processing should be tentatively added to this method.

パラメータ:
pHir - HIR to be modified/examined.
戻り値:
trure if changed, false if not changed.