Changeset c15085d
- Timestamp:
- Jul 3, 2020, 4:50:21 PM (3 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- aebf5b0
- Parents:
- 276f105
- Location:
- src
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Pass.impl.hpp
r276f105 rc15085d 28 28 /* setup the scope for passes that want to run code at exit */ \ 29 29 __attribute__((unused)) ast::__pass::guard_value guard2( ast::__pass::at_cleanup (pass, 0) ); \ 30 /* begin tracing memory allocation if requested by this pass */ \ 31 __pass::beginTrace( pass, 0 ); \ 30 32 /* call the implementation of the previsit of this pass */ \ 31 33 __pass::previsit( pass, node, 0 ); … … 42 44 auto __return = __pass::postvisit( pass, node, 0 ); \ 43 45 assertf(__return, "post visit should never return null"); \ 46 /* end tracing memory allocation if requested by this pass */ \ 47 __pass::endTrace( pass, 0 ); \ 44 48 return __return; 45 49 -
src/AST/Pass.proto.hpp
r276f105 rc15085d 16 16 #pragma once 17 17 // IWYU pragma: private, include "Pass.hpp" 18 19 #include "Common/Stats/Heap.h" 18 20 19 21 namespace ast { … … 244 246 #undef FIELD_PTR 245 247 248 template< typename pass_t > 249 static inline auto beginTrace(pass_t & pass, int) -> decltype( pass_t::traceId, void() ) { 250 Stats::Heap::stacktrace_push(pass_t::traceId); 251 } 252 253 template< typename pass_t > 254 static inline auto endTrace(pass_t & pass, int) -> decltype( pass_t::traceId, void() ) { 255 Stats::Heap::stacktrace_pop(); 256 } 257 258 template< typename pass_t > 259 static void beginTrace(pass_t &, long) {} 260 261 template< typename pass_t > 262 static void endTrace(pass_t &, long) {} 263 246 264 // Another feature of the templated visitor is that it calls beginScope()/endScope() for compound statement. 247 265 // All passes which have such functions are assumed desire this behaviour -
src/AST/TypeSubstitution.cpp
r276f105 rc15085d 18 18 19 19 namespace ast { 20 21 22 size_t TypeSubstitution::Substituter::traceId = Stats::Heap::new_stacktrace_id("TypeSubstitution"); 20 23 21 24 TypeSubstitution::TypeSubstitution() { -
src/AST/TypeSubstitution.hpp
r276f105 rc15085d 160 160 // definitition must happen after PassVisitor is included so that WithGuards can be used 161 161 struct TypeSubstitution::Substituter : public WithGuards, public WithVisitorRef<Substituter> { 162 static size_t traceId; 162 163 163 164 Substituter( const TypeSubstitution & sub, bool freeOnly ) : sub( sub ), freeOnly( freeOnly ) {} -
src/Common/Stats/Heap.cc
r276f105 rc15085d 53 53 const size_t passes_size = sizeof(passes) / sizeof(passes[0]); 54 54 size_t passes_cnt = 1; 55 56 StatBlock stacktrace_stats[100]; 57 size_t stacktrace_stats_count = 0; 58 bool stacktrace_stats_enabled = true; 59 60 size_t trace[1000]; 61 const size_t stacktrace_max_depth = sizeof(trace) / sizeof(size_t); 62 size_t stacktrace_depth; 63 64 size_t new_stacktrace_id(const char * const name) { 65 stacktrace_stats[stacktrace_stats_count].name = name; 66 return stacktrace_stats_count++; 67 } 68 69 void stacktrace_push(size_t id) { 70 ++stacktrace_depth; 71 assertf(stacktrace_depth < stacktrace_max_depth, "Stack trace too deep: increase size of array in Heap.cc"); 72 trace[stacktrace_depth] = id; 73 } 74 75 void stacktrace_pop() { 76 assertf(stacktrace_depth > 0, "Invalid stack tracing operation: trace is empty"); 77 --stacktrace_depth; 78 } 55 79 56 80 void newPass( const char * const name ) { … … 116 140 for(size_t i = 0; i < passes_cnt; i++) { 117 141 print(passes[i], nc, total_mallocs, total_frees, overall_peak); 142 } 143 144 print('-', nct); 145 std::cerr << std::setw(nc) << "Trace"; 146 std::cerr << " | Malloc Count | Free Count | Peak Allocs |" << std::endl; 147 148 print('-', nct); 149 for (size_t i = 0; i < stacktrace_stats_count; i++) { 150 print(stacktrace_stats[i], nc, total_mallocs, total_frees, overall_peak); 118 151 } 119 152 print('-', nct); … … 188 221 = std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs); 189 222 } 223 224 if ( stacktrace_stats_enabled && stacktrace_depth > 0) { 225 stacktrace_stats[trace[stacktrace_depth]].mallocs++; 226 } 190 227 return __malloc( size ); 191 228 } … … 196 233 passes[passes_cnt - 1].frees++; 197 234 passes[passes_cnt - 1].n_allocs--; 235 } 236 if ( stacktrace_stats_enabled && stacktrace_depth > 0) { 237 stacktrace_stats[trace[stacktrace_depth]].frees++; 198 238 } 199 239 return __free( ptr ); … … 208 248 = std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs); 209 249 } 250 if ( stacktrace_stats_enabled && stacktrace_depth > 0) { 251 stacktrace_stats[trace[stacktrace_depth]].mallocs++; 252 } 210 253 return __calloc( nelem, size ); 211 254 } … … 218 261 passes[passes_cnt - 1].frees++; 219 262 } // if 263 if ( stacktrace_stats_enabled && stacktrace_depth > 0) { 264 stacktrace_stats[trace[stacktrace_depth]].mallocs++; 265 stacktrace_stats[trace[stacktrace_depth]].frees++; 266 } 220 267 return s; 221 268 } -
src/Common/Stats/Heap.h
r276f105 rc15085d 20 20 void newPass( const char * const name ); 21 21 void print(); 22 23 size_t new_stacktrace_id(const char * const name); 24 void stacktrace_push(size_t id); 25 void stacktrace_pop(); 22 26 } 23 27 } -
src/ResolvExpr/CandidateFinder.cpp
r276f105 rc15085d 596 596 const ast::SymbolTable & symtab; 597 597 public: 598 static size_t traceId; 598 599 CandidateFinder & selfFinder; 599 600 CandidateList & candidates; … … 1507 1508 }; 1508 1509 1510 size_t Finder::traceId = Stats::Heap::new_stacktrace_id("Finder"); 1509 1511 /// Prunes a list of candidates down to those that have the minimum conversion cost for a given 1510 1512 /// return type. Skips ambiguous candidates. -
src/ResolvExpr/CommonType.cc
r276f105 rc15085d 666 666 const ast::OpenVarSet & open; 667 667 public: 668 static size_t traceId; 668 669 ast::ptr< ast::Type > result; 669 670 … … 893 894 }; 894 895 896 size_t CommonType_new::traceId = Stats::Heap::new_stacktrace_id("CommonType_new"); 895 897 namespace { 896 898 ast::ptr< ast::Type > handleReference( -
src/ResolvExpr/ConversionCost.cc
r276f105 rc15085d 795 795 } 796 796 } 797 797 size_t ConversionCost_new::traceId = Stats::Heap::new_stacktrace_id("ConversionCost"); 798 798 799 799 } // namespace ResolvExpr -
src/ResolvExpr/ConversionCost.h
r276f105 rc15085d 88 88 CostCalculation costCalc; 89 89 public: 90 static size_t traceId; 90 91 Cost cost; 91 92 -
src/ResolvExpr/Resolver.cc
r276f105 rc15085d 1236 1236 1237 1237 public: 1238 static size_t traceId; 1238 1239 Resolver_new() = default; 1239 1240 Resolver_new( const ast::SymbolTable & syms ) { symtab = syms; } … … 1266 1267 const ast::ConstructorInit * previsit( const ast::ConstructorInit * ); 1267 1268 }; 1269 size_t Resolver_new::traceId = Stats::Heap::new_stacktrace_id("Resolver"); 1268 1270 1269 1271 void resolve( std::list< ast::ptr< ast::Decl > >& translationUnit ) { -
src/ResolvExpr/Unify.cc
r276f105 rc15085d 702 702 const ast::SymbolTable & symtab; 703 703 public: 704 static size_t traceId; 704 705 bool result; 705 706 … … 1135 1136 }; 1136 1137 1138 size_t Unify_new::traceId = Stats::Heap::new_stacktrace_id("Unify_new"); 1137 1139 bool unify( 1138 1140 const ast::ptr<ast::Type> & type1, const ast::ptr<ast::Type> & type2,
Note: See TracChangeset
for help on using the changeset viewer.