* Optimise null-ary term builders. Also declare all term builder
functions as pure, which might improve performance a bit.
This commit is contained in:
		
							parent
							
								
									68174bdc7d
								
							
						
					
					
						commit
						d300b4383d
					
				
					 3 changed files with 16 additions and 7 deletions
				
			
		|  | @ -99,8 +99,17 @@ while (<STDIN>) { | ||||||
|          |          | ||||||
|         print IMPL "AFun sym$funname = 0;\n"; |         print IMPL "AFun sym$funname = 0;\n"; | ||||||
|          |          | ||||||
|  |         if ($arity == 0) { | ||||||
|  |             print HEADER "extern ATerm const$funname;\n\n"; | ||||||
|  |             print IMPL "ATerm const$funname = 0;\n"; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         print HEADER "static inline $result make$funname($formals) __attribute__ ((pure, nothrow));\n"; | ||||||
|         print HEADER "static inline $result make$funname($formals) {\n"; |         print HEADER "static inline $result make$funname($formals) {\n"; | ||||||
|         if ($arity <= 6) { |         if ($arity == 0) { | ||||||
|  |             print HEADER "    return const$funname;\n"; | ||||||
|  |         } | ||||||
|  |         elsif ($arity <= 6) { | ||||||
|             print HEADER "    return (ATerm) ATmakeAppl$arity(sym$funname$args);\n"; |             print HEADER "    return (ATerm) ATmakeAppl$arity(sym$funname$args);\n"; | ||||||
|         } else { |         } else { | ||||||
|             $args =~ s/^,//; |             $args =~ s/^,//; | ||||||
|  | @ -119,6 +128,10 @@ while (<STDIN>) { | ||||||
| 
 | 
 | ||||||
|         $init .= "    sym$funname = ATmakeAFun(\"$const\", $arity, ATfalse);\n"; |         $init .= "    sym$funname = ATmakeAFun(\"$const\", $arity, ATfalse);\n"; | ||||||
|         $init .= "    ATprotectAFun(sym$funname);\n"; |         $init .= "    ATprotectAFun(sym$funname);\n"; | ||||||
|  |         if ($arity == 0) { | ||||||
|  |             $init .= "    const$funname = (ATerm) ATmakeAppl0(sym$funname);\n"; | ||||||
|  |             $init .= "    ATprotect(&const$funname);\n"; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     elsif (/^\s*(\w+)\s*=\s*(.*)$/) { |     elsif (/^\s*(\w+)\s*=\s*(.*)$/) { | ||||||
|  |  | ||||||
|  | @ -6,8 +6,6 @@ | ||||||
| EvalState::EvalState() | EvalState::EvalState() | ||||||
|     : normalForms(32768, 50) |     : normalForms(32768, 50) | ||||||
| { | { | ||||||
|     blackHole = makeBlackHole(); |  | ||||||
|      |  | ||||||
|     nrEvaluated = nrCached = 0; |     nrEvaluated = nrCached = 0; | ||||||
| 
 | 
 | ||||||
|     initNixExprHelpers(); |     initNixExprHelpers(); | ||||||
|  | @ -490,14 +488,14 @@ Expr evalExpr(EvalState & state, Expr e) | ||||||
|        previously evaluated expressions. */ |        previously evaluated expressions. */ | ||||||
|     Expr nf = state.normalForms.get(e); |     Expr nf = state.normalForms.get(e); | ||||||
|     if (nf) { |     if (nf) { | ||||||
|         if (nf == state.blackHole) |         if (nf == makeBlackHole()) | ||||||
|             throw Error("infinite recursion encountered"); |             throw Error("infinite recursion encountered"); | ||||||
|         state.nrCached++; |         state.nrCached++; | ||||||
|         return nf; |         return nf; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* Otherwise, evaluate and memoize. */ |     /* Otherwise, evaluate and memoize. */ | ||||||
|     state.normalForms.set(e, state.blackHole); |     state.normalForms.set(e, makeBlackHole()); | ||||||
|     try { |     try { | ||||||
|         nf = evalExpr2(state, e); |         nf = evalExpr2(state, e); | ||||||
|     } catch (Error & err) { |     } catch (Error & err) { | ||||||
|  | @ -536,5 +534,4 @@ void printEvalStats(EvalState & state) | ||||||
|         % state.nrEvaluated % state.nrCached |         % state.nrEvaluated % state.nrCached | ||||||
|         % ((float) state.nrCached / (float) state.nrEvaluated * 100) |         % ((float) state.nrCached / (float) state.nrEvaluated * 100) | ||||||
|         % AT_calcAllocatedSize()); |         % AT_calcAllocatedSize()); | ||||||
|     sleep(100); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -29,7 +29,6 @@ struct EvalState | ||||||
|     DrvRoots drvRoots; |     DrvRoots drvRoots; | ||||||
|     DrvHashes drvHashes; /* normalised derivation hashes */ |     DrvHashes drvHashes; /* normalised derivation hashes */ | ||||||
|     SrcToStore srcToStore;  |     SrcToStore srcToStore;  | ||||||
|     Expr blackHole; |  | ||||||
| 
 | 
 | ||||||
|     unsigned int nrEvaluated; |     unsigned int nrEvaluated; | ||||||
|     unsigned int nrCached; |     unsigned int nrCached; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue