|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectcoins.casttohir.ToHirVisit
coins.casttohir.ToHirBaseOpt
Do simple HIR-base optimizations such as elimination of useless statements, expansion of control statements with constant conditional expression.
1. Elimination of useless statements
Unreachable ExtStmt/return/goto --> eliminate
Jump to the next statement --> eliminate
Unrefered label --> eliminate
Successive label --> combine the labels
Empty block --> eliminate
Expression statement --> eliminate except for side effect part.
2. Expansion of if-statement
if(e ); --> side_effect_of_e;
if(true ) THEN; else ELSE;
--> { THEN; goto LABEL_END; ELSE; LABEL_END:; }
if(false) THEN; else ELSE;
--> { ELSE; goto LABEL_END; THEN; LABEL_END:; }
unreachable if(e) THEN; else ELSE;
--> { goto LABEL_END; THEN; goto LABEL_END; ELSE; LABEL_END:; }
3. Expansion of while-statement
while(false) BODY;
--> { goto LABEL_BREAK; BODY; LABEL_BREAK:; }
Expansion of for-statement
for(INIT;false;STEP) BODY;
--> { INIT; goto LABEL_BREAK; BODY; STEP; LABEL_BREAK:; }
5. Expansion of do-while statement
do BODY; while(false); --> BODY;
unreachable do BODY; while(false);
--> { goto LABEL_BREAK; BODY; LABEL_BREAK:; }
6. Expansion of switch statement
switch(CONST2)
{
case CONST1: STMT1;
case CONST2: STMT2;
default: STMT3;
}
-->
{
goto LABEL_CONST2;
STMT1;
LABEL_CONST2:;
STMT2;
STMT3;
LABEL_BREAK:;
}
unreachable switch(...)
{
case CONST1: STMT1;
case CONST2: STMT2;
default: STMT3;
}
-->
{
goto LABEL_BREAK;
STMT1;
STMT2;
STMT3;
LABEL_BREAK:;
}
| Field Summary | |
int |
fDbgLevel
|
protected BlockStmt |
nowBlock
Now processing block (used to create initializer). |
| Constructor Summary | |
ToHirBaseOpt(ToHir tohir)
Constructor. |
|
| Method Summary | |
protected Exp |
atAdd(Exp e)
At add expression node. |
protected Exp |
atAddAssign(Exp e)
At add-assign expression node. |
protected Exp |
atAddr(Exp e)
At address expression node. |
protected Exp |
atAnd(Exp e)
At and expression node. |
protected Exp |
atAndAssign(Exp e)
At and-assign expression node. |
protected Exp |
atArrow(Exp e)
At arrow expression node. |
protected Exp |
atARShift(Exp e)
At arithmetic R-shift expression node. |
protected Exp |
atAssign(Exp e)
At assign expression node. |
protected void |
atAssignStmt(AssignStmt s)
At assign statement node. |
protected void |
atBlock(BlockStmt s)
At block statement node. |
protected Exp |
atCall(FunctionExp e)
At function call expression node. |
protected Exp |
atCmpEq(Exp e)
At EQ expression node. |
protected Exp |
atCmpGe(Exp e)
At GE expression node. |
protected Exp |
atCmpGt(Exp e)
At GT expression node. |
protected Exp |
atCmpLe(Exp e)
At LE expression node. |
protected Exp |
atCmpLt(Exp e)
At LT expression node. |
protected Exp |
atCmpNe(Exp e)
At NE expression node. |
protected Exp |
atComma(Exp e)
At comma expression node. |
protected Exp |
atConst(ConstNode e)
At constant node. |
protected Exp |
atContents(Exp e)
At indirection expression node. |
protected Exp |
atConv(Exp e)
At cast expression node. |
protected Exp |
atDecay(Exp e)
At decay expression node. |
protected Exp |
atDiv(Exp e)
At div expression node. |
protected Exp |
atDivAssign(Exp e)
At div-assign expression node. |
protected Exp |
atElem(ElemNode e)
At element node. |
protected Exp |
atEqZero(Exp e)
At logical-not expression node. |
protected Exp |
atExpList(ExpListExp e)
At expression list node. |
protected Exp |
atExpRepeat(Exp e)
At expression repeatation node. |
protected void |
atExpStmt(ExpStmt s)
At expression statement node. |
protected void |
atFor(LoopStmt s)
At for statement node. |
protected void |
atIf(IfStmt s)
At if statement node. |
protected Exp |
atIndex(Exp e)
At index expression node. |
protected InfStmt |
atInfStmt(InfStmt pInf)
atInfStmt parses the pragma body in the form of String and change its symbols to instances of Sym (Var, Subp, Label, Const) and items enclosed in parenthesis to IrList changing its elements to Sym, etc. |
protected void |
atJump(JumpStmt s)
At goto statement node. |
protected void |
atLabeledStmt(LabeledStmt s)
At labeled statement node. |
protected Exp |
atLgAnd(Exp e)
At logical-and expression node. |
protected Exp |
atLgOr(Exp e)
At logical-or expression node. |
protected Exp |
atLShift(Exp e)
At L-shift expression node. |
protected Exp |
atLShiftAssign(Exp e)
At L-shift-assign expression node. |
protected Exp |
atMod(Exp e)
At mod expression node. |
protected Exp |
atModAssign(Exp e)
At mod-assign expression node. |
protected Exp |
atMul(Exp e)
At mul expression node. |
protected Exp |
atMulAssign(Exp e)
At mul-assign expression node. |
protected Exp |
atNeg(Exp e)
At negative expression node. |
protected Exp |
atNot(Exp e)
At not expression node. |
protected Exp |
atOffset(Exp e)
At offset(difference of address) expression node. |
protected Exp |
atOr(Exp e)
At or expression node. |
protected Exp |
atOrAssign(Exp e)
At or-assign expression node. |
protected Exp |
atPost(int op,
Exp e)
At post-operator expression node. |
protected Exp |
atPre(int op,
Exp e)
At pre-operator expression node. |
protected Exp |
atQual(Exp e)
At member-access expression node. |
protected void |
atReturn(ReturnStmt s)
At return statement node. |
protected Exp |
atRShift(Exp e)
At logical R-shift expression node. |
protected Exp |
atRShiftAssign(Exp e)
At R-shift-assign expression node. |
protected Exp |
atSelect(Exp e)
At selection expression node. |
protected void |
atSetDataStmt(SetDataStmt s)
At datacode statement node. |
protected Exp |
atSub(Exp e)
At sub expression node. |
protected Exp |
atSubAssign(Exp e)
At sub-assign expression node. |
protected Exp |
atSubp(SubpNode e)
At function node. |
protected SubpDefinition |
atSubpDefinition(SubpDefinition s)
At block statement node. |
protected Exp |
atSubs(Exp e)
At subscript expression node. |
protected void |
atSwitch(SwitchStmt s)
At switch statement node. |
protected Exp |
atUndecay(Exp e)
At undecay expression node. |
protected void |
atUntil(LoopStmt s)
At do-while statement node. |
protected Exp |
atVar(VarNode e)
At variable node. |
protected void |
atWhile(LoopStmt s)
At while statement node. |
protected Exp |
atXor(Exp e)
At xor expression node. |
protected Exp |
atXorAssign(Exp e)
At xor-assign expression node. |
protected boolean |
inInitBlock()
Return true if now processing in the initialization block. |
protected void |
message(int level,
java.lang.String mes)
Output debug message. |
(package private) IrList |
processPragmaItem(ParseString pParseString,
java.lang.String pNextItem,
IrList pList)
|
(package private) Exp |
visitExp(Exp e)
|
void |
visitProgram()
Visit HIR program tree. |
(package private) void |
visitProgram(Program program)
Visit HIR program tree. |
(package private) void |
visitStmt(Stmt s)
Call appropriate method by operator of statement node. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
protected BlockStmt nowBlock
public final int fDbgLevel
| Constructor Detail |
public ToHirBaseOpt(ToHir tohir)
tohir - Offers cooperation with the object of other packages.| Method Detail |
protected void message(int level,
java.lang.String mes)
message in class ToHirVisitlevel - Debug level.mes - Debug message.protected void atBlock(BlockStmt s)
atBlock in class ToHirVisits - BlockStmtprotected void atLabeledStmt(LabeledStmt s)
atLabeledStmt in class ToHirVisits - LabeledStmtprotected void atAssignStmt(AssignStmt s)
atAssignStmt in class ToHirVisits - AssignStmtprotected void atIf(IfStmt s)
atIf in class ToHirVisits - IfStmtprotected void atWhile(LoopStmt s)
atWhile in class ToHirVisits - LoopStmtprotected void atFor(LoopStmt s)
atFor in class ToHirVisits - LoopStmtprotected void atUntil(LoopStmt s)
atUntil in class ToHirVisits - LoopStmtprotected void atJump(JumpStmt s)
atJump in class ToHirVisits - JumpStmtprotected void atSwitch(SwitchStmt s)
atSwitch in class ToHirVisits - SwitchStmtprotected void atReturn(ReturnStmt s)
atReturn in class ToHirVisits - ReturnStmtprotected void atExpStmt(ExpStmt s)
atExpStmt in class ToHirVisits - ExpStmtprotected boolean inInitBlock()
public final void visitProgram()
final void visitProgram(Program program)
program - Programfinal void visitStmt(Stmt s)
s - Visited statement.protected void atSetDataStmt(SetDataStmt s)
s - SetDataStmtfinal Exp visitExp(Exp e)
protected Exp atConst(ConstNode e)
e - Exp
protected Exp atVar(VarNode e)
e - Exp
protected Exp atSubp(SubpNode e)
e - Exp
protected Exp atElem(ElemNode e)
e - Exp
protected Exp atSubs(Exp e)
e - Exp
protected Exp atIndex(Exp e)
e - Exp
protected Exp atQual(Exp e)
e - Exp
protected Exp atArrow(Exp e)
e - Exp
protected Exp atCall(FunctionExp e)
e - Exp
protected Exp atAdd(Exp e)
e - Exp
protected Exp atSub(Exp e)
e - Exp
protected Exp atMul(Exp e)
e - Exp
protected Exp atDiv(Exp e)
e - Exp
protected Exp atMod(Exp e)
e - Exp
protected Exp atAnd(Exp e)
e - Exp
protected Exp atOr(Exp e)
e - Exp
protected Exp atXor(Exp e)
e - Exp
protected Exp atCmpEq(Exp e)
e - Exp
protected Exp atCmpNe(Exp e)
e - Exp
protected Exp atCmpGt(Exp e)
e - Exp
protected Exp atCmpGe(Exp e)
e - Exp
protected Exp atCmpLt(Exp e)
e - Exp
protected Exp atCmpLe(Exp e)
e - Exp
protected Exp atLShift(Exp e)
e - Exp
protected Exp atARShift(Exp e)
e - Exp
protected Exp atRShift(Exp e)
e - Exp
protected Exp atNot(Exp e)
e - Exp
protected Exp atNeg(Exp e)
e - Exp
protected Exp atAddr(Exp e)
e - Exp
protected Exp atConv(Exp e)
e - Exp
protected Exp atDecay(Exp e)
e - Exp
protected Exp atUndecay(Exp e)
e - Exp
protected Exp atContents(Exp e)
e - Exp
protected Exp atAssign(Exp e)
e - Exp
protected Exp atOffset(Exp e)
e - Exp
protected Exp atLgAnd(Exp e)
e - Exp
protected Exp atLgOr(Exp e)
e - Exp
protected Exp atSelect(Exp e)
e - Exp
protected Exp atComma(Exp e)
e - Exp
protected Exp atEqZero(Exp e)
e - Exp
protected Exp atPre(int op,
Exp e)
e - Exp
protected Exp atPost(int op,
Exp e)
e - Exp
protected Exp atAddAssign(Exp e)
e - Exp
protected Exp atSubAssign(Exp e)
e - Exp
protected Exp atMulAssign(Exp e)
e - Exp
protected Exp atDivAssign(Exp e)
e - Exp
protected Exp atModAssign(Exp e)
e - Exp
protected Exp atLShiftAssign(Exp e)
e - Exp
protected Exp atRShiftAssign(Exp e)
e - Exp
protected Exp atAndAssign(Exp e)
e - Exp
protected Exp atOrAssign(Exp e)
e - Exp
protected Exp atXorAssign(Exp e)
e - Exp
protected Exp atExpList(ExpListExp e)
e - Exp
protected Exp atExpRepeat(Exp e)
e - Exp
protected SubpDefinition atSubpDefinition(SubpDefinition s)
s - BlockStmtprotected InfStmt atInfStmt(InfStmt pInf)
IrList processPragmaItem(ParseString pParseString,
java.lang.String pNextItem,
IrList pList)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||