Changeset 2765 for trunk/src/kmk
- Timestamp:
- Jan 30, 2015, 1:27:51 AM (10 years ago)
- Location:
- trunk/src/kmk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/Makefile.kmk
r2752 r2765 193 193 CONFIG_WITH_LAZY_DEPS_VARS \ 194 194 CONFIG_WITH_MEMORY_OPTIMIZATIONS \ 195 CONFIG_WITH_COMPILER \ 195 196 \ 196 197 KBUILD_HOST=\"$(KBUILD_TARGET)\" \ … … 207 208 kmk_SOURCES = \ 208 209 main.c \ 209 kbuild.c \210 kbuild-object.c \211 210 read.c \ 212 expreval.c \213 incdep.c \214 211 hash.c \ 215 212 strcache.c \ 216 strcache2.c \217 213 variable.c \ 218 214 ar.c \ … … 227 223 job.c \ 228 224 misc.c \ 229 alloccache.c \230 225 remake.c \ 231 226 rule.c \ … … 233 228 version.c \ 234 229 vpath.c \ 235 remote-stub.c 230 remote-stub.c \ 231 \ 232 alloccache.c \ 233 expreval.c \ 234 incdep.c \ 235 strcache2.c \ 236 kmk_cc_exec.c \ 237 kbuild.c \ 238 kbuild-object.c 236 239 237 240 kmk_DEFS.freebsd.x86 = CONFIG_WITHOUT_THREADS -
trunk/src/kmk/expand.c
r2591 r2765 26 26 #include "variable.h" 27 27 #include "rule.h" 28 #ifdef CONFIG_WITH_COMPILER 29 # include "kmk_cc_exec.h" 30 #endif 28 31 29 32 /* Initially, any errors reported when expanding strings will be reported … … 248 251 v->expanding = 1; 249 252 if (!v->append) 250 /* Expand directly into the variable buffer. */ 251 variable_expand_string_2 (o, v->value, v->value_length, &o); 253 { 254 /* Expand directly into the variable buffer. */ 255 # ifdef CONFIG_WITH_COMPILER 256 v->expand_count++; 257 if ( v->expandprog 258 || (v->expand_count == 10 && kmk_cc_compile_variable_for_expand (v)) ) 259 o = kmk_exec_expand_to_var_buf (v, o); 260 else 261 variable_expand_string_2 (o, v->value, v->value_length, &o); 262 # else 263 MAKE_STATS_2 (v->expand_count++); 264 variable_expand_string_2 (o, v->value, v->value_length, &o); 265 # endif 266 } 252 267 else 253 268 { -
trunk/src/kmk/function.c
r2758 r2765 43 43 # include <limits.h> 44 44 # endif 45 #endif 46 #ifdef CONFIG_WITH_COMPILER 47 # include "kmk_cc_exec.h" 45 48 #endif 46 49 #include <assert.h> /* bird */ … … 2043 2046 size_t off; 2044 2047 const struct floc *reading_file_saved = reading_file; 2045 # ifdef CONFIG_WITH_MAKE_STATS2048 # ifdef CONFIG_WITH_MAKE_STATS 2046 2049 unsigned long long uStartTick = CURRENT_CLOCK_TICK(); 2047 MAKE_STATS_2(v->cEvalVals++); 2048 #endif 2049 2050 /* Make a copy of the value to the variable buffer since 2051 eval_buffer will make changes to its input. */ 2052 2053 off = o - variable_buffer; 2054 variable_buffer_output (o, v->value, v->value_length + 1); 2055 o = variable_buffer + off; 2056 2057 /* Eval the value. Pop the current variable buffer setting so that the 2058 eval'd code can use its own without conflicting. (really necessary?) */ 2059 2060 install_variable_buffer (&buf, &len); 2050 # ifndef CONFIG_WITH_COMPILER 2051 MAKE_STATS_2(v->evalval_count++); 2052 # endif 2053 # endif 2054 2061 2055 var_ctx = !strcmp (funcname, "evalvalctx"); 2062 2056 if (var_ctx) … … 2065 2059 reading_file = &v->fileinfo; 2066 2060 2067 assert (!o[v->value_length]); 2068 eval_buffer (o, o + v->value_length); 2061 # ifdef CONFIG_WITH_COMPILER 2062 /* If this variable has been evaluated more than a few times, it make 2063 sense to compile it to speed up the processing. */ 2064 2065 v->evalval_count++; 2066 if ( v->evalprog 2067 || (v->evalval_count == 3 && kmk_cc_compile_variable_for_eval (v))) 2068 { 2069 install_variable_buffer (&buf, &len); /* Really necessary? */ 2070 kmk_exec_evalval (v); 2071 restore_variable_buffer (buf, len); 2072 } 2073 else 2074 # endif 2075 { 2076 /* Make a copy of the value to the variable buffer first since 2077 eval_buffer will make changes to its input. */ 2078 2079 off = o - variable_buffer; 2080 variable_buffer_output (o, v->value, v->value_length + 1); 2081 o = variable_buffer + off; 2082 assert (!o[v->value_length]); 2083 2084 install_variable_buffer (&buf, &len); /* Really necessary? */ 2085 eval_buffer (o, o + v->value_length); 2086 restore_variable_buffer (buf, len); 2087 } 2069 2088 2070 2089 reading_file = reading_file_saved; 2071 2090 if (var_ctx) 2072 2091 pop_variable_scope (); 2073 restore_variable_buffer (buf, len);2074 2092 2075 2093 MAKE_STATS_2(v->cTicksEvalVal += CURRENT_CLOCK_TICK() - uStartTick); … … 2142 2160 v->value_length = dst - v->value; 2143 2161 } 2162 2163 # ifdef CONFIG_WITH_COMPILER 2164 /* Compile the variable for evalval, evalctx and expansion. */ 2165 2166 if (!v->evalprog) 2167 kmk_cc_compile_variable_for_eval (v); 2168 if (!v->expandprog) 2169 kmk_cc_compile_variable_for_expand (v); 2170 # endif 2144 2171 } 2145 2172 else if (v) -
trunk/src/kmk/variable.c
r2758 r2765 41 41 #ifdef CONFIG_WITH_STRCACHE2 42 42 # include <stddef.h> 43 #endif 44 #ifdef CONFIG_WITH_COMPILER 45 # include "kmk_cc_exec.h" 43 46 #endif 44 47 … … 383 386 v->origin = origin; 384 387 v->recursive = recursive; 385 MAKE_STATS_2(v->changes++); 388 MAKE_STATS_2(v->changes++); 389 #ifdef CONFIG_WITH_COMPILER 390 if (v->evalprog || v->expandprog) 391 kmk_cc_variable_changed (v); 392 #endif 386 393 } 387 394 return v; … … 445 452 #endif 446 453 v->export = v_default; 454 #ifdef CONFIG_WITH_COMPILER 455 v->evalprog = 0; 456 v->expandprog = 0; 457 v->evalval_count = 0; 458 v->expand_count = 0; 459 #else 460 MAKE_STATS_2(v->expand_count = 0); 461 MAKE_STATS_2(v->evalval_count = 0); 462 #endif 447 463 MAKE_STATS_2(v->changes = 0); 448 464 MAKE_STATS_2(v->reallocs = 0); 449 465 MAKE_STATS_2(v->references = 0); 450 MAKE_STATS_2(v->cEvalVals = 0);451 466 MAKE_STATS_2(v->cTicksEvalVal = 0); 452 467 … … 589 604 free (v->value); 590 605 MAKE_STATS_2(v->changes++); 606 #ifdef CONFIG_WITH_COMPILER 607 if (v->evalprog || v->expandprog) 608 kmk_cc_variable_changed (v); 609 #endif 591 610 } 592 611 else … … 605 624 v->aliased = 0; 606 625 v->export = v_default; 626 #ifdef CONFIG_WITH_COMPILER 627 v->evalprog = 0; 628 v->expandprog = 0; 629 v->evalval_count = 0; 630 v->expand_count = 0; 631 #else 632 MAKE_STATS_2(v->expand_count = 0); 633 MAKE_STATS_2(v->evalval_count = 0); 634 #endif 607 635 MAKE_STATS_2(v->changes = 0); 608 636 MAKE_STATS_2(v->reallocs = 0); 609 637 MAKE_STATS_2(v->references = 0); 610 MAKE_STATS_2(v->cEvalVals = 0);611 638 MAKE_STATS_2(v->cTicksEvalVal = 0); 612 639 v->exportable = 1; … … 1242 1269 #ifndef CONFIG_WITH_STRCACHE2 1243 1270 free (v->name); 1271 #endif 1272 #ifdef CONFIG_WITH_COMPILER 1273 if (v->evalprog || v->expandprog) 1274 kmk_cc_variable_deleted (v); 1244 1275 #endif 1245 1276 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE … … 1362 1393 if (from_var->alias) 1363 1394 fatal(NULL, ("Attempting to delete variable aliased '%s'"), from_var->name); 1395 #endif 1396 #ifdef CONFIG_WITH_COMPILER 1397 if (from_var->evalprog || from_var->expandprog) 1398 kmk_cc_variable_deleted (from_var); 1364 1399 #endif 1365 1400 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE … … 2335 2370 free (free_value); 2336 2371 MAKE_STATS_2(v->changes++); 2372 # ifdef CONFIG_WITH_COMPILER 2373 if (v->evalprog || v->expandprog) 2374 kmk_cc_variable_changed (v); 2375 # endif 2337 2376 return v; 2338 2377 #else /* !CONFIG_WITH_VALUE_LENGTH */ … … 2765 2804 2766 2805 2806 #if defined (CONFIG_WITH_COMPILER) || defined (CONFIG_WITH_MAKE_STATS) 2807 static unsigned long var_stats_evalvals, var_stats_evalvaled; 2808 static unsigned long var_stats_expands, var_stats_expanded; 2809 #endif 2767 2810 #ifdef CONFIG_WITH_MAKE_STATS 2768 2811 static unsigned long var_stats_changes, var_stats_changed; 2769 2812 static unsigned long var_stats_reallocs, var_stats_realloced; 2770 2813 static unsigned long var_stats_references, var_stats_referenced; 2771 static unsigned long var_stats_evalvals, var_stats_evalvaled;2772 static uintmax_t var_stats_evalval_ticks;2773 2814 static unsigned long var_stats_val_len, var_stats_val_alloc_len; 2774 2815 static unsigned long var_stats_val_rdonly_len; … … 2838 2879 #endif /* KMK */ 2839 2880 2881 #if defined (CONFIG_WITH_COMPILER) || defined (CONFIG_WITH_MAKE_STATS) 2882 if (v->evalval_count != 0) 2883 # ifdef CONFIG_WITH_MAKE_STATS 2884 printf (_(", %u evalvals (%llu ticks)"), v->evalval_count, v->cTicksEvalVal); 2885 # else 2886 printf (_(", %u evalvals"), v->evalval_count); 2887 # endif 2888 var_stats_evalvals += v->evalval_count; 2889 var_stats_evalvaled += (v->evalval_count != 0); 2890 2891 if (v->expand_count != 0) 2892 printf (_(", %u expands"), v->expand_count); 2893 var_stats_expands += v->expand_count; 2894 var_stats_expanded += (v->expand_count != 0); 2895 # ifdef CONFIG_WITH_COMPILER 2896 if (v->evalprog != 0) 2897 printf (_(", evalprog")); 2898 if (v->expandprog != 0) 2899 printf (_(", expandprog")); 2900 # endif 2901 #endif 2902 2840 2903 #ifdef CONFIG_WITH_MAKE_STATS 2841 2904 if (v->changes != 0) 2842 2905 printf (_(", %u changes"), v->changes); 2843 2906 var_stats_changes += v->changes; 2844 2907 var_stats_changed += (v->changes != 0); 2845 2908 2846 2909 if (v->reallocs != 0) 2847 2910 printf (_(", %u reallocs"), v->reallocs); 2848 2911 var_stats_reallocs += v->reallocs; 2849 2912 var_stats_realloced += (v->reallocs != 0); 2850 2913 2851 2914 if (v->references != 0) 2852 2915 printf (_(", %u references"), v->references); 2853 2916 var_stats_references += v->references; 2854 2917 var_stats_referenced += (v->references != 0); 2855 2856 if (v->cEvalVals != 0)2857 //printf (_(", %u evalvals (%llu ticks)"), v->cEvalVals, v->cTicksEvalVal);2858 printf (_(", %u evalvals (%llu ms)"), v->cEvalVals, v->cTicksEvalVal / 3299998);2859 var_stats_evalvals += v->cEvalVals;2860 var_stats_evalvaled += (v->cEvalVals != 0);2861 2918 2862 2919 var_stats_val_len += v->value_length; … … 2914 2971 print_variable_set (struct variable_set *set, char *prefix) 2915 2972 { 2973 #if defined (CONFIG_WITH_COMPILER) || defined (CONFIG_WITH_MAKE_STATS) 2974 var_stats_expands = var_stats_expanded = var_stats_evalvals 2975 = var_stats_evalvaled = 0; 2976 #endif 2916 2977 #ifdef CONFIG_WITH_MAKE_STATS 2917 2978 var_stats_changes = var_stats_changed = var_stats_reallocs … … 2919 2980 = var_stats_val_len = var_stats_val_alloc_len 2920 2981 = var_stats_val_rdonly_len = 0; 2982 #endif 2921 2983 2922 2984 hash_map_arg (&set->table, print_variable, prefix); … … 2924 2986 if (set->table.ht_fill) 2925 2987 { 2988 #ifdef CONFIG_WITH_MAKE_STATS 2926 2989 unsigned long fragmentation; 2927 2990 … … 2953 3016 (unsigned int)((100.0 * var_stats_referenced) / set->table.ht_fill), 2954 3017 var_stats_references); 3018 #endif 3019 #if defined (CONFIG_WITH_COMPILER) || defined (CONFIG_WITH_MAKE_STATS) 3020 if (var_stats_evalvals) 3021 printf(_("# evalvaled %5lu (%2u%%), evalval calls %6lu\n"), 3022 var_stats_evalvaled, 3023 (unsigned int)((100.0 * var_stats_evalvaled) / set->table.ht_fill), 3024 var_stats_evalvals); 3025 if (var_stats_expands) 3026 printf(_("# expanded %5lu (%2u%%), expands %6lu\n"), 3027 var_stats_expanded, 3028 (unsigned int)((100.0 * var_stats_expanded) / set->table.ht_fill), 3029 var_stats_expands); 3030 #endif 2955 3031 } 2956 #else2957 hash_map_arg (&set->table, print_variable, prefix);2958 #endif2959 3032 2960 3033 fputs (_("# variable set hash-table stats:\n"), stdout); -
trunk/src/kmk/variable.h
r2758 r2765 113 113 unsigned int reallocs; /* Realloc on value count. */ 114 114 unsigned int references; /* Lookup count. */ 115 unsigned cEvalVals; /* $(evalval v) or $(evalvalctx v) count */116 115 unsigned long long cTicksEvalVal; /* Number of ticks spend in cEvalVal. */ 116 #endif 117 #if defined (CONFIG_WITH_COMPILER) || defined (CONFIG_WITH_MAKE_STATS) 118 unsigned int evalval_count; /* Times used with $(evalval ) or $(evalctx ). */ 119 unsigned int expand_count; /* Times expanded (not to be confused with exp_count). */ 120 #endif 121 #ifdef CONFIG_WITH_COMPILER 122 struct cceval *evalprog; /* Pointer to evalval/evalctx "program". */ 123 struct ccexpand *expandprog; /* Pointer to variable expand "program". */ 117 124 #endif 118 125 };
Note:
See TracChangeset
for help on using the changeset viewer.