| Modifier and Type | Field and Description |
|---|---|
| public static final boolean |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public static SsaMethod | Returns: output in SSA forminput rmeth, int the total width, in register-units, of the method's
parameters paramWidth, boolean true if this method has no this
pointer argumentReturns an SSA representation, edge-split and with phi functions placed. |
| private static void | |
| private static void | edgeSplitMoveExceptionsAndResults(SsaMethod
method to process ssaMeth)In ROP form, move-exception must occur as the first insn in a block immediately succeeding the insn that could thrown an exception. |
| private static void | edgeSplitPredecessors(SsaMethod
non-null; method to processInserts Z nodes as new predecessors for every node that has multiple successors and multiple predecessors. |
| private static void | edgeSplitSuccessors(SsaMethod
non-null; method to processInserts Z nodes for every node that needs a new successor. |
| private static boolean | Returns: true if a Z node is neededpredecessor node block, SsaBasicBlock successor node succ)Returns |
| private static boolean | Returns: true if this node needs to have a unique
predecessor created for itnon-null; block in question
|
| private static void | placePhiFunctions(SsaMethod
non-null; method to process.
Modifications are made in-place.non-null; local variable info, used
when placing phisregisters below this number are ignored threshold)See Appel algorithm 19.6: Place Phi functions in appropriate locations. |
| public static SsaMethod | Returns: an SSA represention with only the edge-splitter runmethod to process rmeth, int width of all arguments in the method paramWidth, boolean true if this method has no this
pointer argumentReturns an SSA represention with only the edge-splitter run. |
| public static SsaMethod | Returns: an SSA represention with only the edge-splitter runmethod to process rmeth, int width of all arguments in the method paramWidth, boolean true if this method has no this
pointer argumentReturns an SSA represention with only the steps through the phi placement run. |
| public static void | updateSsaMethod(SsaMethod
input ssaMeth, int registers below this number are unchanged threshold)Updates an SSA representation, placing phi functions and renaming all registers above a certain threshold number. |
| DEBUG | back to summary |
|---|---|
| public static final boolean DEBUG | |
| SsaConverter | back to summary |
|---|---|
| public SsaConverter() | |
| convertToSsaMethod | back to summary |
|---|---|
| public static SsaMethod convertToSsaMethod(RopMethod rmeth, int paramWidth, boolean isStatic) Returns an SSA representation, edge-split and with phi functions placed. | |
| edgeSplit | back to summary |
|---|---|
| private static void edgeSplit(SsaMethod result) See Appel section 19.1: Converts CFG into "edge-split" form, such that each node either a unique successor or unique predecessor. In addition, the SSA form we use enforces a further constraint, requiring each block with a final instruction that returns a value to have a primary successor that has no other predecessor. This ensures move statements can always be inserted correctly when phi statements are removed.
| |
| edgeSplitMoveExceptionsAndResults | back to summary |
|---|---|
| private static void edgeSplitMoveExceptionsAndResults(SsaMethod ssaMeth) In ROP form, move-exception must occur as the first insn in a block immediately succeeding the insn that could thrown an exception. We may need room to insert move insns later, so make sure to split any block that starts with a move-exception such that there is a unique move-exception block for each predecessor.
| |
| edgeSplitPredecessors | back to summary |
|---|---|
| private static void edgeSplitPredecessors(SsaMethod result) Inserts Z nodes as new predecessors for every node that has multiple successors and multiple predecessors.
| |
| edgeSplitSuccessors | back to summary |
|---|---|
| private static void edgeSplitSuccessors(SsaMethod result) Inserts Z nodes for every node that needs a new successor.
| |
| needsNewSuccessor | back to summary |
|---|---|
| private static boolean needsNewSuccessor(SsaBasicBlock block, SsaBasicBlock succ) Returns
| |
| nodeNeedsUniquePredecessor | back to summary |
|---|---|
private static boolean nodeNeedsUniquePredecessor(SsaBasicBlock block)
| |
| placePhiFunctions | back to summary |
|---|---|
| private static void placePhiFunctions(SsaMethod ssaMeth, LocalVariableInfo localInfo, int threshold) See Appel algorithm 19.6: Place Phi functions in appropriate locations.
| |
| testEdgeSplit | back to summary |
|---|---|
| public static SsaMethod testEdgeSplit(RopMethod rmeth, int paramWidth, boolean isStatic) Returns an SSA represention with only the edge-splitter run. | |
| testPhiPlacement | back to summary |
|---|---|
| public static SsaMethod testPhiPlacement(RopMethod rmeth, int paramWidth, boolean isStatic) Returns an SSA represention with only the steps through the phi placement run. | |
| updateSsaMethod | back to summary |
|---|---|
| public static void updateSsaMethod(SsaMethod ssaMeth, int threshold) Updates an SSA representation, placing phi functions and renaming all registers above a certain threshold number.
| |