|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Objectorg.jikesrvm.compilers.opt.ir.operand.Operand
public abstract class Operand
An Operand identifies an operand for an
Instruction. A single Operand object should
not be shared between instructions (or even be used twice in
the same instruction). Operands should not be shared between
instructions because we use the
reference to the operand's containing instruction
to construct use/def chains. We also store program-point specific
information about an symbolic register
in the RegisterOperands that
refer to the
Register.
Operands are divided into several primary categories
RegisterOperand represent symbolic and
and physical registers.
ConstantOperand
represent various kinds of constant operands.
MethodOperand represents the targets of CALL instructions.
BranchOperand, BasicBlockOperand,
and BranchOperand are used to encode CFG
information in LABEL, BBEND, and branch instructions.
ConditionOperand and TrapCodeOperand
encode the conditions tested by conditional branches and
trap instructions.
LocationOperand represents the memory location
accessed by a load or store operation.
TypeOperand encodes a RVMType for use
in instructions such as NEW or INSTANCEOF that operate on the
type hierarchy.
Instruction,
BasicBlockOperand,
BranchOperand,
ConditionOperand,
ConstantOperand,
DoubleConstantOperand,
FloatConstantOperand,
IntConstantOperand,
LocationOperand,
LongConstantOperand,
MethodOperand,
NullConstantOperand,
RegisterOperand,
StringConstantOperand,
TrapCodeOperand,
TrueGuardOperand,
TypeOperand| Field Summary | |
|---|---|
Instruction |
instruction
Handle back to containing instruction. |
| Constructor Summary | |
|---|---|
Operand()
|
|
| Method Summary | |
|---|---|
AddressConstantOperand |
asAddressConstant()
Cast to an AddressConstantOperand. |
BasicBlockOperand |
asBlock()
Cast to an BasicBlockOperand. |
BranchOperand |
asBranch()
Cast to an BranchOperand. |
ClassConstantOperand |
asClassConstant()
Cast to an ClassConstantOperand. |
ConditionOperand |
asCondition()
Cast to an ConditionOperand. |
DoubleConstantOperand |
asDoubleConstant()
Cast to an DoubleConstantOperand. |
FloatConstantOperand |
asFloatConstant()
Cast to an FloatConstantOperand. |
IntConstantOperand |
asIntConstant()
Cast to an IntConstantOperand. |
LocationOperand |
asLocation()
Cast to an LocationOperand. |
LongConstantOperand |
asLongConstant()
Cast to an LongConstantOperand. |
MemoryOperand |
asMemory()
Cast to an MemoryOperand. |
MethodOperand |
asMethod()
Cast to an MethodOperand. |
NullConstantOperand |
asNullConstant()
Cast to an NullConstantOperand. |
ObjectConstantOperand |
asObjectConstant()
Cast to an ObjectConstantOperand. |
RegisterOperand |
asRegister()
Cast to an RegisterOperand. |
StackLocationOperand |
asStackLocation()
Cast to an StackLocationOperand. |
StringConstantOperand |
asStringConstant()
Cast to an StringConstantOperand. |
TIBConstantOperand |
asTIBConstant()
Cast to an TIBConstantOperand. |
TypeOperand |
asType()
Cast to an TypeOperand. |
private static boolean |
compatiblePrimitives(TypeReference type1,
TypeReference type2)
|
static boolean |
conservativelyApproximates(Operand op1,
Operand op2)
Compare two operands based on their positions in the operand lattice. |
abstract Operand |
copy()
Return a new operand that is semantically equivalent to this. |
int |
getIndexInInstruction()
Return the index of the operand in its containing instruction (SLOW). |
TypeReference |
getType()
Return the TypeReference of the value represented by the operand. |
boolean |
isAddress()
Does the operand represent a value of the address data type? |
boolean |
isAddressConstant()
Is the operand an AddressConstantOperand? |
boolean |
isBlock()
Is the operand an BasicBlockOperand? |
boolean |
isBranch()
Is the operand an BranchOperand? |
boolean |
isClassConstant()
Is the operand an ClassConstantOperand? |
boolean |
isConstant()
Is the operand an ConstantOperand? |
boolean |
isDefinitelyNull()
Does the operand definitely represent null? |
boolean |
isDouble()
Does the operand represent a value of the double data type? |
boolean |
isDoubleConstant()
Is the operand an DoubleConstantOperand? |
boolean |
isFloat()
Does the operand represent a value of the float data type? |
boolean |
isFloatConstant()
Is the operand an FloatConstantOperand? |
boolean |
isInt()
Does the operand represent a value of the int data type? |
boolean |
isIntConstant()
Is the operand an IntConstantOperand? |
boolean |
isIntLike()
Does the operand represent a value of an int-like data type? |
boolean |
isLocation()
Is the operand an LocationOperand? |
boolean |
isLong()
Does the operand represent a value of the long data type? |
boolean |
isLongConstant()
Is the operand an LongConstantOperand? |
boolean |
isMemory()
Is the operand an MemoryOperand? |
boolean |
isMethod()
Is the operand an MethodOperand? |
boolean |
isMovableObjectConstant()
Is the operand a movable ObjectConstantOperand? |
boolean |
isNullConstant()
Is the operand an NullConstantOperand? |
boolean |
isObjectConstant()
Is the operand an ObjectConstantOperand? |
boolean |
isRef()
Does the operand represent a value of the reference data type? |
boolean |
isRegister()
Is the operand an RegisterOperand? |
boolean |
isStackLocation()
Is the operand an StackLocationOperand? |
boolean |
isStringConstant()
Is the operand an StringConstantOperand? |
boolean |
isTIBConstant()
Is the operand an TIBConstantOperand? |
boolean |
isTrueGuard()
Is the operand an TrueGuardOperand? |
boolean |
isType()
Is the operand an TypeOperand? |
static Operand |
meet(Operand op1,
Operand op2,
Register reg)
Meet two operands based on their positions in the operand lattice. |
abstract boolean |
similar(Operand op)
Are two operands semantically equivalent? |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public Instruction instruction
| Constructor Detail |
|---|
public Operand()
| Method Detail |
|---|
public final boolean isRegister()
RegisterOperand?
true if this is an
instanceof an RegisterOperand
or false if it is not.public final boolean isConstant()
ConstantOperand?
true if this is an
instanceof an ConstantOperand
or false if it is not.public final boolean isIntConstant()
IntConstantOperand?
true if this is an
instanceof an IntConstantOperand
or false if it is not.public final boolean isAddressConstant()
AddressConstantOperand?
true if this is an
instanceof an AddressConstantOperand
or false if it is not.public final boolean isFloatConstant()
FloatConstantOperand?
true if this is an
instanceof an FloatConstantOperand
or false if it is not.public final boolean isLongConstant()
LongConstantOperand?
true if this is an
instanceof an LongConstantOperand
or false if it is not.public final boolean isDoubleConstant()
DoubleConstantOperand?
true if this is an
instanceof an DoubleConstantOperand
or false if it is not.public final boolean isStringConstant()
StringConstantOperand?
true if this is an
instanceof an StringConstantOperand
or false if it is not.public final boolean isClassConstant()
ClassConstantOperand?
true if this is an
instanceof an ClassConstantOperand
or false if it is not.public final boolean isObjectConstant()
ObjectConstantOperand?
true if this is an
instanceof an ObjectConstantOperand
or false if it is not.public boolean isMovableObjectConstant()
ObjectConstantOperand?
public final boolean isTIBConstant()
TIBConstantOperand?
true if this is an
instanceof an TIBConstantOperand
or false if it is not.public final boolean isNullConstant()
NullConstantOperand?
true if this is an
instanceof an NullConstantOperand
or false if it is not.public final boolean isTrueGuard()
TrueGuardOperand?
true if this is an
instanceof an TrueGuardOperand
or false if it is not.public final boolean isBranch()
BranchOperand?
true if this is an
instanceof an BranchOperand
or false if it is not.public final boolean isBlock()
BasicBlockOperand?
true if this is an
instanceof an BasicBlockOperand
or false if it is not.public final boolean isMemory()
MemoryOperand?
true if this is an
instanceof an MemoryOperand
or false if it is not.public final boolean isStackLocation()
StackLocationOperand?
true if this is an
instanceof an StackLocationOperand
or false if it is not.public final boolean isMethod()
MethodOperand?
true if this is an
instanceof an MethodOperand
or false if it is not.public final boolean isLocation()
LocationOperand?
true if this is an
instanceof an LocationOperand
or false if it is not.public final boolean isType()
TypeOperand?
true if this is an
instanceof an TypeOperand
or false if it is not.public final RegisterOperand asRegister()
RegisterOperand.
this cast as an RegisterOperandpublic final IntConstantOperand asIntConstant()
IntConstantOperand.
this cast as an IntConstantOperandpublic final AddressConstantOperand asAddressConstant()
AddressConstantOperand.
this cast as an AddressConstantOperandpublic final FloatConstantOperand asFloatConstant()
FloatConstantOperand.
this cast as an FloatConstantOperandpublic final LongConstantOperand asLongConstant()
LongConstantOperand.
this cast as an LongConstantOperandpublic final DoubleConstantOperand asDoubleConstant()
DoubleConstantOperand.
this cast as an DoubleConstantOperandpublic final StringConstantOperand asStringConstant()
StringConstantOperand.
this cast as an StringConstantOperandpublic final ClassConstantOperand asClassConstant()
ClassConstantOperand.
this cast as an ClassConstantOperandpublic final ObjectConstantOperand asObjectConstant()
ObjectConstantOperand.
this cast as an ObjectConstantOperandpublic final TIBConstantOperand asTIBConstant()
TIBConstantOperand.
this cast as an TIBConstantOperandpublic final NullConstantOperand asNullConstant()
NullConstantOperand.
this cast as an NullConstantOperandpublic final BranchOperand asBranch()
BranchOperand.
this cast as an BranchOperandpublic final BasicBlockOperand asBlock()
BasicBlockOperand.
this cast as an BasicBlockOperandpublic final MemoryOperand asMemory()
MemoryOperand.
this cast as an MemoryOperandpublic final StackLocationOperand asStackLocation()
StackLocationOperand.
this cast as an StackLocationOperandpublic final MethodOperand asMethod()
MethodOperand.
this cast as an MethodOperandpublic final TypeOperand asType()
TypeOperand.
this cast as an TypeOperandpublic final ConditionOperand asCondition()
ConditionOperand.
this cast as an ConditionOperandpublic final LocationOperand asLocation()
LocationOperand.
this cast as an LocationOperandpublic boolean isIntLike()
true if the data type of this
is int-like as defined by TypeReference.isIntLikeType()
or false if it is not.public boolean isInt()
true if the data type of this
is an int as defined by TypeReference.isIntType()
or false if it is not.public boolean isLong()
true if the data type of this
is a long as defined by TypeReference.isLongType()
or false if it is not.public boolean isFloat()
true if the data type of this
is a float as defined by TypeReference.isFloatType()
or false if it is not.public boolean isDouble()
true if the data type of this
is a double as defined by TypeReference.isDoubleType()
or false if it is not.public boolean isRef()
true if the data type of this
is a reference as defined by TypeReference.isReferenceType()
or false if it is not.public boolean isAddress()
true if the data type of this
is an address as defined by TypeReference.isAddressType()
or false if it is not.public boolean isDefinitelyNull()
null?
true if the operand definitely represents
null or false if it does not.public abstract Operand copy()
this.
thispublic abstract boolean similar(Operand op)
op - other operand
true if this and op
are semantically equivalent or false
if they are not.public TypeReference getType()
TypeReference of the value represented by the operand.
public int getIndexInInstruction()
public static boolean conservativelyApproximates(Operand op1,
Operand op2)
op1 - the first operand to compareop2 - the second operand to compare
true if op1 conservatively approximates op2 or
false if it does not.
public static Operand meet(Operand op1,
Operand op2,
Register reg)
null to stand for bottom (the meet of
the two operands is an illegal value). For exmaple,
meet(5.0, "hi") would evalaute to bottom.
Meet returns op1 iff conservativelyApproximates(op1, op2):
this is exploited in BC2IR to avoid doing redundant
work.
Unfortunately there is a fair amount of code duplication
between conservativelyApproximates(org.jikesrvm.compilers.opt.ir.operand.Operand, org.jikesrvm.compilers.opt.ir.operand.Operand) and
meet(org.jikesrvm.compilers.opt.ir.operand.Operand, org.jikesrvm.compilers.opt.ir.operand.Operand, org.jikesrvm.compilers.opt.ir.Register), but factoring out the common control logic
is a non-trivial task.
op1 - the first operand to meetop2 - the second operand to meetreg - the Register to use to
create a new RegisterOperand
if meeting op1 and op2 requires doing so.
null when
the meet evaluates to bottom. It will return
op1 when conservativelyApproximates(op1, op2)
evaluates to true.
private static boolean compatiblePrimitives(TypeReference type1,
TypeReference type2)
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||