diff options
| author | Xi Wang <xi.wang@gmail.com> | 2013-05-21 04:05:18 -0400 |
|---|---|---|
| committer | Pekka Enberg <penberg@kernel.org> | 2013-05-21 12:21:08 +0300 |
| commit | 4858eafe71ea9cd6e61a8ee2883e2cde28430f20 (patch) | |
| tree | 97b2ba5f89245268b2304fcbc6032876a537f492 | |
| parent | bf6b5e73f4884270eb14dace0ba3598b9dc61b24 (diff) | |
| download | sparse-dev-4858eafe71ea9cd6e61a8ee2883e2cde28430f20.tar.gz | |
sparse, llvm: cache symbol_type() result
Cache symbol_type() result in ->aux to avoid recomputation.
Signed-off-by: Xi Wang <xi.wang@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
| -rw-r--r-- | sparse-llvm.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index 292775ac..c32ff7d7 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -206,10 +206,16 @@ static LLVMTypeRef symbol_type(LLVMModuleRef module, struct symbol *sym) { LLVMTypeRef ret = NULL; + /* don't cache the result for SYM_NODE */ + if (sym->type == SYM_NODE) + return symbol_type(module, sym->ctype.base_type); + + if (sym->aux) + return sym->aux; + switch (sym->type) { case SYM_BITFIELD: case SYM_ENUM: - case SYM_NODE: ret = symbol_type(module, sym->ctype.base_type); break; case SYM_BASETYPE: @@ -233,6 +239,9 @@ static LLVMTypeRef symbol_type(LLVMModuleRef module, struct symbol *sym) default: assert(0); } + + /* cache the result */ + sym->aux = ret; return ret; } |
