Factor a bunch of functionality related to memcpy and memset transforms out of
[oota-llvm.git] / test / Transforms / MemCpyOpt / 2008-03-13-ReturnSlotBitcast.ll
1 ; RUN: llvm-as < %s | opt -memcpyopt | llvm-dis | not grep {call.*memcpy.}
2         %a = type { i32 }
3         %b = type { float }
4
5 declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) nounwind 
6 declare void @g(%a*)
7
8 define float @f() {
9 entry:
10         %a_var = alloca %a
11         %b_var = alloca %b
12         call void @g(%a *%a_var)
13         %a_i8 = bitcast %a* %a_var to i8*
14         %b_i8 = bitcast %b* %b_var to i8*
15         call void @llvm.memcpy.i32(i8* %b_i8, i8* %a_i8, i32 4, i32 4)
16         %tmp1 = getelementptr %b* %b_var, i32 0, i32 0
17         %tmp2 = load float* %tmp1
18         ret float %tmp2
19 }