--- mem2reg.c | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/mem2reg.c b/mem2reg.c index 2309d11c1..6fe864df0 100644 --- a/mem2reg.c +++ b/mem2reg.c @@ -240,26 +240,12 @@ static void kill_dominated_stores(pseudo_t pseudo, struct instruction *insn, } END_FOR_EACH_PTR(parent); } -static void promote_symbol(struct entrypoint *ep, struct symbol *sym) + +static unsigned long externaly_visible(struct symbol *sym, unsigned long mod) { - pseudo_t pseudo; + pseudo_t pseudo = sym->pseudo; struct pseudo_user *pu; - unsigned long mod; - int all; - /* Never used as a symbol? */ - pseudo = sym->pseudo; - if (!pseudo) - return; - - mod = sym->ctype.modifiers; - - /* We don't do coverage analysis of volatiles.. */ - if (mod & MOD_VOLATILE) - return; - - /* ..and symbols with external visibility need more care */ - mod = mod & (MOD_NONLOCAL|MOD_STATIC|MOD_ADDRESSABLE); if (mod) goto external_visibility; @@ -288,6 +274,31 @@ static void promote_symbol(struct entrypoint *ep, struct symbol *sym) } END_FOR_EACH_PTR(pu); external_visibility: + return mod; +} + +static void promote_symbol(struct entrypoint *ep, struct symbol *sym) +{ + pseudo_t pseudo; + struct pseudo_user *pu; + unsigned long mod; + int all; + + /* Never used as a symbol? */ + pseudo = sym->pseudo; + if (!pseudo) + return; + + mod = sym->ctype.modifiers; + + /* We don't do coverage analysis of volatiles.. */ + if (mod & MOD_VOLATILE) + return; + + /* ..and symbols with external visibility need more care */ + mod = mod & (MOD_NONLOCAL|MOD_STATIC|MOD_ADDRESSABLE); + mod = externaly_visible(sym, mod); + all = 1; FOR_EACH_PTR_REVERSE(pseudo->users, pu) { struct instruction *insn = pu->insn; -- 2.14.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html