Teach argpromote to ruthlessly hack small byval structs when it can
authorChris Lattner <sabre@nondot.org>
Fri, 11 Jan 2008 22:31:41 +0000 (22:31 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 11 Jan 2008 22:31:41 +0000 (22:31 +0000)
commit10603e0c84d15f61443e8b17bc35f98cc46606d9
treea2d32e3c8ac1eba6c34f94ea6f394b0e1a97fdfc
parent8bc16f0e0e31061fde5baa4c1691f659043e746e
Teach argpromote to ruthlessly hack small byval structs when it can
get away with it, which exposes opportunities to eliminate the memory
objects entirely.  For example, we now compile byval.ll to:

define internal void @f1(i32 %b.0, i64 %b.1) {
entry:
%tmp2 = add i32 %b.0, 1 ; <i32> [#uses=0]
ret void
}

define i32 @main() nounwind  {
entry:
call void @f1( i32 1, i64 2 )
ret i32 0
}

This seems like it would trigger a lot for code that passes around small
structs (e.g. SDOperand's or _Complex)...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45886 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/IPO/ArgumentPromotion.cpp
test/Transforms/ArgumentPromotion/byval.ll [new file with mode: 0644]