L2Read Int Operand
An L2ReadIntOperand is an operand of type L2OperandType.READ_INT. It holds the actual L2IntRegister that is to be accessed.
Author
Mark van Gulik
Todd L Smith
Constructors
Construct a new L2ReadIntOperand for the specified L2SemanticValue and TypeRestriction, using information from the given L2ValueManifest.
Construct a new L2ReadIntOperand with an explicit definition register L2WriteIntOperand.
Functions
Move any registers used as destinations within me into the provided list.
Capture all L2ReadOperands within this operand into the provided List.
Move any registers used as sources within me into the provided list.
Capture all L2WriteOperands within this operand into the provided List.
This is a freshly cloned operand. Adjust it for use in the given L2Instruction. Note that the new instruction has not yet been installed into an L2BasicBlock.
Write a description of this operand to the given StringBuilder.
Append a textual representation of this operand to the provided StringBuilder. If a style change is appropriate while building the string, invoke the warningStyleChange lambda with true to enable the warning style, and false to turn it off again.
Assert that this operand knows its instruction, which should always be the case if the instruction has already been emitted.
Answer this read's type restriction's constant value (i.e., the exact value that this read is guaranteed to produce), or null if such a constraint is not available.
Create an L2ReadOperand like this one, but with a different register.
Create a new register of a suitable type for this read.
Answer the L2WriteOperand that provided the value that this operand is reading. The control flow graph must be in SSA form.
Answer the L2Instruction which generates the value that will populate this register. Skip over move instructions. The containing graph must be in SSA form.
Dispatch this L2Operand to the provided L2OperandDispatcher.
Answer the L2Register's finalIndex.
Find the set of L2SemanticValues and TypeRestriction leading to this read operand. The control flow graph is not necessarily in SSA form, so the underlying register may have multiple definitions to choose from, some of which are not in this read's history.
This is an operand of the given instruction, which was just added to its basic block. Its instruction was just set.
This is an operand of the given instruction, which was just inserted into its basic block as part of an optimization pass.
This is an operand of the given instruction, which was just removed from its basic block.
Answer the L2WriteBoxedOperand which produces the value that will populate this register. Skip over move instructions. Also skip over boxing and unboxing operations that don't alter the value. The containing graph must be in SSA form.
Now that chunk optimization has completed, remove information from this instruction that will no longer be needed in the finished chunk. Note that during subsequent inlining of this chunk at a call site, the type and synonym information will be reconstructed without too much cost.
Answer this read's L2Register.
Answer a String that describes this operand for debugging.
Replace occurrences in this operand of each register that is a key of this map with the register that is the corresponding value. Do nothing to registers that are not keys of the map. Update all secondary structures, such as the instruction's source/destination collections.
Answer the type restriction for this register read.
Answer the L2SemanticValue being read.
Set the instructionOrNull field.
Transform each L2ReadOperand through the given lambda, producing either a new L2Operand of the same type, or the receiver.
Properties
Answer the L2Instruction containing this operand.
Answer whether this operand is misconnected to its L2Instruction.
Answer this operand's L2OperandType.