Changeset 11549


Ignore:
Timestamp:
Sep 2, 2018 5:13:26 PM (15 months ago)
Author:
Jonathan Kämpe
Message:

#5670 Fixed minor code gen bug and added workaround for flattening bug where types referenced only through global constant binding expressions was not included in the flat tree.

Location:
trunk/Compiler
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenGlobals.jrag

    r11548 r11549  
    331331       
    332332        String next = p.indent(indent);
    333         str.print(indent, type().nameArray_C(p), "* jmi_global_", tempName_C(), "(jmi_t* jmi) {\n");
     333        str.print(indent, type().nameScalar_C(p), "* jmi_global_", tempName_C(), "(jmi_t* jmi) {\n");
    334334        str.print(next, "JMI_DYNAMIC_INIT()\n");
    335335        str.print(next, "JMI_GLOBALS_INIT()\n");
    336336       
    337         String typeName = type().nameScalar_C(p, false);
     337        String typeName = type().nameScalar_C(p);
    338338        str.print(next, typeName, "* ", tempName_C(), ";\n");
    339339        str.print(next, tempName_C(), " = jmi_dynamic_function_pool_alloc(&dyn_mem, 1*sizeof(", typeName, "), TRUE);\n");
  • trunk/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenGlobalsTests.mo

    r11548 r11549  
    16371637}
    16381638
    1639 R1_0_ra* jmi_global_tmp_2(jmi_t* jmi) {
     1639R1_0_r* jmi_global_tmp_2(jmi_t* jmi) {
    16401640    JMI_DYNAMIC_INIT()
    16411641    JMI_GLOBALS_INIT()
     
    16481648}
    16491649
    1650 R2_1_ra* jmi_global_tmp_3(jmi_t* jmi) {
     1650R2_1_r* jmi_global_tmp_3(jmi_t* jmi) {
    16511651    JMI_DYNAMIC_INIT()
    16521652    JMI_GLOBALS_INIT()
     
    18421842}
    18431843
    1844 R1_0_ra* jmi_global_tmp_2(jmi_t* jmi) {
     1844R1_0_r* jmi_global_tmp_2(jmi_t* jmi) {
    18451845    JMI_DYNAMIC_INIT()
    18461846    JMI_GLOBALS_INIT()
     
    18531853}
    18541854
    1855 R2_1_ra* jmi_global_tmp_3(jmi_t* jmi) {
     1855R2_1_r* jmi_global_tmp_3(jmi_t* jmi) {
    18561856    JMI_DYNAMIC_INIT()
    18571857    JMI_GLOBALS_INIT()
     
    18761876}
    18771877
    1878 R1_0_ra* jmi_global_tmp_5(jmi_t* jmi) {
     1878R1_0_r* jmi_global_tmp_5(jmi_t* jmi) {
    18791879    JMI_DYNAMIC_INIT()
    18801880    JMI_GLOBALS_INIT()
     
    18871887}
    18881888
    1889 R2_1_ra* jmi_global_tmp_6(jmi_t* jmi) {
     1889R2_1_r* jmi_global_tmp_6(jmi_t* jmi) {
    18901890    JMI_DYNAMIC_INIT()
    18911891    JMI_GLOBALS_INIT()
     
    19961996end GlobalConstantForPowInt1;
    19971997
     1998model GlobalConstantRef1
     1999   
     2000    record R1
     2001        Real[:] x;
     2002    end R1;
     2003   
     2004    record R2
     2005        extends R1;
     2006    end R2;
     2007   
     2008    record R3
     2009        extends R1;
     2010    end R3;
     2011   
     2012    package P
     2013        constant R1 r1 = R1(1:2);
     2014        constant R2 r2 = r1;
     2015    end P;
     2016   
     2017    function f
     2018        input Real x;
     2019        input Integer i;
     2020        output Real y = x + P.r2.x[i];
     2021    algorithm
     2022        annotation(Inline=false);
     2023    end f;
     2024
     2025    Real y = f(time, 2);
     2026
     2027annotation(__JModelica(UnitTesting(tests={
     2028    CCodeGenTestCase(
     2029        name="GlobalConstantRef1",
     2030        description="",
     2031        template="
     2032$C_global_temps$
     2033$C_set_globals_start$
     2034$C_functions$
     2035",
     2036        generatedCode="
     2037    R1_0_r* CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef1_P_r2;
     2038
     2039jmi_array_t* jmi_global_tmp_1(jmi_t* jmi) {
     2040    JMI_DYNAMIC_INIT()
     2041    JMI_GLOBALS_INIT()
     2042    JMI_ARR(DYNA, jmi_real_t, jmi_array_t, tmp_1, 2, 1)
     2043    JMI_ARRAY_INIT_1(DYNA, jmi_real_t, jmi_array_t, tmp_1, 2, 1, 2)
     2044    jmi_array_val_1(tmp_1, 1) = AD_WRAP_LITERAL(1);
     2045    jmi_array_val_1(tmp_1, 2) = AD_WRAP_LITERAL(2);
     2046    JMI_GLOBALS_FREE()
     2047    JMI_DYNAMIC_FREE()
     2048    return tmp_1;
     2049}
     2050
     2051R1_0_r* jmi_global_tmp_2(jmi_t* jmi) {
     2052    JMI_DYNAMIC_INIT()
     2053    JMI_GLOBALS_INIT()
     2054    R1_0_r* tmp_2;
     2055    tmp_2 = jmi_dynamic_function_pool_alloc(&dyn_mem, 1*sizeof(R1_0_r), TRUE);
     2056    tmp_2->x = jmi_global_tmp_1(jmi);
     2057    JMI_GLOBALS_FREE()
     2058    JMI_DYNAMIC_FREE()
     2059    return tmp_2;
     2060}
     2061
     2062int jmi_set_globals_start_0(jmi_t* jmi) {
     2063    int ef = 0;
     2064    JMI_DYNAMIC_INIT()
     2065    JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef1_P_r2) = jmi_global_tmp_2(jmi);
     2066    JMI_DYNAMIC_FREE()
     2067    return ef;
     2068}
     2069
     2070int jmi_set_globals_start_0(jmi_t* jmi);
     2071
     2072int jmi_set_globals_start(jmi_t* jmi) {
     2073    int ef = 0;
     2074    JMI_DYNAMIC_INIT()
     2075    ef |= jmi_set_globals_start_0(jmi);
     2076    JMI_DYNAMIC_FREE()
     2077    return ef;
     2078}
     2079
     2080void func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef1_f_def0(jmi_real_t x_v, jmi_real_t i_v, jmi_real_t* y_o) {
     2081    JMI_DYNAMIC_INIT()
     2082    JMI_DEF(REA, y_v)
     2083    y_v = x_v + jmi_array_val_1(JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef1_P_r2)->x, i_v);
     2084    JMI_RET(GEN, y_o, y_v)
     2085    JMI_DYNAMIC_FREE()
     2086    return;
     2087}
     2088
     2089jmi_real_t func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef1_f_exp0(jmi_real_t x_v, jmi_real_t i_v) {
     2090    JMI_DEF(REA, y_v)
     2091    func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef1_f_def0(x_v, i_v, &y_v);
     2092    return y_v;
     2093}
     2094")})));
     2095end GlobalConstantRef1;
     2096
     2097model GlobalConstantRef2
     2098   
     2099    record R1
     2100        Real[:] x;
     2101    end R1;
     2102   
     2103    record R2
     2104        extends R1;
     2105    end R2;
     2106   
     2107    record R3
     2108        extends R1;
     2109    end R3;
     2110   
     2111    package P
     2112        constant R1 r1(x=1:2);
     2113        constant R2 r2 = r1;
     2114    end P;
     2115   
     2116    function f
     2117        input Real x;
     2118        input Integer i;
     2119        output Real y = x + P.r2.x[i];
     2120    algorithm
     2121        annotation(Inline=false);
     2122    end f;
     2123
     2124    Real y = f(time, 2);
     2125
     2126annotation(__JModelica(UnitTesting(tests={
     2127    CCodeGenTestCase(
     2128        name="GlobalConstantRef2",
     2129        description="",
     2130        template="
     2131$C_global_temps$
     2132$C_set_globals_start$
     2133$C_functions$
     2134",
     2135        generatedCode="
     2136    R1_0_r* CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef2_P_r2;
     2137
     2138jmi_array_t* jmi_global_tmp_1(jmi_t* jmi) {
     2139    JMI_DYNAMIC_INIT()
     2140    JMI_GLOBALS_INIT()
     2141    JMI_ARR(DYNA, jmi_real_t, jmi_array_t, tmp_1, 2, 1)
     2142    JMI_ARRAY_INIT_1(DYNA, jmi_real_t, jmi_array_t, tmp_1, 2, 1, 2)
     2143    jmi_array_val_1(tmp_1, 1) = AD_WRAP_LITERAL(1);
     2144    jmi_array_val_1(tmp_1, 2) = AD_WRAP_LITERAL(2);
     2145    JMI_GLOBALS_FREE()
     2146    JMI_DYNAMIC_FREE()
     2147    return tmp_1;
     2148}
     2149
     2150R1_0_r* jmi_global_tmp_2(jmi_t* jmi) {
     2151    JMI_DYNAMIC_INIT()
     2152    JMI_GLOBALS_INIT()
     2153    R1_0_r* tmp_2;
     2154    tmp_2 = jmi_dynamic_function_pool_alloc(&dyn_mem, 1*sizeof(R1_0_r), TRUE);
     2155    tmp_2->x = jmi_global_tmp_1(jmi);
     2156    JMI_GLOBALS_FREE()
     2157    JMI_DYNAMIC_FREE()
     2158    return tmp_2;
     2159}
     2160
     2161int jmi_set_globals_start_0(jmi_t* jmi) {
     2162    int ef = 0;
     2163    JMI_DYNAMIC_INIT()
     2164    JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef2_P_r2) = jmi_global_tmp_2(jmi);
     2165    JMI_DYNAMIC_FREE()
     2166    return ef;
     2167}
     2168
     2169int jmi_set_globals_start_0(jmi_t* jmi);
     2170
     2171int jmi_set_globals_start(jmi_t* jmi) {
     2172    int ef = 0;
     2173    JMI_DYNAMIC_INIT()
     2174    ef |= jmi_set_globals_start_0(jmi);
     2175    JMI_DYNAMIC_FREE()
     2176    return ef;
     2177}
     2178
     2179void func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef2_f_def0(jmi_real_t x_v, jmi_real_t i_v, jmi_real_t* y_o) {
     2180    JMI_DYNAMIC_INIT()
     2181    JMI_DEF(REA, y_v)
     2182    y_v = x_v + jmi_array_val_1(JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef2_P_r2)->x, i_v);
     2183    JMI_RET(GEN, y_o, y_v)
     2184    JMI_DYNAMIC_FREE()
     2185    return;
     2186}
     2187
     2188jmi_real_t func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef2_f_exp0(jmi_real_t x_v, jmi_real_t i_v) {
     2189    JMI_DEF(REA, y_v)
     2190    func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantRef2_f_def0(x_v, i_v, &y_v);
     2191    return y_v;
     2192}
     2193")})));
     2194end GlobalConstantRef2;
     2195
    19982196end GlobalVariables;
    19992197
  • trunk/Compiler/ModelicaFrontEnd/src/jastadd/flattening/Flattening.jrag

    r11546 r11549  
    17851785            if (variability().knownParameterOrLess()) {
    17861786                CValue cval = ceval();
     1787                FExp t = dynamicFExp(cval.buildInstLiteral());
     1788                t.flattenUsedFuncsAndEnums(f);
    17871789                if (cval.hasBuildLiteral()) {
    17881790                    return cval.buildLiteral();
Note: See TracChangeset for help on using the changeset viewer.