scale.score.expr
Class ConditionalExpr

java.lang.Object
  extended by scale.common.Root
      extended by scale.score.Note
          extended by scale.score.expr.Expr
              extended by scale.score.expr.TernaryExpr
                  extended by scale.score.expr.ConditionalExpr
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class ConditionalExpr
extends TernaryExpr

This class is used to represents some cases of the C conditional operator.

$Id: ConditionalExpr.java,v 1.15 2007-04-27 18:04:36 burrill Exp $

Copyright 2008 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.

This class represents the C ?: operator. Note - the semantics of the ConditionalExpr are not the same as the ExpressionIfOp. For ExpressionIfOp, one of the conditional expression will not be evaluated. For ConditionExpr, both expressions are evaluated.


Field Summary
 
Fields inherited from class scale.score.expr.Expr
fpReorder, SE_DOMAIN, SE_NONE, SE_OVERFLOW, SE_STATE
 
Constructor Summary
ConditionalExpr(Type type, Expr predicate, Expr trueExpr, Expr falseExpr)
           
 
Method Summary
 Expr copy()
          Perform a deep copy of the expression tree.
static Expr create(Type type, Expr predicate, Expr trueExpr, Expr falseExpr)
           
 int executionCostEstimate()
          Return a relative cost estimate for executing the expression.
 Literal getConstantValue()
          Return the constant value of the expression.
 Literal getConstantValue(HashMap<Expr,Literal> cvMap)
          Return the constant value of the expression.
 java.lang.String getDisplayLabel()
          Return a String suitable for labeling this node in a graphical display.
 Expr getFalseExpr()
          Return the false expression.
 Expr getTest()
          Return the test expression.
 Expr getTrueExpr()
          Return the true expression.
 boolean hasTrueFalseResult()
          Return true if the result of the expression is either true (1) or false (0).
 void visit(Predicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.score.expr.TernaryExpr
containsDeclaration, dependsOnDeclaration, equivalent, getDeclList, getExprList, getLA, getLoadExprList, getMA, getOperand, getOperandArray, getRA, loopClean, numOperands, optimizationCandidate, pushOperands, recordRefs, removeRefs, removeUseDef, replaceDecl, setLA, setMA, setOperand, setRA, sideEffects, unlinkExpression, validate
 
Methods inherited from class scale.score.expr.Expr
addCast, addCast, canonical, changeInDataEdge, conditionalCopy, conditionalUnlinkExpression, deleteOutDataEdge, executionOrder, executionOrdinal, findCriticalChord, findLinearCoefficient, findSubscriptExpr, getAffineExpr, getAffineRepresentation, getAliasAnnote, getCall, getCoreType, getCriticalChord, getDefExpr, getDisplayColorHint, getDisplayShapeHint, getDualExpr, getInDataEdge, getInDataEdgeArray, getLoopHeader, getLow, getLValue, getOutDataEdge, getPointedToCore, getReference, getReuseLevel, getRValue, getType, getUseDef, isCast, isDefined, isDefined, isLiteralExpr, isLoopInvariant, isMatchExpr, isMemoryDef, isMemRefExpr, isScalar, isSimpleExpr, mayGenerateCall, numInDataEdges, reduce, removeDualExprs, setCrossloopReuse, setOutDataEdge, setSpatialReuse, setStep, setTemporalReuse, setType, setUseDef, toStringSpecial, validLValue
 
Methods inherited from class scale.score.Note
getChord, getEssentialUse, 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
 

Constructor Detail

ConditionalExpr

public ConditionalExpr(Type type,
                       Expr predicate,
                       Expr trueExpr,
                       Expr falseExpr)
Method Detail

create

public static Expr create(Type type,
                          Expr predicate,
                          Expr trueExpr,
                          Expr falseExpr)

copy

public Expr copy()
Description copied from class: Expr
Perform a deep copy of the expression tree. By deep copy, we mean that copies are made of the expression tree.

Specified by:
copy in class Expr
Returns:
a copy of this expression

getTest

public final Expr getTest()
Return the test expression.


getTrueExpr

public final Expr getTrueExpr()
Return the true expression.


getFalseExpr

public final Expr getFalseExpr()
Return the false expression.


visit

public void visit(Predicate p)
Description copied from class: Note
Process a node by calling its associated routine. See the "visitor" design pattern in Design Patterns: Elements of Reusable Object-Oriented Software by E. Gamma, et al, Addison Wesley, ISBN 0-201-63361-2.

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.

Specified by:
visit in class Note
See Also:
Predicate

getDisplayLabel

public java.lang.String getDisplayLabel()
Description copied from class: Expr
Return a String suitable for labeling this node in a graphical display. This method should be over-ridden as it simplay returns the class name.

Specified by:
getDisplayLabel in interface DisplayNode
Overrides:
getDisplayLabel in class Expr

executionCostEstimate

public int executionCostEstimate()
Return a relative cost estimate for executing the expression.

Specified by:
executionCostEstimate in class Note

getConstantValue

public Literal getConstantValue(HashMap<Expr,Literal> cvMap)
Return the constant value of the expression. Follow use-def links.

Overrides:
getConstantValue in class Expr
See Also:
Lattice

getConstantValue

public Literal getConstantValue()
Return the constant value of the expression. Do not follow use-def links.

Overrides:
getConstantValue in class Expr
See Also:
Lattice

hasTrueFalseResult

public boolean hasTrueFalseResult()
Return true if the result of the expression is either true (1) or false (0).

Overrides:
hasTrueFalseResult in class Expr