[LLVMdev] Code compaction passes?

Chris Lattner sabre at nondot.org
Thu Jan 17 22:00:59 PST 2008


On Jan 17, 2008, at 6:29 PM, Robert Zeh wrote:

> I'm inlining a bunch of C++ code, and I'm ending up with a bunch of
> basic blocks like this:
>
> filter441.i:		; preds = %unwind432.i
> 	call void @_ZSt9terminatev( )
> 	unreachable
>
> filter453.i:		; preds = %unwind444.i
> 	call void @_ZSt9terminatev( )
> 	unreachable
>
>
> It seems like I should be safe to merge these, but I can't find a pass
> to do so.  Going over the open projects page it looks like code
> compaction is still an open project. Is it?

Yep, for really simple stuff like this, it would probably be  
sufficient just to have a pass that unifies all of the 'unreachable'  
blocks.  Given this, existing passes like simplifycfg will probably  
merge trivially common code like this.

> I've read "Compiler Techniques for Code Compaction" and I was
> wondering if there would be any interest in a compaction pass that was
> a bit simpler then some of what's described in the paper.

That would be really great.  Code size is something that is  
increasingly important to some people, but noone (to my knowledge) has  
really tackled it or started measuring/experimenting yet.

One thing that has been on my todo list forever is to disable the tail  
duplication pass and see what performance regressions we get.  Almost  
everything that our current tail dup pass does can be done better in  
other places, and would provide more predictable code size results.

-Chris



More information about the llvm-dev mailing list