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


フィールドの概要
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)
           
 
メソッドの概要
 void changeLabelsInTree(HIR pTree, IrList pLabelCorrespondence)
          changeLabelsInTree Change labels defined in pTree and return the list of labels showing the old-new correspondence.
 Label getNewLabel(Label pOldLabel, IrList pLabelCorrespondence)
          getNewLabel Get the new label corresponding to pOldLabel by looking up pLabelCorrespondence list.
 IrList makeLabelCorrespondenceList(HIR pTree)
          makeLabelCrrespondenceList Change labels defined in pTree and return the list of labels showing the old-new correspondence.
 void moveWithOperands(int pFromChild, IR pTo, int pNumber)
          moveWithOperands Cut off "this" node and move it to the position pNumber-th source operand of pTo node.
 
クラス 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)
メソッドの詳細

moveWithOperands

public void moveWithOperands(int pFromChild,
                             IR pTo,
                             int pNumber)
moveWithOperands Cut off "this" node and move it to the position pNumber-th source operand of pTo node. All descendant operands of "this" node are moved so as they are computed at the new place. If "this" has no operand, only this node is moved. If "this" is HIR node, whole the subtree stemming from this node is moved and "this" node becomes the pNumber-th operand of pTo node. For example, consider HIR subtrees node1 and nodeA |- node2 |- nodeB | |- node3 |- nodeC | |- node4 | |- node5 |- node6 and method call node2.moveWithOperands(nodeA, 1); then above subtrees will become node1 and nodeA |- null |- node2 |- node6 | |- node3 | |- node4 | |- node5 |- nodeC If "this" is LIR node, this node and all nodes computing the operands of "this" node in the basic block containing this node are moved in front of pTo node and pNumber-th operand of pTo node is changed to the result operand of "this" node. If pNumber is 0, then "this" LIR node and all node computing its operands in the same basic block are moved in front of pTo node but operand of pTo is not changed. For example, consider LIR node sequences node1 and nodeA node2: add r2,r1,1 nodeB: store r5,x node3: mult r3,r2,4 nodeC node4: add r5,r3,r4 node5 where, r5 is the result operand of node4 and also the source operand 1 of nodeB and r4 is not computed in the basic block containing node4. If node4.moveWithOperands(nodeB, 1) is executed, above node sequences will become to node1 and nodeA node5 node2: add r2,r1,1 node3: mult r3,r2,4 node4: add r5,r3,r4 nodeB: store r5,x nodeC "this" may be any node that make sense as pNumber-th source operand of pTo node.

パラメータ:
pNumber - 1 if source operand 1, 2 if source operand 2, ... is the destination of movement. 0 if "this" and its descendant operands are moved in front of pTo without changing operand of pTo.

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 pLabelCorrespondence)
getNewLabel Get the new label corresponding to pOldLabel by looking up pLabelCorrespondence list.

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