diff --git a/Compiler/BackEnd/BackendVariable.mo b/Compiler/BackEnd/BackendVariable.mo index c527071202..f5843e0aa2 100644 --- a/Compiler/BackEnd/BackendVariable.mo +++ b/Compiler/BackEnd/BackendVariable.mo @@ -48,6 +48,7 @@ import BackendDump; import BaseHashSet; import BaseHashTable; import ComponentReference; +import CommonSubExpression; import DAEUtil; import Debug; import ElementSource; @@ -1247,6 +1248,17 @@ algorithm end match; end isAlgebraicOldState; +public function isCSEVar +"Return true if variable is introduced by wrapFunctionCall and prefixed with '$cse'" + input BackendDAE.Var inVar; + output Boolean outBoolean; +algorithm + outBoolean := match (inVar) + case (BackendDAE.VAR()) guard CommonSubExpression.isCSECref(inVar.varName) then true; + else false; + end match; +end isCSEVar; + public function hasMayerTermAnno "author: Vitalij Ruge Return true if variable has isMayer=true annotation" diff --git a/Compiler/BackEnd/DAEMode.mo b/Compiler/BackEnd/DAEMode.mo index 00299dda0d..bb1afc6437 100644 --- a/Compiler/BackEnd/DAEMode.mo +++ b/Compiler/BackEnd/DAEMode.mo @@ -298,7 +298,7 @@ algorithm constant Boolean debug = false; case ({eq}, false, false) - guard(Util.boolAndList(list(CommonSubExpression.isCSECref(v.varName) for v in vars))) + guard(Util.boolAndList(list(BackendVariable.isCSEVar(v) for v in vars))) equation newResVars = list(BackendVariable.setVarKind(v, BackendDAE.DAE_AUX_VAR()) for v in vars); new_eq = BackendEquation.setEquationAttributes(eq, BackendDAE.EQ_ATTR_DEFAULT_AUX); @@ -492,6 +492,8 @@ algorithm algorithm (discVars, contVars) := List.splitOnTrue(inVars, BackendVariable.isVarDiscrete); + (newAuxVars, contVars) := List.splitOnTrue(contVars, BackendVariable.BackendVariable.isCSEVar); + discVars := listAppend(newAuxVars,discVars); (discEqns, contEqns) := getDiscAndContEqns(inVars, inEqns, discVars, contVars, traverserArgs.shared.functionTree); // create discrete