Package com.tonic.analysis.ssa.ir
Class BranchInstruction
- java.lang.Object
-
- com.tonic.analysis.ssa.ir.IRInstruction
-
- com.tonic.analysis.ssa.ir.BranchInstruction
-
public class BranchInstruction extends IRInstruction
A conditional branch comparing one or two operands and selecting a true or false target block.
-
-
Constructor Summary
Constructors Constructor Description BranchInstruction(CompareOp condition, Value operand, IRBlock trueTarget, IRBlock falseTarget)Creates a single-operand branch comparing against an implicit zero or null.BranchInstruction(CompareOp condition, Value left, Value right, IRBlock trueTarget, IRBlock falseTarget)Creates a two-operand comparison branch and registers uses of its SSA operands.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T> Taccept(IRVisitor<T> visitor)Accepts a visitor for this instruction.IRInstructioncopyWithNewOperands(SSAValue newResult, List<Value> newOperands)Creates a copy of this instruction with new result and operands.CompareOpgetCondition()IRBlockgetFalseTarget()ValuegetLeft()List<Value>getOperands()Gets the operands used by this instruction.ValuegetRight()IRBlockgetTrueTarget()booleanisTerminator()Checks if this instruction terminates a basic block.voidreplaceOperand(Value oldValue, Value newValue)Replaces an operand value with a new value.voidreplaceTarget(IRBlock oldTarget, IRBlock newTarget)Replaces a target block in terminator instructions.voidsetFalseTarget(IRBlock falseTarget)voidsetTrueTarget(IRBlock trueTarget)StringtoString()-
Methods inherited from class com.tonic.analysis.ssa.ir.IRInstruction
equals, getBlock, getBytecodeOffset, getId, getResult, getResultType, hashCode, hasResult, isPhi, resetIdCounter, setBlock, setBytecodeOffset, setResult
-
-
-
-
Constructor Detail
-
BranchInstruction
public BranchInstruction(CompareOp condition, Value left, Value right, IRBlock trueTarget, IRBlock falseTarget)
Creates a two-operand comparison branch and registers uses of its SSA operands.- Parameters:
condition- the comparison to evaluateleft- the left operandright- the right operandtrueTarget- the block taken when the comparison holdsfalseTarget- the block taken otherwise
-
BranchInstruction
public BranchInstruction(CompareOp condition, Value operand, IRBlock trueTarget, IRBlock falseTarget)
Creates a single-operand branch comparing against an implicit zero or null.- Parameters:
condition- the comparison to evaluateoperand- the operand to testtrueTarget- the block taken when the comparison holdsfalseTarget- the block taken otherwise
-
-
Method Detail
-
getCondition
public CompareOp getCondition()
- Returns:
- the condition
-
getLeft
public Value getLeft()
- Returns:
- the left
-
getRight
public Value getRight()
- Returns:
- the right
-
getTrueTarget
public IRBlock getTrueTarget()
- Returns:
- the true target
-
setTrueTarget
public void setTrueTarget(IRBlock trueTarget)
- Parameters:
trueTarget- the block taken when the comparison holds
-
getFalseTarget
public IRBlock getFalseTarget()
- Returns:
- the false target
-
setFalseTarget
public void setFalseTarget(IRBlock falseTarget)
- Parameters:
falseTarget- the block taken when the comparison fails
-
getOperands
public List<Value> getOperands()
Description copied from class:IRInstructionGets the operands used by this instruction.- Specified by:
getOperandsin classIRInstruction- Returns:
- list of operand values
-
replaceOperand
public void replaceOperand(Value oldValue, Value newValue)
Description copied from class:IRInstructionReplaces an operand value with a new value.- Specified by:
replaceOperandin classIRInstruction- Parameters:
oldValue- the value to replacenewValue- the replacement value
-
accept
public <T> T accept(IRVisitor<T> visitor)
Description copied from class:IRInstructionAccepts a visitor for this instruction.- Specified by:
acceptin classIRInstruction- Type Parameters:
T- the return type- Parameters:
visitor- the visitor to accept- Returns:
- the visitor result
-
isTerminator
public boolean isTerminator()
Description copied from class:IRInstructionChecks if this instruction terminates a basic block.- Overrides:
isTerminatorin classIRInstruction- Returns:
- true if this is a terminator instruction
-
replaceTarget
public void replaceTarget(IRBlock oldTarget, IRBlock newTarget)
Description copied from class:IRInstructionReplaces a target block in terminator instructions.- Overrides:
replaceTargetin classIRInstruction- Parameters:
oldTarget- the block to replacenewTarget- the replacement block
-
copyWithNewOperands
public IRInstruction copyWithNewOperands(SSAValue newResult, List<Value> newOperands)
Description copied from class:IRInstructionCreates a copy of this instruction with new result and operands.- Overrides:
copyWithNewOperandsin classIRInstruction- Parameters:
newResult- the new result value (may be null)newOperands- the new operand values- Returns:
- a copy of this instruction, or null if copying not supported
-
-