Fuse tight composer

The latter choice is obviously easier since there’s already live code there. However, if we do that, we’ll only be able to do the cast to FullMemLocObject/FullValueObject but will not be able to call isFull since we won’t have the right edge. Its probably better to add a variant of the meetUpdate* methods that’s called by the composer before it calls SpecificAnalysisObject::meetUpdateML/meetUpdateV.

Greg Bronevetsky
Lawrence Livermore National Lab
(925) 424-5756
bronevetsky@llnl.gov<mailto:bronevetsky@llnl.gov>
http://greg.bronevetsky.com

From: Sriram Aananthakrishnan [mailto:notifications@github.com]
Sent: Thursday, July 03, 2014 11:28 AM
To: sriram87/edg4x-rose
Cc: bronevet
Subject: Re: [edg4x-rose] Fuse tight composer (#4)


In projects/fuse/src/analysis/tight_composer.C:

> +    boost::shared_ptr<AnalysisMapAOType> amAO_p = boost::make_shared<AnalysisMapAOType>();

> +    list<ComposedAnalysis*>::iterator a = allAnalyses.begin();

> +    list<Expr2AnyKey>::iterator qIt;

> +    list<boost::shared_ptr<AOType> > aopList;

> +

> +    // Dispatch queries to each analysis

> +    for( ; a != allAnalyses.end(); ++a) {

> +      if(implementsExpr2AnyOp(*a)) {

> +        aopList.clear();

> +        for(qIt = queryList.begin(); qIt != queryList.end(); ++qIt) {

> +          Expr2AnyKey query = *qIt;

> +          // Transition this query to analysis state corresponding to *a

> +          tcqm.transToAnalState(query, *a);

> +          // dispatch the query to the analysis

> +          boost::shared_ptr<AOType> ao_p = Expr2AnyOp(*a, query.sgn, query.pedge);

> +          // Add it to the list

It should be performed either here
https://github.com/sriram87/edg4x-rose/blob/fuse/projects/fuse/src/analysis/abstract_object.C#L48

or here
https://github.com/sriram87/edg4x-rose/blob/fuse/projects/fuse/src/analysis/abstract_object.C#L569

In both of these places we can check if the argument passed is the special full object by casting it down to Full objects. I'm guessing it has to be done in the implementation of MemLocObject::equalSet, ValueObject::equalSet where we will be able to cast the argument to FullMemLocObject or FullValueObject.

—
Reply to this email directly or view it on GitHub<https://github.com/sriram87/edg4x-rose/pull/4/files#r14530092>.