|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object scale.common.Root scale.score.Note scale.score.expr.Expr scale.score.expr.UnaryExpr scale.score.expr.ConversionExpr
public class ConversionExpr
This class represents the type conversion or cast operation.
$Id: ConversionExpr.java,v 1.71 2007-10-04 19:58:29 burrill Exp $
Copyright 2008 by the
Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.
The type of the expression represents the value being cast to and the type of the operand represents the type cast from.
Casts are not lowered until we translate into a specific machine representation.
CastMode
Field Summary |
---|
Fields inherited from class scale.score.expr.Expr |
---|
fpReorder, SE_DOMAIN, SE_NONE, SE_OVERFLOW, SE_STATE |
Method Summary | |
---|---|
long |
canonical()
Return a unique value representing this particular expression. |
Expr |
copy()
Perform a deep copy of the expression tree. |
static Expr |
create(Type type,
Expr value,
CastMode conversion)
Return a cast of the expression. |
boolean |
equivalent(Expr exp)
Return true if the expressions are equivalent. |
int |
executionCostEstimate()
Return a relative cost estimate for executing the expression. |
SubscriptExpr |
findSubscriptExpr()
Return the SubscriptExpr that this load uses. |
protected AffineExpr |
getAffineRepresentation(HashMap<Expr,AffineExpr> affines,
LoopHeaderChord thisLoop)
Return the affine
representation for this expression. |
Literal |
getConstantValue()
Return the constant value of the expression. |
Literal |
getConstantValue(HashMap<Expr,Literal> cvMap)
Return the constant value of the expression. |
CastMode |
getConversion()
Return the type of conversion. |
java.lang.String |
getDisplayLabel()
Return a String suitable for labeling this node in a graphical display. |
Note |
getEssentialUse()
Return this Note unless it is a non-essential expression. |
Expr |
getReference()
Return the variable reference for the expression. |
boolean |
isCast()
Return true if this expression is a cast of an address. |
boolean |
isDefined(Expr lv)
The given expression is defined if the dual expression is defined and the given expression is either the low or high level expression. |
boolean |
isSimpleExpr()
Return true if this is a simple expression. |
boolean |
isValuePreserving()
Return true if the conversion results in the same value. |
int |
sideEffects()
Return an indication of the side effects execution of this expression may cause. |
void |
visit(Predicate p)
Process a node by calling its associated routine. |
Methods inherited from class scale.score.expr.UnaryExpr |
---|
containsDeclaration, dependsOnDeclaration, getAliasAnnote, getArg, getDeclList, getExprList, getLoadExprList, getOperand, getOperandArray, loopClean, numOperands, optimizationCandidate, pushOperands, recordRefs, removeRefs, removeUseDef, replaceDecl, setArg, setOperand, unlinkExpression, validate |
Methods inherited from class scale.score.Note |
---|
getChord, setAnnotationLevel, setReportLevel, toString |
Methods inherited from class scale.common.Root |
---|
addAnnotation, allAnnotations, allMatchingAnnotations, getAnnotation, getDisplayName, getDisplayString, getNodeCount, getNodeID, hasAnnotation, hasEqualAnnotation, hashCode, removeAnnotation, removeAnnotations, toStringAnnotations, toStringClass, trace, trace, trace |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait |
Method Detail |
---|
public static Expr create(Type type, Expr value, CastMode conversion)
type
- type to be converted tovalue
- expression value to be convertedconversion
- the type of the conversionCastMode
public int sideEffects()
sideEffects
in class UnaryExpr
Expr.SE_NONE
public Expr copy()
Expr
copy
in class Expr
public CastMode getConversion()
public boolean isCast()
isCast
in class Expr
public void visit(Predicate p)
Note
Each class has a visit(Predicate p)
method. For
example, in class ABC
:
public void visit(Predicate p) { p.visitABC(this); }and the class that implements
Predicate
has a method
public void visitABC(Note n) { ABC a = (ABC) n; ... }Thus, the class that implements
Predicate
can call
n.visit(this);where
n
is a Note
sub-class without
determining which specific sub-class n
is.
The visit pattern basically avoids implementing a large
switch
statement or defining different methods
in each class for some purpose.
visit
in class Note
Predicate
public java.lang.String getDisplayLabel()
Expr
getDisplayLabel
in interface DisplayNode
getDisplayLabel
in class Expr
public Expr getReference()
getReference
in class Expr
public boolean equivalent(Expr exp)
equivalent
in class UnaryExpr
public long canonical()
Expr
canonical
in class Expr
protected AffineExpr getAffineRepresentation(HashMap<Expr,AffineExpr> affines, LoopHeaderChord thisLoop)
Expr
affine
representation
for this expression. This method should be
called only from the getAffineExpr()
method. This method never returns null
.
getAffineRepresentation
in class Expr
affines
- is a mapping from an expression to its representation
and is used to avoid combinatorial explosion through use-def
linksthisLoop
- the loop for which this expression may be affineAffineExpr
,
AffineExpr.notAffine
public boolean isValuePreserving()
public Literal getConstantValue(HashMap<Expr,Literal> cvMap)
getConstantValue
in class Expr
Lattice
public Literal getConstantValue()
getConstantValue
in class Expr
Lattice
public SubscriptExpr findSubscriptExpr()
findSubscriptExpr
in class Expr
public Note getEssentialUse()
Chord
this method returns
this
. For a DualExpr
or an address cast (e.g., ConversionExpr
) this method
returns the out data edge.
getEssentialUse
in class Note
public int executionCostEstimate()
executionCostEstimate
in class UnaryExpr
public boolean isDefined(Expr lv)
isDefined
in class Expr
lv
- the low or high level expression.
public boolean isSimpleExpr()
isSimpleExpr
in class Expr
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |