Changeset 14173


Ignore:
Timestamp:
Nov 25, 2019 9:01:23 PM (11 days ago)
Author:
Jonathan Kämpe
Message:

#5883 More cases of keeping mutable primitive array assignments as composite assignments rather than expanding to for loops.

Location:
branches/dev-jk-2720/Compiler
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-jk-2720/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenAlgorithmTests.mo

    r14165 r14173  
    991991    jmi_int_t i1_1ie;
    992992    jmi_int_t i1_1in;
    993     jmi_real_t i1_2i;
    994     jmi_int_t i1_2ie;
    995     jmi_int_t i1_2in;
    996993    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_1, 3, 1, 3)
    997994    r__v->a = tmp_1;
     
    10151012        jmi_array_ref_1(r_v->a, 2 + (i1_1i - 1)) = jmi_array_val_1(temp_2_a, i1_1i);
    10161013    }
    1017     i1_2in = 0;
    1018     i1_2ie = floor((3) - (1));
    1019     for (i1_2i = 1; i1_2in <= i1_2ie; i1_2i = 1 + (++i1_2in)) {
    1020         jmi_array_ref_1(r__v->a, i1_2i) = jmi_array_val_1(r_v->a, i1_2i);
    1021     }
     1014    JMI_ASG(GEN_ARR, r__v->a, r_v->a)
    10221015    JMI_DYNAMIC_FREE()
    10231016    return;
  • branches/dev-jk-2720/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenCompositeStatementTests.mo

    r12904 r14173  
    7979        R[:] r = f(R({time}));
    8080
    81 annotation(__JModelica(UnitTesting(tests={
    82     CCodeGenTestCase(
    83         name="RecordStmt2",
    84         description="",
    85         template="
    86 $C_functions$
    87 ",
    88         generatedCode="
     81    annotation(__JModelica(UnitTesting(tests={
     82        CCodeGenTestCase(
     83            name="RecordStmt2",
     84            description="",
     85            template="$C_functions$",
     86            generatedCode="
    8987void func_CCodeGenCompositeStatementTests_RecordStmt2_f_def0(R_0_r* r_v, R_0_ra* y_a) {
    9088    JMI_DYNAMIC_INIT()
     
    9694    jmi_int_t i1_0ie;
    9795    jmi_int_t i1_0in;
    98     jmi_real_t i2_1i;
    99     jmi_int_t i2_1ie;
    100     jmi_int_t i2_1in;
    10196    if (y_a == NULL) {
    10297        JMI_ARRAY_INIT_1(STACK, R_0_r, R_0_ra, y_an, 2, 1, 2)
     
    113108    i1_0ie = floor((2) - (1));
    114109    for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
    115         i2_1in = 0;
    116         i2_1ie = floor((1) - (1));
    117         for (i2_1i = 1; i2_1in <= i2_1ie; i2_1i = 1 + (++i2_1in)) {
    118             jmi_array_ref_1(jmi_array_rec_1(y_a, i1_0i)->x, i2_1i) = jmi_array_val_1(jmi_array_rec_1(temp_1_a, i1_0i)->x, i2_1i);
    119         }
    120     }
    121     JMI_DYNAMIC_FREE()
    122     return;
    123 }
     110        JMI_ASG(GEN_ARR, jmi_array_rec_1(y_a, i1_0i)->x, jmi_array_rec_1(temp_1_a, i1_0i)->x)
     111    }
     112    JMI_DYNAMIC_FREE()
     113    return;
     114}
     115
    124116")})));
    125117    end RecordStmt2;
     
    149141        R3[:] r = f(R3(R2(R1({time}))));
    150142
    151 annotation(__JModelica(UnitTesting(tests={
    152     CCodeGenTestCase(
    153         name="RecordStmt3",
    154         description="",
    155         template="
    156 $C_functions$
    157 ",
    158         generatedCode="
     143    annotation(__JModelica(UnitTesting(tests={
     144        CCodeGenTestCase(
     145            name="RecordStmt3",
     146            description="",
     147            template="$C_functions$",
     148            generatedCode="
    159149void func_CCodeGenCompositeStatementTests_RecordStmt3_f_def0(R3_2_r* r_v, R3_2_ra* y_a) {
    160150    JMI_DYNAMIC_INIT()
     
    175165    jmi_int_t i1_0ie;
    176166    jmi_int_t i1_0in;
    177     jmi_real_t i1_1i;
    178     jmi_int_t i1_1ie;
    179     jmi_int_t i1_1in;
    180     jmi_real_t i1_2i;
    181     jmi_int_t i1_2ie;
    182     jmi_int_t i1_2in;
    183     jmi_real_t i2_3i;
    184     jmi_int_t i2_3ie;
    185     jmi_int_t i2_3in;
    186167    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_3, 1, 1, 1)
    187168    tmp_2->x = tmp_3;
     
    190171    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, temp_1_a, 1, 1, 1)
    191172    jmi_array_ref_1(temp_1_a, 1) = 1;
    192     i1_0in = 0;
    193     i1_0ie = floor((1) - (1));
    194     for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
    195         jmi_array_ref_1(c_v->r->r->x, i1_0i) = jmi_array_val_1(temp_1_a, i1_0i);
    196     }
     173    JMI_ASG(GEN_ARR, c_v->r->r->x, temp_1_a)
    197174    c_v->r->x = 0;
    198175    if (y_a == NULL) {
     
    211188    jmi_array_rec_1(temp_2_a, 1)->r = jmi_dynamic_function_pool_alloc(&dyn_mem, 1*sizeof(R2_1_r), TRUE);
    212189    jmi_array_rec_1(temp_2_a, 1)->r->r = jmi_dynamic_function_pool_alloc(&dyn_mem, 1*sizeof(R1_0_r), TRUE);
    213     JMI_ARRAY_INIT_1(HEAP, jmi_real_t, jmi_array_t, jmi_array_rec_1(temp_2_a, 1)->r->r->x, 1, 1, 1)
    214     i1_1in = 0;
    215     i1_1ie = floor((1) - (1));
    216     for (i1_1i = 1; i1_1in <= i1_1ie; i1_1i = 1 + (++i1_1in)) {
    217         jmi_array_ref_1(jmi_array_rec_1(temp_2_a, 1)->r->r->x, i1_1i) = jmi_array_val_1(c_v->r->r->x, i1_1i);
    218     }
     190    JMI_ASG(GEN_ARR, jmi_array_rec_1(temp_2_a, 1)->r->r->x, c_v->r->r->x)
    219191    jmi_array_rec_1(temp_2_a, 1)->r->x = c_v->r->x;
    220192    *jmi_array_rec_1(temp_2_a, 2) = *r_v;
    221     i1_2in = 0;
    222     i1_2ie = floor((2) - (1));
    223     for (i1_2i = 1; i1_2in <= i1_2ie; i1_2i = 1 + (++i1_2in)) {
    224         i2_3in = 0;
    225         i2_3ie = floor((1) - (1));
    226         for (i2_3i = 1; i2_3in <= i2_3ie; i2_3i = 1 + (++i2_3in)) {
    227             jmi_array_ref_1(jmi_array_rec_1(y_a, i1_2i)->r->r->x, i2_3i) = jmi_array_val_1(jmi_array_rec_1(temp_2_a, i1_2i)->r->r->x, i2_3i);
    228         }
    229         jmi_array_rec_1(y_a, i1_2i)->r->x = jmi_array_rec_1(temp_2_a, i1_2i)->r->x;
    230     }
    231     JMI_DYNAMIC_FREE()
    232     return;
    233 }
     193    i1_0in = 0;
     194    i1_0ie = floor((2) - (1));
     195    for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
     196        JMI_ASG(GEN_ARR, jmi_array_rec_1(y_a, i1_0i)->r->r->x, jmi_array_rec_1(temp_2_a, i1_0i)->r->r->x)
     197        jmi_array_rec_1(y_a, i1_0i)->r->x = jmi_array_rec_1(temp_2_a, i1_0i)->r->x;
     198    }
     199    JMI_DYNAMIC_FREE()
     200    return;
     201}
     202
    234203")})));
    235204    end RecordStmt3;
     
    251220        R1[:] y = f(time);
    252221
    253 annotation(__JModelica(UnitTesting(tests={
    254     CCodeGenTestCase(
    255         name="RecordStmt4",
    256         description="Primitive array in record array initialization",
    257         template="
    258 $C_functions$
    259 ",
    260         generatedCode="
     222    annotation(__JModelica(UnitTesting(tests={
     223        CCodeGenTestCase(
     224            name="RecordStmt4",
     225            description="Primitive array in record array initialization",
     226            template="$C_functions$",
     227            generatedCode="
    261228void func_CCodeGenCompositeStatementTests_RecordStmt4_f_def0(jmi_real_t x_v, R1_0_ra* y_a) {
    262229    JMI_DYNAMIC_INIT()
     
    267234    jmi_int_t i1_0ie;
    268235    jmi_int_t i1_0in;
    269     jmi_real_t i2_1i;
    270     jmi_int_t i2_1ie;
    271     jmi_int_t i2_1in;
    272236    if (y_a == NULL) {
    273237        JMI_ARRAY_INIT_1(STACK, R1_0_r, R1_0_ra, y_an, 1, 1, 1)
     
    281245    i1_0ie = floor((1) - (1));
    282246    for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
    283         i2_1in = 0;
    284         i2_1ie = floor((1) - (1));
    285         for (i2_1i = 1; i2_1in <= i2_1ie; i2_1i = 1 + (++i2_1in)) {
    286             jmi_array_ref_1(jmi_array_rec_1(y_a, i1_0i)->x, i2_1i) = jmi_array_val_1(jmi_array_rec_1(temp_1_a, i1_0i)->x, i2_1i);
    287         }
    288     }
    289     JMI_DYNAMIC_FREE()
    290     return;
    291 }
     247        JMI_ASG(GEN_ARR, jmi_array_rec_1(y_a, i1_0i)->x, jmi_array_rec_1(temp_1_a, i1_0i)->x)
     248    }
     249    JMI_DYNAMIC_FREE()
     250    return;
     251}
     252
    292253")})));
    293254    end RecordStmt4;
     
    313274        R2[:] y = f(time);
    314275
    315 annotation(__JModelica(UnitTesting(tests={
    316     CCodeGenTestCase(
    317         name="RecordStmt5",
    318         description="Record array in record array initialization",
    319         template="
    320 $C_functions$
    321 ",
    322         generatedCode="
     276    annotation(__JModelica(UnitTesting(tests={
     277        CCodeGenTestCase(
     278            name="RecordStmt5",
     279            description="Record array in record array initialization",
     280            template="$C_functions$",
     281            generatedCode="
    323282void func_CCodeGenCompositeStatementTests_RecordStmt5_f_def0(jmi_real_t x_v, R2_1_ra* y_a) {
    324283    JMI_DYNAMIC_INIT()
     
    334293    jmi_int_t i2_1ie;
    335294    jmi_int_t i2_1in;
    336     jmi_real_t i3_2i;
    337     jmi_int_t i3_2ie;
    338     jmi_int_t i3_2in;
    339295    if (y_a == NULL) {
    340296        JMI_ARRAY_INIT_1(STACK, R2_1_r, R2_1_ra, y_an, 1, 1, 1)
     
    355311        i2_1ie = floor((1) - (1));
    356312        for (i2_1i = 1; i2_1in <= i2_1ie; i2_1i = 1 + (++i2_1in)) {
    357             i3_2in = 0;
    358             i3_2ie = floor((1) - (1));
    359             for (i3_2i = 1; i3_2in <= i3_2ie; i3_2i = 1 + (++i3_2in)) {
    360                 jmi_array_ref_1(jmi_array_rec_1(jmi_array_rec_1(y_a, i1_0i)->r1, i2_1i)->x, i3_2i) = jmi_array_val_1(jmi_array_rec_1(jmi_array_rec_1(temp_1_a, i1_0i)->r1, i2_1i)->x, i3_2i);
    361             }
     313            JMI_ASG(GEN_ARR, jmi_array_rec_1(jmi_array_rec_1(y_a, i1_0i)->r1, i2_1i)->x, jmi_array_rec_1(jmi_array_rec_1(temp_1_a, i1_0i)->r1, i2_1i)->x)
    362314        }
    363315    }
     
    365317    return;
    366318}
     319
    367320")})));
    368321    end RecordStmt5;
  • branches/dev-jk-2720/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenTests.mo

    r14165 r14173  
    64576457    JMI_ARR(STACK, jmi_real_t, jmi_array_t, tmp_1, 2, 1)
    64586458    JMI_ARR(STACK, jmi_real_t, jmi_array_t, temp_1_a, 2, 1)
    6459     jmi_real_t i1_0i;
    6460     jmi_int_t i1_0ie;
    6461     jmi_int_t i1_0in;
    64626459    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_1, 2, 1, 2)
    64636460    x_v->a = tmp_1;
     
    64656462    jmi_array_ref_1(temp_1_a, 1) = 1;
    64666463    jmi_array_ref_1(temp_1_a, 2) = 2;
    6467     i1_0in = 0;
    6468     i1_0ie = floor((2) - (1));
    6469     for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
    6470         jmi_array_ref_1(x_v->a, i1_0i) = jmi_array_val_1(temp_1_a, i1_0i);
    6471     }
     6464    JMI_ASG(GEN_ARR, x_v->a, temp_1_a)
    64726465    o_v = jmi_array_val_1(x_v->a, 1);
    64736466    JMI_RET(GEN, o_o, o_v)
     
    67016694 A x = f();
    67026695
    6703     annotation(__JModelica(UnitTesting(tests={
    6704         CCodeGenTestCase(
    6705             name="CRecordDecl11",
    6706             description="C code generation for records: outputs: array in record",
    6707             variability_propagation=false,
    6708             inline_functions="none",
    6709             generate_ode=false,
    6710             generate_dae=true,
    6711             template="
     6696annotation(__JModelica(UnitTesting(tests={
     6697    CCodeGenTestCase(
     6698        name="CRecordDecl11",
     6699        description="C code generation for records: outputs: array in record",
     6700        variability_propagation=false,
     6701        inline_functions="none",
     6702        generate_ode=false,
     6703        generate_dae=true,
     6704        template="
    67126705$C_function_headers$
    67136706$C_functions$
    67146707$C_DAE_equation_residuals$
    67156708",
    6716             generatedCode="
     6709        generatedCode="
    67176710void func_CCodeGenTests_CRecordDecl11_f_def0(A_0_r* x_v);
    67186711
     
    67226715    JMI_ARR(STACK, jmi_real_t, jmi_array_t, tmp_1, 2, 1)
    67236716    JMI_ARR(STACK, jmi_real_t, jmi_array_t, temp_1_a, 2, 1)
    6724     jmi_real_t i1_0i;
    6725     jmi_int_t i1_0ie;
    6726     jmi_int_t i1_0in;
    67276717    if (x_v == NULL) {
    67286718        JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_1, 2, 1, 2)
     
    67336723    jmi_array_ref_1(temp_1_a, 1) = 1;
    67346724    jmi_array_ref_1(temp_1_a, 2) = 2;
    6735     i1_0in = 0;
    6736     i1_0ie = floor((2) - (1));
    6737     for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
    6738         jmi_array_ref_1(x_v->a, i1_0i) = jmi_array_val_1(temp_1_a, i1_0i);
    6739     }
     6725    JMI_ASG(GEN_ARR, x_v->a, temp_1_a)
    67406726    JMI_DYNAMIC_FREE()
    67416727    return;
  • branches/dev-jk-2720/Compiler/ModelicaFrontEnd/test/modelica/FunctionTests.mo

    r14165 r14173  
    51435143  init temp_1 as Real[2];
    51445144  (temp_1) := FunctionTests.ArrayExpInFunc12.f1();
    5145   for i1 in 1:2 loop
    5146    b.x[i1] := temp_1[i1];
    5147   end for;
     5145  b.x := temp_1;
    51485146  return;
    51495147 end FunctionTests.ArrayExpInFunc12.f2;
     
    86188616    R x = f1(1);
    86198617
    8620     annotation(__JModelica(UnitTesting(tests={
    8621         TransformCanonicalTestCase(
    8622             name="ArrayOutputScalarization20",
    8623             description="Checks for bug in #1895",
    8624             variability_propagation=false,
    8625             inline_functions="none",
    8626             flatModel="
     8618annotation(__JModelica(UnitTesting(tests={
     8619    TransformCanonicalTestCase(
     8620        name="ArrayOutputScalarization20",
     8621        description="Checks for bug in #1895",
     8622        variability_propagation=false,
     8623        inline_functions="none",
     8624        flatModel="
    86278625fclass FunctionTests.ArrayOutputScalarization20
    86288626 Real x.a;
     
    86508648  temp_1[2] := 2;
    86518649  f.a := e;
    8652   for i1 in 1:2 loop
    8653    f.b[i1] := temp_1[i1];
    8654   end for;
     8650  f.b := temp_1;
    86558651  return;
    86568652 end FunctionTests.ArrayOutputScalarization20.f2;
     
    86808676    R z = f(time);
    86818677
    8682     annotation(__JModelica(UnitTesting(tests={
    8683         TransformCanonicalTestCase(
    8684             name="ArrayOutputScalarization21",
    8685             description="Scalarization of matrix in record as output of function",
    8686             inline_functions="none",
    8687             flatModel="
     8678annotation(__JModelica(UnitTesting(tests={
     8679    TransformCanonicalTestCase(
     8680        name="ArrayOutputScalarization21",
     8681        description="Scalarization of matrix in record as output of function",
     8682        inline_functions="none",
     8683        flatModel="
    86888684fclass FunctionTests.ArrayOutputScalarization21
    86898685 Real z.x[1,1];
     
    87158711   temp_1[2,i1] := temp_3[i1];
    87168712  end for;
    8717   for i1 in 1:2 loop
    8718    for i2 in 1:2 loop
    8719     y.x[i1,i2] := temp_1[i1,i2];
    8720    end for;
    8721   end for;
     8713  y.x := temp_1;
    87228714  return;
    87238715 end FunctionTests.ArrayOutputScalarization21.f;
     
    89248916    a := fwrap({R({1,1},{1,1}),R({1,1},{1,1})});
    89258917
    8926     annotation(__JModelica(UnitTesting(tests={
    8927         TransformCanonicalTestCase(
    8928             name="ArrayOutputScalarization25",
    8929             description="Scalarize function call statements.",
    8930             variability_propagation=false,
    8931             inline_functions="none",
    8932             flatModel="
     8918annotation(__JModelica(UnitTesting(tests={
     8919    TransformCanonicalTestCase(
     8920        name="ArrayOutputScalarization25",
     8921        description="Scalarize function call statements.",
     8922        variability_propagation=false,
     8923        inline_functions="none",
     8924        flatModel="
    89338925fclass FunctionTests.ArrayOutputScalarization25
    89348926 Real a[1].x[1];
     
    89858977  end for;
    89868978  for i1 in 1:2 loop
    8987    for i2 in 1:2 loop
    8988     o[i1].x[i2] := i[i1].x[i2];
    8989    end for;
    8990    for i2 in 1:2 loop
    8991     o[i1].y[i2] := i[i1].y[i2];
    8992    end for;
     8979   o[i1].x := i[i1].x;
     8980   o[i1].y := i[i1].y;
    89938981  end for;
    89948982  return;
     
    1066110649  init temp_1 as Real[2];
    1066210650  (temp_1) := FunctionTests.UnknownArray33.f2(FunctionTests.UnknownArray33.f2(a));
    10663   for i1 in 1:2 loop
    10664    c.x[i1] := temp_1[i1];
    10665   end for;
     10651  c.x := temp_1;
    1066610652  return;
    1066710653 end FunctionTests.UnknownArray33.f;
     
    1113211118    R[1] r = f({R({2,3})});
    1113311119   
    11134     annotation(__JModelica(UnitTesting(tests={
    11135         TransformCanonicalTestCase(
    11136             name="UnknownArray40",
    11137             description="Unknown size record array",
    11138             variability_propagation=false,
    11139             inline_functions="none",
    11140             flatModel="
     11120annotation(__JModelica(UnitTesting(tests={
     11121    TransformCanonicalTestCase(
     11122        name="UnknownArray40",
     11123        description="Unknown size record array",
     11124        variability_propagation=false,
     11125        inline_functions="none",
     11126        flatModel="
    1114111127fclass FunctionTests.UnknownArray40
    1114211128 Real r[1].y[1];
     
    1115511141  end for;
    1115611142  for i1 in 1:size(i, 1) loop
    11157    for i2 in 1:2 loop
    11158     o[i1].y[i2] := i[i1].y[i2];
    11159    end for;
     11143   o[i1].y := i[i1].y;
    1116011144  end for;
    1116111145  for i1 in 1:size(i, 1) loop
    11162    for i2 in 1:2 loop
    11163     o[i1].y[i2] := i[i1].y[i2];
    11164    end for;
     11146   o[i1].y := i[i1].y;
    1116511147  end for;
    1116611148  for i1 in 1:size(i, 1) loop
    11167    for i2 in 1:2 loop
    11168     o[i1].y[i2] := i[i1].y[i2];
    11169    end for;
     11149   o[i1].y := i[i1].y;
    1117011150  end for;
    1117111151  for i1 in 1:size(i, 1) loop
    11172    for i2 in 1:2 loop
    11173     o[i1].y[i2] := i[i1].y[i2];
    11174    end for;
     11152   o[i1].y := i[i1].y;
    1117511153  end for;
    1117611154  return;
     
    1127711255    R1[1] c = f(1);
    1127811256   
    11279     annotation(__JModelica(UnitTesting(tests={
    11280         TransformCanonicalTestCase(
    11281             name="UnknownArray42",
    11282             description="Unknown size record array",
    11283             variability_propagation=false,
    11284             inline_functions="none",
    11285             flatModel="
     11257annotation(__JModelica(UnitTesting(tests={
     11258    TransformCanonicalTestCase(
     11259        name="UnknownArray42",
     11260        description="Unknown size record array",
     11261        variability_propagation=false,
     11262        inline_functions="none",
     11263        flatModel="
    1128611264fclass FunctionTests.UnknownArray42
    1128711265 Real c[1].y[1].p1[1];
     
    1131311291  for i1 in 1:m loop
    1131411292   for i2 in 1:1 loop
    11315     for i3 in 1:1 loop
    11316      o[i1].y[i2].p1[i3] := temp_1[i1].y[i2].p1[i3];
    11317     end for;
     11293    o[i1].y[i2].p1 := temp_1[i1].y[i2].p1;
    1131811294    o[i1].y[i2].p2 := temp_1[i1].y[i2].p2;
    1131911295   end for;
    11320    for i2 in 1:1 loop
    11321     o[i1].z.p1[i2] := temp_1[i1].z.p1[i2];
    11322    end for;
     11296   o[i1].z.p1 := temp_1[i1].z.p1;
    1132311297   o[i1].z.p2 := temp_1[i1].z.p2;
    1132411298  end for;
     
    1136311337    R1 r = f({3,4});
    1136411338   
    11365     annotation(__JModelica(UnitTesting(tests={
    11366         TransformCanonicalTestCase(
    11367             name="UnknownArray43",
    11368             description="Unknown size array in record constructor",
    11369             variability_propagation=false,
    11370             inline_functions="none",
    11371             flatModel="
     11339annotation(__JModelica(UnitTesting(tests={
     11340    TransformCanonicalTestCase(
     11341        name="UnknownArray43",
     11342        description="Unknown size array in record constructor",
     11343        variability_propagation=false,
     11344        inline_functions="none",
     11345        flatModel="
    1137211346fclass FunctionTests.UnknownArray43
    1137311347 Real r.x[1];
     
    1138211356 algorithm
    1138311357  assert(size(x, 1) == 2, \"Mismatching sizes in FunctionTests.UnknownArray43.f\");
    11384   for i1 in 1:2 loop
    11385    r.x[i1] := x[i1];
    11386   end for;
     11358  r.x := x;
    1138711359  return;
    1138811360 end FunctionTests.UnknownArray43.f;
     
    1141111383    R2 r = f({R1({3}),R1({4})});
    1141211384   
    11413     annotation(__JModelica(UnitTesting(tests={
    11414         TransformCanonicalTestCase(
    11415             name="UnknownArray44",
    11416             description="Unknown size record array in record constructor",
    11417             variability_propagation=false,
    11418             inline_functions="none",
    11419             flatModel="
     11385annotation(__JModelica(UnitTesting(tests={
     11386    TransformCanonicalTestCase(
     11387        name="UnknownArray44",
     11388        description="Unknown size record array in record constructor",
     11389        variability_propagation=false,
     11390        inline_functions="none",
     11391        flatModel="
    1142011392fclass FunctionTests.UnknownArray44
    1142111393 Real r.y[1].x[1];
     
    1143311405  assert(size(r1, 1) == 1, \"Mismatching sizes in FunctionTests.UnknownArray44.f\");
    1143411406  for i1 in 1:1 loop
    11435    for i2 in 1:1 loop
    11436     r2.y[i1].x[i2] := r1[i1].x[i2];
    11437    end for;
     11407   r2.y[i1].x := r1[i1].x;
    1143811408  end for;
    1143911409  return;
     
    1182711797    end F;
    1182811798    R r = F({(sin(time) + 1) / 2});
    11829     annotation(__JModelica(UnitTesting(tests={
    11830         TransformCanonicalTestCase(
    11831             name="UnknownArray53",
    11832             description="Bug in #5272",
    11833             inline_functions="none",
    11834             flatModel="
     11799annotation(__JModelica(UnitTesting(tests={
     11800    TransformCanonicalTestCase(
     11801        name="UnknownArray53",
     11802        description="Bug in #5272",
     11803        inline_functions="none",
     11804        flatModel="
    1183511805fclass FunctionTests.UnknownArray53
    1183611806 Real r.a[1];
     
    1186111831   temp_1[i1 + size(X, 1)] := temp_2[i1];
    1186211832  end for;
    11863   for i1 in 1:2 loop
    11864    r.a[i1] := temp_1[i1];
    11865   end for;
     11833  r.a := temp_1;
    1186611834  return;
    1186711835 end FunctionTests.UnknownArray53.F;
  • branches/dev-jk-2720/Compiler/ModelicaFrontEnd/test/modelica/RecordTests.mo

    r14165 r14173  
    63196319 Real q = f(1, 2);
    63206320
    6321     annotation(__JModelica(UnitTesting(tests={
    6322         TransformCanonicalTestCase(
    6323             name="RecordFunc5",
    6324             description="Scalarization of records in functions: inner array, assignment",
    6325             variability_propagation=false,
    6326             flatModel="
     6321annotation(__JModelica(UnitTesting(tests={
     6322    TransformCanonicalTestCase(
     6323        name="RecordFunc5",
     6324        description="Scalarization of records in functions: inner array, assignment",
     6325        variability_propagation=false,
     6326        flatModel="
    63276327fclass RecordTests.RecordFunc5
    63286328 Real q;
     
    63406340  z.x[1] := ix;
    63416341  z.x[2] := iy;
    6342   for i1 in 1:2 loop
    6343    w.x[i1] := z.x[i1];
    6344   end for;
     6342  w.x := z.x;
    63456343  o := w.x[1] * w.x[2];
    63466344  return;
     
    63736371 Real q = f(1, 2);
    63746372
    6375     annotation(__JModelica(UnitTesting(tests={
    6376         TransformCanonicalTestCase(
    6377             name="RecordFunc6",
    6378             description="Scalarization of records in functions: record constructor",
    6379             variability_propagation=false,
    6380             flatModel="
     6373annotation(__JModelica(UnitTesting(tests={
     6374    TransformCanonicalTestCase(
     6375        name="RecordFunc6",
     6376        description="Scalarization of records in functions: record constructor",
     6377        variability_propagation=false,
     6378        flatModel="
    63816379fclass RecordTests.RecordFunc6
    63826380 Real q;
     
    63956393  temp_1[1] := ix;
    63966394  temp_1[2] := iy;
    6397   for i1 in 1:2 loop
    6398    z.x[i1] := temp_1[i1];
    6399   end for;
     6395  z.x := temp_1;
    64006396  o := z.x[1] * z.x[2];
    64016397  return;
     
    66056601 A[1] a2 = f(a1);
    66066602
    6607     annotation(__JModelica(UnitTesting(tests={
    6608         TransformCanonicalTestCase(
    6609             name="RecordFunc10",
    6610             description="Scalarization of records in functions: array of records with array of reals.",
    6611             variability_propagation=false,
    6612             flatModel="
     6603annotation(__JModelica(UnitTesting(tests={
     6604    TransformCanonicalTestCase(
     6605        name="RecordFunc10",
     6606        description="Scalarization of records in functions: array of records with array of reals.",
     6607        variability_propagation=false,
     6608        flatModel="
    66136609fclass RecordTests.RecordFunc10
    66146610 Real a1[1].x[1];
     
    66316627  end for;
    66326628  for i1 in 1:1 loop
    6633    for i2 in 1:2 loop
    6634     x[i1].x[i2] := y[i1].x[i2];
    6635    end for;
     6629   x[i1].x := y[i1].x;
    66366630  end for;
    66376631  return;
     
    66626656 A a2 = f(a1);
    66636657
    6664     annotation(__JModelica(UnitTesting(tests={
    6665         TransformCanonicalTestCase(
    6666             name="RecordFunc11",
    6667             description="Scalarization of records in functions: array of records with array of reals.",
    6668             variability_propagation=false,
    6669             inline_functions="none",
    6670             flatModel="
     6658annotation(__JModelica(UnitTesting(tests={
     6659    TransformCanonicalTestCase(
     6660        name="RecordFunc11",
     6661        description="Scalarization of records in functions: array of records with array of reals.",
     6662        variability_propagation=false,
     6663        inline_functions="none",
     6664        flatModel="
    66716665fclass RecordTests.RecordFunc11
    66726666 Real a1[1].x[1];
     
    66876681   assert(2 == size(x[i1].x, 1), \"Mismatching sizes in function 'RecordTests.RecordFunc11.f', component 'x[i1].x', dimension '1'\");
    66886682  end for;
    6689   for i1 in 1:2 loop
    6690    y.x[i1] := x[1].x[i1];
    6691   end for;
     6683  y.x := x[1].x;
    66926684  return;
    66936685 end RecordTests.RecordFunc11.f;
     
    68176809 A x = f();
    68186810
    6819     annotation(__JModelica(UnitTesting(tests={
    6820         TransformCanonicalTestCase(
    6821             name="RecordOutput3",
    6822             description="Scalarization of records in functions: record output: record containing array",
    6823             variability_propagation=false,
    6824             inline_functions="none",
    6825             flatModel="
     6811annotation(__JModelica(UnitTesting(tests={
     6812    TransformCanonicalTestCase(
     6813        name="RecordOutput3",
     6814        description="Scalarization of records in functions: record output: record containing array",
     6815        variability_propagation=false,
     6816        inline_functions="none",
     6817        flatModel="
    68266818fclass RecordTests.RecordOutput3
    68276819 Real x.x[1];
     
    68466838  temp_2[2] := 4;
    68476839  temp_2[3] := 5;
    6848   for i1 in 1:2 loop
    6849    o.x[i1] := temp_1[i1];
    6850   end for;
    6851   for i1 in 1:3 loop
    6852    o.y[i1] := temp_2[i1];
    6853   end for;
     6840  o.x := temp_1;
     6841  o.y := temp_2;
    68546842  return;
    68556843 end RecordTests.RecordOutput3.f;
  • branches/dev-jk-2720/Compiler/ModelicaMiddleEnd/src/jastadd/scalarization/ScalarizeAlgorithms.jrag

    r14165 r14173  
    174174   
    175175    syn boolean FExp.keepCompositeAssign() = useTempVar && indexNames == null;
    176     eq FAccessExp.keepCompositeAssign() = !isSlice() && getFAccess().myTopFV().keepCompositeAssign();
     176    eq FAccessExp.keepCompositeAssign() = !isSlice() && (!myFV().isRecord() || getFAccess().myTopFV().isImmutable());
    177177    eq FTempAccessExp.keepCompositeAssign() = indexNames == null;
    178    
    179     syn boolean FAbstractVariable.keepCompositeAssign() = !isRecord() || isImmutable();
    180178   
    181179    syn boolean FAbstractVariable.isImmutable() = isConstant();
    182180    eq FFunctionVariable.isImmutable() = isInput() || getVisibilityType().isTemporary();
    183    
    184181   
    185182    inh boolean FExp.inLoop();
  • branches/dev-jk-2720/Compiler/ModelicaMiddleEnd/src/jastadd/scalarization/ScalarizeFunctions.jrag

    r13846 r14173  
    127127            for (FAbstractVariable fv : left) {
    128128                if (right.contains(fv)) {
    129                     return true;
     129                    return !getLeft().duringFunctionInlining();
    130130                }
    131131            }
  • branches/dev-jk-2720/Compiler/ModelicaMiddleEnd/test/modelica/AlgorithmTests.mo

    r14169 r14173  
    574574    y2 := y2[{2+1-i for i in 1:2}];
    575575   
    576     annotation(__JModelica(UnitTesting(tests={
    577         TransformCanonicalTestCase(
    578             name="TempAssign3",
    579             description="Scalarizing assignment temp generation",
    580             flatModel="
     576annotation(__JModelica(UnitTesting(tests={
     577    TransformCanonicalTestCase(
     578        name="TempAssign3",
     579        description="Scalarizing assignment temp generation",
     580        flatModel="
    581581fclass AlgorithmTests.TempAssign3
    582582 Real x[1].a[2];
     
    621621  init y as AlgorithmTests.TempAssign3.R[size(x, 1)];
    622622  for i1 in 1:size(x, 1) loop
    623    for i2 in 1:2 loop
    624     y[i1].a[i2] := x[i1].a[i2];
    625    end for;
     623   y[i1].a := x[i1].a;
    626624  end for;
    627625  t := size(x, 1);
     
    635633  init temp_2 as AlgorithmTests.TempAssign3.R[max(t, 0)];
    636634  for i1 in 1:max(t, 0) loop
    637    init temp_2[i1].a as Real[2];
    638    for i2 in 1:2 loop
    639     temp_2[i1].a[i2] := y[temp_1[i1]].a[i2];
    640    end for;
     635   temp_2[i1].a := y[temp_1[i1]].a;
    641636  end for;
    642637  for i1 in 1:max(t, 0) loop
    643    for i2 in 1:2 loop
    644     y[i1].a[i2] := temp_2[i1].a[i2];
    645    end for;
     638   y[i1].a := temp_2[i1].a;
    646639  end for;
    647640  return;
     
    785778  temp_1[1] := 1;
    786779  temp_1[2] := 2;
    787   for i1 in 1:2 loop
    788    r2.r1a.x[i1] := temp_1[i1];
    789   end for;
     780  r2.r1a.x := temp_1;
    790781  init temp_2 as Integer[2];
    791782  temp_2[1] := 1;
    792783  temp_2[2] := 2;
    793   for i1 in 1:2 loop
    794    r2.r1b.x[i1] := temp_2[i1];
    795   end for;
     784  r2.r1b.x := temp_2;
    796785  init temp_3 as Integer[2];
    797786  temp_3[1] := 1;
    798787  temp_3[2] := 2;
    799   for i1 in 1:2 loop
    800    r3.r2a.r1a.x[i1] := temp_3[i1];
    801   end for;
     788  r3.r2a.r1a.x := temp_3;
    802789  init temp_4 as Integer[2];
    803790  temp_4[1] := 1;
    804791  temp_4[2] := 2;
    805   for i1 in 1:2 loop
    806    r3.r2a.r1b.x[i1] := temp_4[i1];
    807   end for;
     792  r3.r2a.r1b.x := temp_4;
    808793  init temp_5 as Integer[2];
    809794  temp_5[1] := 1;
    810795  temp_5[2] := 2;
    811   for i1 in 1:2 loop
    812    r3.r2b.r1a.x[i1] := temp_5[i1];
    813   end for;
     796  r3.r2b.r1a.x := temp_5;
    814797  init temp_6 as Integer[2];
    815798  temp_6[1] := 1;
    816799  temp_6[2] := 2;
    817   for i1 in 1:2 loop
    818    r3.r2b.r1b.x[i1] := temp_6[i1];
    819   end for;
     800  r3.r2b.r1b.x := temp_6;
    820801  init temp_7 as Integer[2];
    821802  temp_7[1] := 1;
    822803  temp_7[2] := 2;
    823   for i1 in 1:2 loop
    824    r.x[i1] := temp_7[i1];
    825   end for;
     804  r.x := temp_7;
    826805  init temp_8 as Real[2];
    827806  temp_8[1] := x;
    828807  temp_8[2] := 1;
    829   for i1 in 1:2 loop
    830    r2.r1a.x[i1] := temp_8[i1];
    831   end for;
    832   init temp_9 as Real[2];
    833   for i1 in 1:2 loop
    834    temp_9[i1] := r2.r1a.x[i1];
    835   end for;
    836   for i1 in 1:2 loop
    837    r2.r1b.x[i1] := temp_9[i1];
    838   end for;
    839   init temp_10 as Real[2];
    840   for i1 in 1:2 loop
    841    temp_10[i1] := r2.r1a.x[i1];
    842   end for;
    843   for i1 in 1:2 loop
    844    r3.r2a.r1a.x[i1] := temp_10[i1];
    845   end for;
    846   init temp_11 as Real[2];
    847   for i1 in 1:2 loop
    848    temp_11[i1] := r3.r2a.r1a.x[i1];
    849   end for;
    850   for i1 in 1:2 loop
    851    r3.r2a.r1b.x[i1] := temp_11[i1];
    852   end for;
    853   init temp_12 as Real[2];
    854   for i1 in 1:2 loop
    855    temp_12[i1] := r3.r2a.r1b.x[i1];
    856   end for;
    857   for i1 in 1:2 loop
    858    r3.r2b.r1a.x[i1] := temp_12[i1];
    859   end for;
    860   init temp_13 as Real[2];
    861   for i1 in 1:2 loop
    862    temp_13[i1] := r3.r2b.r1a.x[i1];
    863   end for;
    864   for i1 in 1:2 loop
    865    r3.r2b.r1b.x[i1] := temp_13[i1];
    866   end for;
    867   for i1 in 1:2 loop
    868    r.x[i1] := r3.r2b.r1b.x[i1];
    869   end for;
     808  r2.r1a.x := temp_8;
     809  temp_9 := r2.r1a.x;
     810  r2.r1b.x := temp_9;
     811  temp_10 := r2.r1a.x;
     812  r3.r2a.r1a.x := temp_10;
     813  temp_11 := r3.r2a.r1a.x;
     814  r3.r2a.r1b.x := temp_11;
     815  temp_12 := r3.r2a.r1b.x;
     816  r3.r2b.r1a.x := temp_12;
     817  temp_13 := r3.r2b.r1a.x;
     818  r3.r2b.r1b.x := temp_13;
     819  r.x := r3.r2b.r1b.x;
    870820  return;
    871821 annotation(Inline = false);
  • branches/dev-jk-2720/Compiler/ModelicaMiddleEnd/test/modelica/CommonSubexpressionEliminationTests.mo

    r12934 r14173  
    218218    (y2,y4) = f2(time);
    219219   
    220     annotation(__JModelica(UnitTesting(tests={
    221         TransformCanonicalTestCase(
    222             name="FunctionCall6",
    223             description="Elimination of duplicate function call",
    224             common_subexp_elim=true,
    225             flatModel="
     220annotation(__JModelica(UnitTesting(tests={
     221    TransformCanonicalTestCase(
     222        name="FunctionCall6",
     223        description="Elimination of duplicate function call",
     224        common_subexp_elim=true,
     225        flatModel="
    226226fclass CommonSubexpressionEliminationTests.FunctionCall6
    227227 Real y1;
     
    254254  end for;
    255255  r.x := x;
    256   for i1 in 1:2 loop
    257    for i2 in 1:1 loop
    258     r.y[i1,i2] := temp_1[i1,i2];
    259    end for;
    260   end for;
     256  r.y := temp_1;
    261257  return;
    262258 annotation(Inline = false);
  • branches/dev-jk-2720/Compiler/ModelicaMiddleEnd/test/modelica/Differentiation.mo

    r14165 r14173  
    31923192    jmi_int_t i1_0ie;
    31933193    jmi_int_t i1_0in;
    3194     jmi_real_t i2_1i;
    3195     jmi_int_t i2_1ie;
    3196     jmi_int_t i2_1in;
    3197     jmi_real_t i1_2i;
    3198     jmi_int_t i1_2ie;
    3199     jmi_int_t i1_2in;
     3194    jmi_real_t i1_1i;
     3195    jmi_int_t i1_1ie;
     3196    jmi_int_t i1_1in;
    32003197    JMI_ARRAY_INIT_1(STACK, R_0_r, R_0_ra, rt_a, 1, 1, 1)
    32013198    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_1, 1, 1, 1)
     
    32063203    i1_0ie = floor((1) - (1));
    32073204    for (i1_0i = 1; i1_0in <= i1_0ie; i1_0i = 1 + (++i1_0in)) {
    3208         i2_1in = 0;
    3209         i2_1ie = floor((1) - (1));
    3210         for (i2_1i = 1; i2_1in <= i2_1ie; i2_1i = 1 + (++i2_1in)) {
    3211             jmi_array_ref_1(jmi_array_rec_1(rt_a, i1_0i)->x, i2_1i) = jmi_array_val_1(jmi_array_rec_1(temp_1_a, i1_0i)->x, i2_1i);
    3212         }
     3205        JMI_ASG(GEN_ARR, jmi_array_rec_1(rt_a, i1_0i)->x, jmi_array_rec_1(temp_1_a, i1_0i)->x)
    32133206    }
    32143207    y_v = jmi_array_val_1(jmi_array_rec_1(rt_a, 1)->x, 1);
    3215     i1_2in = 0;
    3216     i1_2ie = floor((jmi_array_size(r_a, 0)) - (1));
    3217     for (i1_2i = 1; i1_2in <= i1_2ie; i1_2i = 1 + (++i1_2in)) {
    3218         if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(r_a, i1_2i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
     3208    i1_1in = 0;
     3209    i1_1ie = floor((jmi_array_size(r_a, 0)) - (1));
     3210    for (i1_1i = 1; i1_1in <= i1_1ie; i1_1i = 1 + (++i1_1in)) {
     3211        if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(r_a, i1_1i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
    32193212            jmi_assert_failed(\"Mismatching sizes in function 'Differentiation.AlgorithmDifferentiation.RecordArrayTemp1.e', component 'r[i1].x', dimension '1'\", JMI_ASSERT_ERROR);
    32203213        }
     
    32353228    JMI_ARR(STACK, R_0_r, R_0_ra, y_an, 1, 1)
    32363229    JMI_ARR(STACK, jmi_real_t, jmi_array_t, tmp_1, 1, 1)
     3230    jmi_real_t i1_2i;
     3231    jmi_int_t i1_2ie;
     3232    jmi_int_t i1_2in;
    32373233    jmi_real_t i1_3i;
    32383234    jmi_int_t i1_3ie;
    32393235    jmi_int_t i1_3in;
    3240     jmi_real_t i1_4i;
    3241     jmi_int_t i1_4ie;
    3242     jmi_int_t i1_4in;
    3243     jmi_real_t i2_5i;
    3244     jmi_int_t i2_5ie;
    3245     jmi_int_t i2_5in;
    32463236    if (y_a == NULL) {
    32473237        JMI_ARRAY_INIT_1(STACK, R_0_r, R_0_ra, y_an, 1, 1, 1)
     
    32503240        y_a = y_an;
    32513241    }
     3242    i1_2in = 0;
     3243    i1_2ie = floor((1) - (1));
     3244    for (i1_2i = 1; i1_2in <= i1_2ie; i1_2i = 1 + (++i1_2in)) {
     3245        if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(x_a, i1_2i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
     3246            jmi_assert_failed(\"Mismatching sizes in function 'Differentiation.AlgorithmDifferentiation.RecordArrayTemp1.F', component 'x[i1].x', dimension '1'\", JMI_ASSERT_ERROR);
     3247        }
     3248    }
    32523249    i1_3in = 0;
    32533250    i1_3ie = floor((1) - (1));
    32543251    for (i1_3i = 1; i1_3in <= i1_3ie; i1_3i = 1 + (++i1_3in)) {
    3255         if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(x_a, i1_3i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
    3256             jmi_assert_failed(\"Mismatching sizes in function 'Differentiation.AlgorithmDifferentiation.RecordArrayTemp1.F', component 'x[i1].x', dimension '1'\", JMI_ASSERT_ERROR);
    3257         }
    3258     }
    3259     i1_4in = 0;
    3260     i1_4ie = floor((1) - (1));
    3261     for (i1_4i = 1; i1_4in <= i1_4ie; i1_4i = 1 + (++i1_4in)) {
    3262         i2_5in = 0;
    3263         i2_5ie = floor((1) - (1));
    3264         for (i2_5i = 1; i2_5in <= i2_5ie; i2_5i = 1 + (++i2_5in)) {
    3265             jmi_array_ref_1(jmi_array_rec_1(y_a, i1_4i)->x, i2_5i) = jmi_array_val_1(jmi_array_rec_1(x_a, i1_4i)->x, i2_5i);
    3266         }
     3252        JMI_ASG(GEN_ARR, jmi_array_rec_1(y_a, i1_3i)->x, jmi_array_rec_1(x_a, i1_3i)->x)
    32673253    }
    32683254    JMI_DYNAMIC_FREE()
     
    32803266    JMI_ARR(STACK, R_0_r, R_0_ra, temp_1_a, 1, 1)
    32813267    JMI_ARR(STACK, R_0_r, R_0_ra, _der_temp_1_a, 1, 1)
    3282     jmi_real_t i1_6i;
    3283     jmi_int_t i1_6ie;
    3284     jmi_int_t i1_6in;
    3285     jmi_real_t i2_7i;
    3286     jmi_int_t i2_7ie;
    3287     jmi_int_t i2_7in;
    3288     jmi_real_t i1_8i;
    3289     jmi_int_t i1_8ie;
    3290     jmi_int_t i1_8in;
     3268    jmi_real_t i1_4i;
     3269    jmi_int_t i1_4ie;
     3270    jmi_int_t i1_4in;
     3271    jmi_real_t i1_5i;
     3272    jmi_int_t i1_5ie;
     3273    jmi_int_t i1_5in;
    32913274    JMI_ARRAY_INIT_1(STACK, R_0_r, R_0_ra, rt_a, 1, 1, 1)
    32923275    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_1, 1, 1, 1)
     
    32993282    *jmi_array_rec_1(_der_temp_1_a, 1) = *jmi_array_rec_1(_der_r_a, 1);
    33003283    *jmi_array_rec_1(temp_1_a, 1) = *jmi_array_rec_1(r_a, 1);
    3301     i1_6in = 0;
    3302     i1_6ie = floor((1) - (1));
    3303     for (i1_6i = 1; i1_6in <= i1_6ie; i1_6i = 1 + (++i1_6in)) {
    3304         i2_7in = 0;
    3305         i2_7ie = floor((1) - (1));
    3306         for (i2_7i = 1; i2_7in <= i2_7ie; i2_7i = 1 + (++i2_7in)) {
    3307             jmi_array_ref_1(jmi_array_rec_1(_der_rt_a, i1_6i)->x, i2_7i) = jmi_array_val_1(jmi_array_rec_1(_der_temp_1_a, i1_6i)->x, i2_7i);
    3308             jmi_array_ref_1(jmi_array_rec_1(rt_a, i1_6i)->x, i2_7i) = jmi_array_val_1(jmi_array_rec_1(temp_1_a, i1_6i)->x, i2_7i);
    3309         }
     3284    i1_4in = 0;
     3285    i1_4ie = floor((1) - (1));
     3286    for (i1_4i = 1; i1_4in <= i1_4ie; i1_4i = 1 + (++i1_4in)) {
     3287        JMI_ASG(GEN_ARR, jmi_array_rec_1(_der_rt_a, i1_4i)->x, jmi_array_rec_1(_der_temp_1_a, i1_4i)->x)
     3288        JMI_ASG(GEN_ARR, jmi_array_rec_1(rt_a, i1_4i)->x, jmi_array_rec_1(temp_1_a, i1_4i)->x)
    33103289    }
    33113290    _der_y_v = jmi_array_val_1(jmi_array_rec_1(_der_rt_a, 1)->x, 1);
    33123291    y_v = jmi_array_val_1(jmi_array_rec_1(rt_a, 1)->x, 1);
    3313     i1_8in = 0;
    3314     i1_8ie = floor((jmi_array_size(r_a, 0)) - (1));
    3315     for (i1_8i = 1; i1_8in <= i1_8ie; i1_8i = 1 + (++i1_8in)) {
    3316         if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(r_a, i1_8i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
     3292    i1_5in = 0;
     3293    i1_5ie = floor((jmi_array_size(r_a, 0)) - (1));
     3294    for (i1_5i = 1; i1_5in <= i1_5ie; i1_5i = 1 + (++i1_5in)) {
     3295        if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(r_a, i1_5i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
    33173296            jmi_assert_failed(\"Mismatching sizes in function 'Differentiation.AlgorithmDifferentiation.RecordArrayTemp1.e', component 'r[i1].x', dimension '1'\", JMI_ASSERT_ERROR);
    33183297        }
     
    33353314    JMI_ARR(STACK, R_0_r, R_0_ra, y_a, 1, 1)
    33363315    JMI_ARR(STACK, jmi_real_t, jmi_array_t, tmp_2, 1, 1)
    3337     jmi_real_t i1_9i;
    3338     jmi_int_t i1_9ie;
    3339     jmi_int_t i1_9in;
    3340     jmi_real_t i1_10i;
    3341     jmi_int_t i1_10ie;
    3342     jmi_int_t i1_10in;
    3343     jmi_real_t i2_11i;
    3344     jmi_int_t i2_11ie;
    3345     jmi_int_t i2_11in;
     3316    jmi_real_t i1_6i;
     3317    jmi_int_t i1_6ie;
     3318    jmi_int_t i1_6in;
     3319    jmi_real_t i1_7i;
     3320    jmi_int_t i1_7ie;
     3321    jmi_int_t i1_7in;
    33463322    JMI_ARRAY_INIT_1(STACK, R_0_r, R_0_ra, y_a, 1, 1, 1)
    33473323    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_2, 1, 1, 1)
     
    33533329        _der_y_a = _der_y_an;
    33543330    }
    3355     i1_9in = 0;
    3356     i1_9ie = floor((1) - (1));
    3357     for (i1_9i = 1; i1_9in <= i1_9ie; i1_9i = 1 + (++i1_9in)) {
    3358         if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(x_a, i1_9i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
     3331    i1_6in = 0;
     3332    i1_6ie = floor((1) - (1));
     3333    for (i1_6i = 1; i1_6in <= i1_6ie; i1_6i = 1 + (++i1_6in)) {
     3334        if (COND_EXP_EQ(1.0, jmi_array_size(jmi_array_rec_1(x_a, i1_6i)->x, 0), JMI_TRUE, JMI_FALSE) == JMI_FALSE) {
    33593335            jmi_assert_failed(\"Mismatching sizes in function 'Differentiation.AlgorithmDifferentiation.RecordArrayTemp1.F', component 'x[i1].x', dimension '1'\", JMI_ASSERT_ERROR);
    33603336        }
    33613337    }
    3362     i1_10in = 0;
    3363     i1_10ie = floor((1) - (1));
    3364     for (i1_10i = 1; i1_10in <= i1_10ie; i1_10i = 1 + (++i1_10in)) {
    3365         i2_11in = 0;
    3366         i2_11ie = floor((1) - (1));
    3367         for (i2_11i = 1; i2_11in <= i2_11ie; i2_11i = 1 + (++i2_11in)) {
    3368             jmi_array_ref_1(jmi_array_rec_1(_der_y_a, i1_10i)->x, i2_11i) = jmi_array_val_1(jmi_array_rec_1(_der_x_a, i1_10i)->x, i2_11i);
    3369             jmi_array_ref_1(jmi_array_rec_1(y_a, i1_10i)->x, i2_11i) = jmi_array_val_1(jmi_array_rec_1(x_a, i1_10i)->x, i2_11i);
    3370         }
     3338    i1_7in = 0;
     3339    i1_7ie = floor((1) - (1));
     3340    for (i1_7i = 1; i1_7in <= i1_7ie; i1_7i = 1 + (++i1_7in)) {
     3341        JMI_ASG(GEN_ARR, jmi_array_rec_1(_der_y_a, i1_7i)->x, jmi_array_rec_1(_der_x_a, i1_7i)->x)
     3342        JMI_ASG(GEN_ARR, jmi_array_rec_1(y_a, i1_7i)->x, jmi_array_rec_1(x_a, i1_7i)->x)
    33713343    }
    33723344    JMI_DYNAMIC_FREE()
    33733345    return;
    33743346}
     3347
    33753348")})));
    33763349        end RecordArrayTemp1;
  • branches/dev-jk-2720/Compiler/ModelicaMiddleEnd/test/modelica/IndexReduction.mo

    r14165 r14173  
    568568  x3 = f(x2.a,A);
    569569
    570     annotation(__JModelica(UnitTesting(tests={
    571         TransformCanonicalTestCase(
    572             name="IndexReduction28_Record",
    573             description="Index reduction: function with record input & output",
    574             inline_functions="none",
    575             dynamic_states=false,
    576             flatModel="
     570annotation(__JModelica(UnitTesting(tests={
     571    TransformCanonicalTestCase(
     572        name="IndexReduction28_Record",
     573        description="Index reduction: function with record input & output",
     574        inline_functions="none",
     575        dynamic_states=false,
     576        flatModel="
    577577fclass IndexReduction.IndexReduction28_Record
    578578 parameter Real A[1,1] = 1 /* 1 */;
     
    619619   temp_1[i1] := temp_2;
    620620  end for;
    621   for i1 in 1:2 loop
    622    y.a[i1] := temp_1[i1];
    623   end for;
     621  y.a := temp_1;
    624622  return;
    625623 annotation(derivative = IndexReduction.IndexReduction28_Record.f_der);
     
    643641   temp_1[i1] := temp_2;
    644642  end for;
    645   for i1 in 1:2 loop
    646    der_y.a[i1] := temp_1[i1];
    647   end for;
     643  der_y.a := temp_1;
    648644  return;
    649645 end IndexReduction.IndexReduction28_Record.f_der;
Note: See TracChangeset for help on using the changeset viewer.