Changeset 11454


Ignore:
Timestamp:
Aug 13, 2018 1:41:02 PM (16 months ago)
Author:
Jonathan Kämpe
Message:

#5658 Minor refactoring in alias elimination

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Compiler/ModelicaMiddleEnd/src/jastadd/TransformCanonical.jrag

    r11452 r11454  
    12031203            public void perform() {
    12041204                genAlias();
    1205                 eliminateAliasVariables();
     1205                propagateDerivativeBindings();
     1206                sortAliasVariables(false);
     1207                sortAliasEquations();
     1208                enableAliasRewrite();
     1209                change();
    12061210                removeUnusedTemporaries();
    12071211                mergeEquivalentRecords();
     
    12091213                remoteRedundantInitialEquations();
    12101214                change();
     1215            }
     1216           
     1217            public void propagateDerivativeBindings() {
     1218                // Collect derivative binding equations, however only if we are going
     1219                // to perform index reduction!
     1220                if (myOptions().getBooleanOption("propagate_derivatives")) {
     1221                    for (FAbstractEquation equation : getFAbstractEquations()) {
     1222                        if (!equation.isAliasEquation()) {
     1223                            equation.propagateDerivativeBindings();
     1224                        }
     1225                    }
     1226                }
    12111227            }
    12121228        }
     
    13811397            }
    13821398        }
    1383         aliasManager.reportAliasErrors(this);
    1384         //flush();
    1385         root().flushAllRecursive(); // TODO: is this really needed? the tree isn't changed
     1399        aliasManager.reportAliasErrors(this);
    13861400    }
    13871401   
     
    14011415    }
    14021416
    1403     /**
    1404      * Eliminate alias variables from the flat model.
    1405      *
    1406      * The non-alias variables are kept in the list FClass.FVariableList but the
    1407      * alias variables are moved to FClass.AliasVariablesList.
    1408      */
    1409     public void FClass.eliminateAliasVariables() {
    1410         ArrayList<FAbstractEquation> eqns = new ArrayList<FAbstractEquation>();
     1417    /**
     1418     * Eliminate alias variables from the flat model.
     1419     *
     1420     * The non-alias variables are kept in the list FClass.FVariableList but the
     1421     * alias variables are moved to FClass.AliasVariablesList.
     1422     */
     1423    public void FClass.sortAliasVariables(boolean recompute) {
     1424        ArrayList<FVariable> nonAliasVars = new ArrayList<FVariable>();
     1425        ArrayList<FVariable> aliasVars    = new ArrayList<FVariable>();
     1426        if (recompute) {
     1427            for (FVariable fv : getAliasVariables()) {
     1428                fv.aliasSort(nonAliasVars, aliasVars);
     1429            }
     1430        } else {
     1431            for (FVariable fv : getAliasVariables()) {
     1432                aliasVars.add(fv);
     1433            }
     1434        }
     1435        for (FVariable fv : getFVariables()) {
     1436             fv.aliasSort(nonAliasVars, aliasVars);
     1437        }
     1438        setFVariableList(new List(nonAliasVars));
     1439        setAliasVariableList(new List(aliasVars));
     1440    }
     1441
     1442    /**
     1443     * Eliminate alias equation from the flat model.
     1444     */
     1445    public void FClass.sortAliasEquations() {
     1446        ArrayList<FAbstractEquation> eqns = new ArrayList<FAbstractEquation>();
    14111447        ArrayList<FAbstractEquation> pEqns = new ArrayList<FAbstractEquation>();
    1412        
    1413         //log.debug("FClass.eliminateAliasVariables(): l1 " + nonAliasVars + " l2 " + aliasVars);
    1414 
    1415         // Remove alias equations.
    1416         for (FAbstractEquation equation : getFAbstractEquations())
    1417             if (!equation.isAliasEquation())
    1418                 eqns.add(equation);
     1448        for (FAbstractEquation equation : getFAbstractEquations()) {
     1449            if (!equation.isAliasEquation()) {
     1450                eqns.add(equation);
     1451            }
     1452        }
    14191453        if (myOptions().getBooleanOption("eliminate_alias_parameters")) {
    14201454            for (FAbstractEquation equation : getParameterEquations()) {
     
    14231457                }
    14241458            }
    1425         }
    1426        
    1427         // Collect derivative binding equations, however only if we are going
    1428         // to perform index reduction!
    1429         if (myOptions().getBooleanOption("propagate_derivatives")) {
    1430             for (FAbstractEquation eqn : eqns) {
    1431                 eqn.propagateDerivativeBindings();
    1432             }
    1433         }
    1434 
    1435         setFAbstractEquationList(new List(eqns));
    1436         if (myOptions().getBooleanOption("eliminate_alias_parameters")) {
    14371459            setParameterEquationList(new List(pEqns));
    14381460        }
    1439        
    1440         sortAliasvariables(false);
    1441        
    1442         flush();
    1443     }
    1444 
    1445     public void FClass.sortAliasvariables(boolean recompute) {
    1446         ArrayList<FVariable> nonAliasVars = new ArrayList<FVariable>();
    1447         ArrayList<FVariable> aliasVars    = new ArrayList<FVariable>();
    1448         if (recompute) {
    1449             for (FVariable fv : getAliasVariables()) {
    1450                 fv.aliasSort(nonAliasVars, aliasVars);
    1451             }
    1452         } else {
    1453             for (FVariable fv : getAliasVariables()) {
    1454                 aliasVars.add(fv);
    1455             }
    1456         }
    1457         for (FVariable fv : getFVariables()) {
    1458              fv.aliasSort(nonAliasVars, aliasVars);
    1459         }
    1460         setFVariableList(new List(nonAliasVars));
    1461         setAliasVariableList(new List(aliasVars));
    1462         enableAliasRewrite();
     1461        setFAbstractEquationList(new List(eqns));
    14631462    }
    14641463
Note: See TracChangeset for help on using the changeset viewer.