llvm.org GIT mirror llvm / beb1689
add a test to ensure that argpromote of one argument doesn't break the byval attr on some other argument. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46025 91177308-0d34-0410-b5e6-96231b3b80d8 Chris Lattner 11 years ago
1 changed file(s) with 26 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
0 ; RUN: llvm-as < %s | opt -argpromotion | llvm-dis | grep -F {i32* byval} | count 2
1 ; Argpromote + scalarrepl should change this to passing the two integers by value.
2
3 %struct.ss = type { i32, i64 }
4
5 define internal void @f(%struct.ss* byval %b, i32* byval %X) nounwind {
6 entry:
7 %tmp = getelementptr %struct.ss* %b, i32 0, i32 0
8 %tmp1 = load i32* %tmp, align 4
9 %tmp2 = add i32 %tmp1, 1
10 store i32 %tmp2, i32* %tmp, align 4
11
12 store i32 0, i32* %X
13 ret void
14 }
15
16 define i32 @test(i32* %X) {
17 entry:
18 %S = alloca %struct.ss ; <%struct.ss*> [#uses=4]
19 %tmp1 = getelementptr %struct.ss* %S, i32 0, i32 0 ; [#uses=1]
20 store i32 1, i32* %tmp1, align 8
21 %tmp4 = getelementptr %struct.ss* %S, i32 0, i32 1 ; [#uses=1]
22 store i64 2, i64* %tmp4, align 4
23 call void @f( %struct.ss* byval %S, i32* byval %X)
24 ret i32 0
25 }