Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: test/Transforms/NaCl/expand-varargs.ll

Issue 14060026: PNaCl: Add NoAlias attributes in ExpandByVal and ExpandVarArgs passes (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Put noalias on the varargs function, not call Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; RUN: opt < %s -expand-varargs -S | FileCheck %s 1 ; RUN: opt < %s -expand-varargs -S | FileCheck %s
2 2
3 %va_list = type i8* 3 %va_list = type i8*
4 4
5 declare void @llvm.va_start(i8*) 5 declare void @llvm.va_start(i8*)
6 declare void @llvm.va_end(i8*) 6 declare void @llvm.va_end(i8*)
7 declare void @llvm.va_copy(i8*, i8*) 7 declare void @llvm.va_copy(i8*, i8*)
8 8
9 declare i32 @outside_func(i32 %arg, %va_list* %args) 9 declare i32 @outside_func(i32 %arg, %va_list* %args)
10 10
11 11
12 ; Produced by the expansion of @varargs_call1(): 12 ; Produced by the expansion of @varargs_call1():
13 ; CHECK: %vararg_call = type <{ i64, i32 }> 13 ; CHECK: %vararg_call = type <{ i64, i32 }>
14 14
15 ; Produced by the expansion of @call_with_zero_varargs(). 15 ; Produced by the expansion of @call_with_zero_varargs().
16 ; We have a dummy field to deal with buggy programs: 16 ; We have a dummy field to deal with buggy programs:
17 ; CHECK: %vararg_call.0 = type <{ i32 }> 17 ; CHECK: %vararg_call.0 = type <{ i32 }>
18 18
19 19
20 define i32 @varargs_func(i32 %arg, ...) { 20 define i32 @varargs_func(i32 %arg, ...) {
21 %arglist_alloc = alloca %va_list 21 %arglist_alloc = alloca %va_list
22 %arglist = bitcast %va_list* %arglist_alloc to i8* 22 %arglist = bitcast %va_list* %arglist_alloc to i8*
23 23
24 call void @llvm.va_start(i8* %arglist) 24 call void @llvm.va_start(i8* %arglist)
25 %result = call i32 @outside_func(i32 %arg, %va_list* %arglist_alloc) 25 %result = call i32 @outside_func(i32 %arg, %va_list* %arglist_alloc)
26 call void @llvm.va_end(i8* %arglist) 26 call void @llvm.va_end(i8* %arglist)
27 ret i32 %result 27 ret i32 %result
28 } 28 }
29 ; CHECK: define i32 @varargs_func(i32 %arg, i8* %varargs) { 29 ; CHECK: define i32 @varargs_func(i32 %arg, i8* noalias %varargs) {
30 ; CHECK-NEXT: %arglist_alloc = alloca i8* 30 ; CHECK-NEXT: %arglist_alloc = alloca i8*
31 ; CHECK-NEXT: %arglist = bitcast i8** %arglist_alloc to i8* 31 ; CHECK-NEXT: %arglist = bitcast i8** %arglist_alloc to i8*
32 ; CHECK-NEXT: %arglist1 = bitcast i8* %arglist to i8** 32 ; CHECK-NEXT: %arglist1 = bitcast i8* %arglist to i8**
33 ; CHECK-NEXT: store i8* %varargs, i8** %arglist1 33 ; CHECK-NEXT: store i8* %varargs, i8** %arglist1
34 ; CHECK-NEXT: %result = call i32 @outside_func(i32 %arg, i8** %arglist_alloc) 34 ; CHECK-NEXT: %result = call i32 @outside_func(i32 %arg, i8** %arglist_alloc)
35 ; CHECK-NEXT: ret i32 %result 35 ; CHECK-NEXT: ret i32 %result
36 36
37 37
38 define i32 @varargs_call1() { 38 define i32 @varargs_call1() {
39 %result = call i32 (i32, ...)* @varargs_func(i32 111, i64 222, i32 333) 39 %result = call i32 (i32, ...)* @varargs_func(i32 111, i64 222, i32 333)
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 define void @do_va_copy(i8* %dest, i8* %src) { 125 define void @do_va_copy(i8* %dest, i8* %src) {
126 call void @llvm.va_copy(i8* %dest, i8* %src) 126 call void @llvm.va_copy(i8* %dest, i8* %src)
127 ret void 127 ret void
128 } 128 }
129 ; CHECK: define void @do_va_copy(i8* %dest, i8* %src) { 129 ; CHECK: define void @do_va_copy(i8* %dest, i8* %src) {
130 ; CHECK-NEXT: %vacopy_src = bitcast i8* %src to i8** 130 ; CHECK-NEXT: %vacopy_src = bitcast i8* %src to i8**
131 ; CHECK-NEXT: %vacopy_dest = bitcast i8* %dest to i8** 131 ; CHECK-NEXT: %vacopy_dest = bitcast i8* %dest to i8**
132 ; CHECK-NEXT: %vacopy_currentptr = load i8** %vacopy_src 132 ; CHECK-NEXT: %vacopy_currentptr = load i8** %vacopy_src
133 ; CHECK-NEXT: store i8* %vacopy_currentptr, i8** %vacopy_dest 133 ; CHECK-NEXT: store i8* %vacopy_currentptr, i8** %vacopy_dest
134 ; CHECK-NEXT: ret void 134 ; CHECK-NEXT: ret void
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698