diff --git a/gcc/input.cc b/gcc/input.cc index 64cb85eeed0e2ac84b44ed673a24d8ff8659bc21..3416c7cdd732f612c1a3fd0c4b6a9b0a57dfa8c2 100644 --- a/gcc/input.cc +++ b/gcc/input.cc @@ -189,7 +189,7 @@ public: }; -size_t file_cache_slot::line_record_size = 100; +size_t file_cache_slot::line_record_size = 0; /* Tune file_cache. */ void @@ -856,8 +856,13 @@ file_cache_slot::get_next_line (char **line, ssize_t *line_len) size_t delta = rlen >= 1 ? m_line_num - m_line_record[rlen - 1].line_num : 1; + size_t max_size = line_record_size; + /* One anchor per hundred input lines. */ + if (max_size == 0) + max_size = m_line_num / 100; + /* If we're too far beyond drop half of the lines to rebalance. */ - if (rlen == line_record_size && delta >= spacing*2) + if (rlen == max_size && delta >= spacing*2) { size_t j = 0; for (size_t i = 1; i < rlen; i += 2) @@ -867,7 +872,7 @@ file_cache_slot::get_next_line (char **line, ssize_t *line_len) spacing *= 2; } - if (rlen < line_record_size && delta >= spacing) + if (rlen < max_size && delta >= spacing) m_line_record.safe_push (file_cache_slot::line_info (m_line_num, m_line_start_idx, diff --git a/gcc/params.opt b/gcc/params.opt index 5d234a607c02a3e27fd916366e529551bd257176..d84e35679e6db1fe36293e9f26cccf4ffd3fc91b 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -136,10 +136,10 @@ Maximal estimated growth of function body caused by early inlining of single cal -param=file-cache-files= Common Joined UInteger Var(param_file_cache_files) Init(16) Param -Max number of files in the file cache. +Max number of files in the file cache. When 0 this is automatically sized. -param=file-cache-lines= -Common Joined UInteger Var(param_file_cache_lines) Init(100) Param +Common Joined UInteger Var(param_file_cache_lines) Init(0) Param Max number of lines to index into file cache. -param=fsm-scale-path-stmts=