Skip to content

Commit f30f7a7

Browse files
authored
Simple fix for normalizing pass by value usage in binary array operations. (#697)
- Make parameter passing more consistent.
1 parent 6a33916 commit f30f7a7

File tree

3 files changed

+25
-29
lines changed

3 files changed

+25
-29
lines changed

OMCompiler/Compiler/Template/CodegenCFunctions.tpl

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5564,29 +5564,24 @@ case BINARY(__) then
55645564
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
55655565
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
55665566
else "real_array"
5567-
'mul_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
5567+
if isArrayType(typeof(exp1)) then
5568+
'mul_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
5569+
else
5570+
'mul_alloc_<%type%>_scalar(<%e2%>, <%e1%>)'
55685571
case ADD_ARRAY_SCALAR(__) then
55695572
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
55705573
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
55715574
else "real_array"
5572-
let tvar = tempDecl(type, &varDecls)
55735575
if isArrayType(typeof(exp1)) then
5574-
let &preExp += '<%tvar%> = <%e1%>;<%\n%>'
5575-
'add_alloc_scalar_<%type%>(<%e2%>, &<%tvar%>)'
5576+
'add_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
55765577
else
5577-
let &preExp += '<%tvar%> = <%e2%>;<%\n%>'
5578-
'add_alloc_scalar_<%type%>(<%e1%>, &<%tvar%>)'
5578+
'add_alloc_<%type%>_scalar(<%e2%>, <%e1%>)'
55795579
case SUB_SCALAR_ARRAY(__) then
55805580
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
55815581
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
55825582
else "real_array"
5583-
let tvar = tempDecl(type, &varDecls)
5584-
if isArrayType(typeof(exp1)) then
5585-
let &preExp += '<%tvar%> = <%e1%>;<%\n%>'
5586-
'sub_alloc_scalar_<%type%>(<%e2%>, &<%tvar%>)'
5587-
else
5588-
let &preExp += '<%tvar%> = <%e2%>;<%\n%>'
5589-
'sub_alloc_scalar_<%type%>(<%e1%>, &<%tvar%>)'
5583+
// There is no SUB_ARRAY_SCALAR e.g. (a - 1). Instead it will be ADD_ARRAY_SCALAR(arr, NEG(scalar)) (a + -1)
5584+
'sub_alloc_scalar_<%type%>(<%e1%>, <%e2%>)'
55905585
case MUL_SCALAR_PRODUCT(__) then
55915586
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_scalar"
55925587
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_scalar"

OMCompiler/SimulationRuntime/c/util/real_array.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -712,28 +712,28 @@ real_array_t add_alloc_real_array(const real_array_t a, const real_array_t b)
712712
return dest;
713713
}
714714

715-
real_array_t add_alloc_scalar_real_array(modelica_real sc, const real_array_t *arr)
715+
real_array_t add_alloc_real_array_scalar(const real_array_t arr, const modelica_real sc)
716716
{
717717
size_t nr_of_elements, i;
718718
real_array_t dest;
719-
clone_real_array_spec(arr, &dest);
719+
clone_real_array_spec(&arr, &dest);
720720
alloc_real_array_data(&dest);
721-
nr_of_elements = base_array_nr_of_elements(*arr);
721+
nr_of_elements = base_array_nr_of_elements(arr);
722722
for(i=0; i < nr_of_elements; ++i) {
723-
real_set(&dest, i, sc + real_get(*arr, i));
723+
real_set(&dest, i, sc + real_get(arr, i));
724724
}
725725
return dest;
726726
}
727727

728-
real_array_t sub_alloc_scalar_real_array(modelica_real sc, const real_array_t *arr)
728+
real_array_t sub_alloc_scalar_real_array(modelica_real sc, const real_array_t arr)
729729
{
730730
size_t nr_of_elements, i;
731731
real_array_t dest;
732-
clone_real_array_spec(arr, &dest);
732+
clone_real_array_spec(&arr, &dest);
733733
alloc_real_array_data(&dest);
734-
nr_of_elements = base_array_nr_of_elements(*arr);
734+
nr_of_elements = base_array_nr_of_elements(arr);
735735
for(i=0; i < nr_of_elements; ++i) {
736-
real_set(&dest, i, sc - real_get(*arr, i));
736+
real_set(&dest, i, sc - real_get(arr, i));
737737
}
738738
return dest;
739739
}
@@ -809,6 +809,7 @@ void mul_scalar_real_array(modelica_real a,const real_array_t * b,real_array_t*
809809
}
810810
}
811811

812+
// TODO: remove me.
812813
real_array_t mul_alloc_scalar_real_array(modelica_real a,const real_array_t b)
813814
{
814815
real_array_t dest;
@@ -829,7 +830,7 @@ void mul_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t*
829830
}
830831
}
831832

832-
real_array_t mul_alloc_real_array_scalar(const real_array_t a,modelica_real b)
833+
real_array_t mul_alloc_real_array_scalar(const real_array_t a, const modelica_real b)
833834
{
834835
real_array_t dest;
835836
clone_real_array_spec(&a,&dest);
@@ -979,7 +980,7 @@ void div_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t*
979980
}
980981
}
981982

982-
real_array_t div_alloc_real_array_scalar(const real_array_t a,modelica_real b)
983+
real_array_t div_alloc_real_array_scalar(const real_array_t a, const modelica_real b)
983984
{
984985
real_array_t dest;
985986
clone_real_array_spec(&a,&dest);
@@ -1062,7 +1063,7 @@ void pow_real_array_scalar(const real_array_t *a, modelica_real b, real_array_t*
10621063
}
10631064
}
10641065

1065-
real_array_t pow_alloc_real_array_scalar(const real_array_t a, modelica_real b)
1066+
real_array_t pow_alloc_real_array_scalar(const real_array_t a, const modelica_real b)
10661067
{
10671068
real_array_t dest;
10681069
clone_real_array_spec(&a, &dest);

OMCompiler/SimulationRuntime/c/util/real_array.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ extern void range_real_array(modelica_real start,modelica_real stop, modelica_re
165165

166166
extern real_array_t add_alloc_real_array(const real_array_t a, const real_array_t b);
167167
extern void add_real_array(const real_array_t * a, const real_array_t * b, real_array_t* dest);
168-
extern real_array_t add_alloc_scalar_real_array(const modelica_real sc, const real_array_t *arr);
169-
extern real_array_t sub_alloc_scalar_real_array(const modelica_real sc, const real_array_t *arr);
168+
extern real_array_t add_alloc_real_array_scalar(const real_array_t arr, const modelica_real sc);
169+
extern real_array_t sub_alloc_scalar_real_array(const modelica_real sc, const real_array_t arr);
170170

171171
/* Unary subtraction */
172172
extern void usub_real_array(real_array_t* a);
@@ -181,7 +181,7 @@ extern void mul_scalar_real_array(modelica_real a,const real_array_t * b,real_ar
181181
extern real_array_t mul_alloc_scalar_real_array(modelica_real a,const real_array_t b);
182182

183183
extern void mul_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t* dest);
184-
extern real_array_t mul_alloc_real_array_scalar(const real_array_t a,modelica_real b);
184+
extern real_array_t mul_alloc_real_array_scalar(const real_array_t a, const modelica_real b);
185185

186186
extern void mul_real_array(const real_array_t *a,const real_array_t *b,real_array_t* dest);
187187
extern real_array_t mul_alloc_real_array(const real_array_t a,const real_array_t b);
@@ -200,14 +200,14 @@ extern real_array_t div_alloc_real_array(const real_array_t a,const real_array_t
200200

201201

202202
extern void div_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t* dest);
203-
extern real_array_t div_alloc_real_array_scalar(const real_array_t a,modelica_real b);
203+
extern real_array_t div_alloc_real_array_scalar(const real_array_t a, const modelica_real b);
204204

205205
extern void division_real_array_scalar(threadData_t*,const real_array_t * a,modelica_real b,real_array_t* dest, const char* division_str);
206206
extern real_array_t division_alloc_real_array_scalar(threadData_t*,const real_array_t a,modelica_real b, const char* division_str);
207207
extern void div_scalar_real_array(modelica_real a, const real_array_t* b, real_array_t* dest);
208208
extern real_array_t div_alloc_scalar_real_array(modelica_real a, const real_array_t b);
209209
extern void pow_real_array_scalar(const real_array_t *a, modelica_real b, real_array_t* dest);
210-
extern real_array_t pow_alloc_real_array_scalar(const real_array_t a, modelica_real b);
210+
extern real_array_t pow_alloc_real_array_scalar(const real_array_t a, const modelica_real b);
211211

212212
extern void exp_real_array(const real_array_t * a, modelica_integer n, real_array_t* dest);
213213
extern real_array_t exp_alloc_real_array(const real_array_t a, modelica_integer b);

0 commit comments

Comments
 (0)