[cfe-dev] Elimination of dead globals (functions/variables)

Devang Patel dpatel at apple.com
Mon Nov 26 08:41:49 PST 2007


On Nov 26, 2007, at 12:02 AM, Christopher Lamb wrote:

> With llvm-gcc the following test case
>
> static int alive, dead;
> void foo(int v) { glob_alive = v; }
> int FOO() { return glob_alive; }
> static void bar(int v) { gdead = v; }
> static int BAR() { return dead; }
>
> is correctly pruned down to only foo, FOO, and alive, but with the
> following warnings:
>
> warning: 'bar' defined but not used
> warning: 'BAR' defined but not used
>
> clang with -emit-llvm currently emits everything (with no warnings)
> and opt isn't able to reduce it. What needs to be done by clang to
> get the non-visible parts of the module stripped out? In addition to
> diagnostics is clang responsible for not generating code for unused
> functions, or is it simply responsible for passing some sort of
> information so that opt can do the chopping?

clang should mark static functions as internal functions to help  
optimizer identify dead code.

llvm-gcc emits
	define internal void @bar(i32 %v) { ... }
where as clang emits
	define void @bar(i32 %v) { ... }

	
-
Devang






More information about the cfe-dev mailing list