aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorXi Wang <xi.wang@gmail.com>2013-05-21 04:05:18 -0400
committerPekka Enberg <penberg@kernel.org>2013-05-21 12:21:08 +0300
commit4858eafe71ea9cd6e61a8ee2883e2cde28430f20 (patch)
tree97b2ba5f89245268b2304fcbc6032876a537f492
parentbf6b5e73f4884270eb14dace0ba3598b9dc61b24 (diff)
downloadsparse-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.c11
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;
}