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

Side by Side Diff: test/Transforms/MinSFI/expand-allocas.ll

Issue 1151093004: Changes from 3.7 merge to files not in upstream (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 7 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 -minsfi-expand-allocas -S | FileCheck %s 1 ; RUN: opt %s -minsfi-expand-allocas -S | FileCheck %s
2 2
3 !llvm.module.flags = !{!0} 3 !llvm.module.flags = !{!0}
4 !0 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} 4 !0 = !{i32 1, !"Debug Info Version", i32 3}
5 5
6 target datalayout = "p:32:32:32" 6 target datalayout = "p:32:32:32"
7 target triple = "le32-unknown-nacl" 7 target triple = "le32-unknown-nacl"
8 8
9 ; Check that the stack pointer global variable is created. This does not check 9 ; Check that the stack pointer global variable is created. This does not check
10 ; the initial value of the stack ptr. 10 ; the initial value of the stack ptr.
11 ; CHECK: @__sfi_stack_ptr = internal global i32 11 ; CHECK: @__sfi_stack_ptr = internal global i32
12 12
13 declare i8* @llvm.stacksave() 13 declare i8* @llvm.stacksave()
14 declare void @llvm.stackrestore(i8* %ptr) 14 declare void @llvm.stackrestore(i8* %ptr)
(...skipping 17 matching lines...) Expand all
32 ; CHECK: IfNotOne: 32 ; CHECK: IfNotOne:
33 ; CHECK-NEXT: ret i32 3 33 ; CHECK-NEXT: ret i32 3
34 ; CHECK-NEXT: } 34 ; CHECK-NEXT: }
35 35
36 define i8* @test_const_alloca() { 36 define i8* @test_const_alloca() {
37 %ptr = alloca i8, i32 9, !dbg !1 37 %ptr = alloca i8, i32 9, !dbg !1
38 ret i8* %ptr 38 ret i8* %ptr
39 } 39 }
40 40
41 ; CHECK-LABEL: define i8* @test_const_alloca() { 41 ; CHECK-LABEL: define i8* @test_const_alloca() {
42 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 42 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
43 ; CHECK-NEXT: %1 = sub i32 %frame_top, 9 43 ; CHECK-NEXT: %1 = sub i32 %frame_top, 9
44 ; CHECK-NEXT: %ptr = inttoptr i32 %1 to i8*, !dbg !1 44 ; CHECK-NEXT: %ptr = inttoptr i32 %1 to i8*, !dbg !1
45 ; CHECK-NEXT: ret i8* %ptr 45 ; CHECK-NEXT: ret i8* %ptr
46 ; CHECK-NEXT: } 46 ; CHECK-NEXT: }
47 47
48 define i8* @test_const_alloca_align() { 48 define i8* @test_const_alloca_align() {
49 %ptr = alloca i8, i32 9, align 536870912 ; biggest possible alignment 49 %ptr = alloca i8, i32 9, align 536870912 ; biggest possible alignment
50 ret i8* %ptr 50 ret i8* %ptr
51 } 51 }
52 52
53 ; CHECK-LABEL: define i8* @test_const_alloca_align() { 53 ; CHECK-LABEL: define i8* @test_const_alloca_align() {
54 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 54 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
55 ; CHECK-NEXT: %1 = sub i32 %frame_top, 9 55 ; CHECK-NEXT: %1 = sub i32 %frame_top, 9
56 ; CHECK-NEXT: %2 = and i32 %1, -536870912 56 ; CHECK-NEXT: %2 = and i32 %1, -536870912
57 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8* 57 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8*
58 ; CHECK-NEXT: ret i8* %ptr 58 ; CHECK-NEXT: ret i8* %ptr
59 ; CHECK-NEXT: } 59 ; CHECK-NEXT: }
60 60
61 define i8* @test_variable_length_alloca(i32 %size) { 61 define i8* @test_variable_length_alloca(i32 %size) {
62 %ptr = alloca i8, i32 %size, !dbg !1 62 %ptr = alloca i8, i32 %size, !dbg !1
63 ret i8* %ptr 63 ret i8* %ptr
64 } 64 }
65 65
66 ; CHECK-LABEL: define i8* @test_variable_length_alloca(i32 %size) { 66 ; CHECK-LABEL: define i8* @test_variable_length_alloca(i32 %size) {
67 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 67 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
68 ; CHECK-NEXT: %1 = sub i32 %frame_top, %size 68 ; CHECK-NEXT: %1 = sub i32 %frame_top, %size
69 ; CHECK-NEXT: %ptr = inttoptr i32 %1 to i8*, !dbg !1 69 ; CHECK-NEXT: %ptr = inttoptr i32 %1 to i8*, !dbg !1
70 ; CHECK-NEXT: ret i8* %ptr 70 ; CHECK-NEXT: ret i8* %ptr
71 ; CHECK-NEXT: } 71 ; CHECK-NEXT: }
72 72
73 define i8* @test_variable_length_alloca_align(i32 %size) { 73 define i8* @test_variable_length_alloca_align(i32 %size) {
74 %ptr = alloca i8, i32 %size, align 32 74 %ptr = alloca i8, i32 %size, align 32
75 ret i8* %ptr 75 ret i8* %ptr
76 } 76 }
77 77
78 ; CHECK-LABEL: define i8* @test_variable_length_alloca_align(i32 %size) { 78 ; CHECK-LABEL: define i8* @test_variable_length_alloca_align(i32 %size) {
79 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 79 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
80 ; CHECK-NEXT: %1 = sub i32 %frame_top, %size 80 ; CHECK-NEXT: %1 = sub i32 %frame_top, %size
81 ; CHECK-NEXT: %2 = and i32 %1, -32 81 ; CHECK-NEXT: %2 = and i32 %1, -32
82 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8* 82 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8*
83 ; CHECK-NEXT: ret i8* %ptr 83 ; CHECK-NEXT: ret i8* %ptr
84 ; CHECK-NEXT: } 84 ; CHECK-NEXT: }
85 85
86 define i8* @test_const_after_const_alloca() { 86 define i8* @test_const_after_const_alloca() {
87 %ptr1 = alloca i8, i32 4 87 %ptr1 = alloca i8, i32 4
88 %ptr2 = alloca i8, i32 8 88 %ptr2 = alloca i8, i32 8
89 ret i8* %ptr2 89 ret i8* %ptr2
90 } 90 }
91 91
92 ; CHECK-LABEL: define i8* @test_const_after_const_alloca() { 92 ; CHECK-LABEL: define i8* @test_const_after_const_alloca() {
93 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 93 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
94 ; CHECK-NEXT: %1 = sub i32 %frame_top, 4 94 ; CHECK-NEXT: %1 = sub i32 %frame_top, 4
95 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8* 95 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*
96 ; CHECK-NEXT: %2 = sub i32 %1, 8 96 ; CHECK-NEXT: %2 = sub i32 %1, 8
97 ; CHECK-NEXT: %ptr2 = inttoptr i32 %2 to i8* 97 ; CHECK-NEXT: %ptr2 = inttoptr i32 %2 to i8*
98 ; CHECK-NEXT: ret i8* %ptr2 98 ; CHECK-NEXT: ret i8* %ptr2
99 ; CHECK-NEXT: } 99 ; CHECK-NEXT: }
100 100
101 define i8* @test_const_after_variable_alloca(i32 %size) { 101 define i8* @test_const_after_variable_alloca(i32 %size) {
102 %ptr1 = alloca i8, i32 %size 102 %ptr1 = alloca i8, i32 %size
103 %ptr2 = alloca i8, i32 19 103 %ptr2 = alloca i8, i32 19
104 ret i8* %ptr2 104 ret i8* %ptr2
105 } 105 }
106 106
107 ; CHECK-LABEL: define i8* @test_const_after_variable_alloca(i32 %size) { 107 ; CHECK-LABEL: define i8* @test_const_after_variable_alloca(i32 %size) {
108 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 108 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
109 ; CHECK-NEXT: %1 = sub i32 %frame_top, %size 109 ; CHECK-NEXT: %1 = sub i32 %frame_top, %size
110 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8* 110 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*
111 ; CHECK-NEXT: %2 = sub i32 %1, 19 111 ; CHECK-NEXT: %2 = sub i32 %1, 19
112 ; CHECK-NEXT: %ptr2 = inttoptr i32 %2 to i8* 112 ; CHECK-NEXT: %ptr2 = inttoptr i32 %2 to i8*
113 ; CHECK-NEXT: ret i8* %ptr2 113 ; CHECK-NEXT: ret i8* %ptr2
114 ; CHECK-NEXT: } 114 ; CHECK-NEXT: }
115 115
116 define i8* @test_stacksave() { 116 define i8* @test_stacksave() {
117 %ptr = call i8* @llvm.stacksave(), !dbg !1 117 %ptr = call i8* @llvm.stacksave(), !dbg !1
118 ret i8* %ptr 118 ret i8* %ptr
119 } 119 }
120 120
121 ; CHECK-LABEL: define i8* @test_stacksave() { 121 ; CHECK-LABEL: define i8* @test_stacksave() {
122 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 122 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
123 ; CHECK-NEXT: %ptr = inttoptr i32 %frame_top to i8*, !dbg !1 123 ; CHECK-NEXT: %ptr = inttoptr i32 %frame_top to i8*, !dbg !1
124 ; CHECK-NEXT: ret i8* %ptr 124 ; CHECK-NEXT: ret i8* %ptr
125 ; CHECK-NEXT: } 125 ; CHECK-NEXT: }
126 126
127 define i8* @test_stacksave_after_alloca() { 127 define i8* @test_stacksave_after_alloca() {
128 %ptr1 = alloca i8, i32 11 128 %ptr1 = alloca i8, i32 11
129 %ptr2 = call i8* @llvm.stacksave(), !dbg !1 129 %ptr2 = call i8* @llvm.stacksave(), !dbg !1
130 ret i8* %ptr2 130 ret i8* %ptr2
131 } 131 }
132 132
133 ; CHECK-LABEL: define i8* @test_stacksave_after_alloca() { 133 ; CHECK-LABEL: define i8* @test_stacksave_after_alloca() {
134 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 134 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
135 ; CHECK-NEXT: %1 = sub i32 %frame_top, 11 135 ; CHECK-NEXT: %1 = sub i32 %frame_top, 11
136 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8* 136 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*
137 ; CHECK-NEXT: %ptr2 = inttoptr i32 %1 to i8*, !dbg !1 137 ; CHECK-NEXT: %ptr2 = inttoptr i32 %1 to i8*, !dbg !1
138 ; CHECK-NEXT: ret i8* %ptr2 138 ; CHECK-NEXT: ret i8* %ptr2
139 ; CHECK-NEXT: } 139 ; CHECK-NEXT: }
140 140
141 define i8* @test_stackrestore(i8* %new_stack) { 141 define i8* @test_stackrestore(i8* %new_stack) {
142 call void @llvm.stackrestore(i8* %new_stack), !dbg !1 142 call void @llvm.stackrestore(i8* %new_stack), !dbg !1
143 %ptr = alloca i8, i32 5, !dbg !2 143 %ptr = alloca i8, i32 5, !dbg !3
144 ret i8* %ptr 144 ret i8* %ptr
145 } 145 }
146 146
147 ; CHECK-LABEL: define i8* @test_stackrestore(i8* %new_stack) { 147 ; CHECK-LABEL: define i8* @test_stackrestore(i8* %new_stack) {
148 ; CHECK-NEXT: frame_top = load i32* @__sfi_stack_ptr 148 ; CHECK-NEXT: frame_top = load i32, i32* @__sfi_stack_ptr
149 ; CHECK-NEXT: %1 = ptrtoint i8* %new_stack to i32, !dbg !1 149 ; CHECK-NEXT: %1 = ptrtoint i8* %new_stack to i32, !dbg !1
150 ; CHECK-NEXT: %2 = sub i32 %1, 5 150 ; CHECK-NEXT: %2 = sub i32 %1, 5
151 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8*, !dbg !2 151 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8*, !dbg !3
152 ; CHECK-NEXT: ret i8* %ptr 152 ; CHECK-NEXT: ret i8* %ptr
153 ; CHECK-NEXT: } 153 ; CHECK-NEXT: }
154 154
155 define i8* @test_stackrestore_after_push(i8* %new_stack) { 155 define i8* @test_stackrestore_after_push(i8* %new_stack) {
156 %ptr1 = alloca i8, i32 5, !dbg !1 156 %ptr1 = alloca i8, i32 5, !dbg !1
157 call void @llvm.stackrestore(i8* %new_stack), !dbg !2 157 call void @llvm.stackrestore(i8* %new_stack), !dbg !3
158 %ptr2 = alloca i8, i32 6, !dbg !3 158 %ptr2 = alloca i8, i32 6, !dbg !4
159 ret i8* %ptr2 159 ret i8* %ptr2
160 } 160 }
161 161
162 ; CHECK-LABEL: define i8* @test_stackrestore_after_push(i8* %new_stack) { 162 ; CHECK-LABEL: define i8* @test_stackrestore_after_push(i8* %new_stack) {
163 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 163 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
164 ; CHECK-NEXT: %1 = sub i32 %frame_top, 5 164 ; CHECK-NEXT: %1 = sub i32 %frame_top, 5
165 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*, !dbg !1 165 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*, !dbg !1
166 ; CHECK-NEXT: %2 = ptrtoint i8* %new_stack to i32, !dbg !2 166 ; CHECK-NEXT: %2 = ptrtoint i8* %new_stack to i32, !dbg !3
167 ; CHECK-NEXT: %3 = sub i32 %2, 6 167 ; CHECK-NEXT: %3 = sub i32 %2, 6
168 ; CHECK-NEXT: %ptr2 = inttoptr i32 %3 to i8*, !dbg !3 168 ; CHECK-NEXT: %ptr2 = inttoptr i32 %3 to i8*, !dbg !4
169 ; CHECK-NEXT: ret i8* %ptr2 169 ; CHECK-NEXT: ret i8* %ptr2
170 ; CHECK-NEXT: } 170 ; CHECK-NEXT: }
171 171
172 define i8* @test_stackptr_bb_propagation(i1 %cond) { 172 define i8* @test_stackptr_bb_propagation(i1 %cond) {
173 %ptr1 = alloca i8, i32 8 173 %ptr1 = alloca i8, i32 8
174 br i1 %cond, label %IfOne, label %IfNotOne 174 br i1 %cond, label %IfOne, label %IfNotOne
175 IfOne: 175 IfOne:
176 ret i8* %ptr1 176 ret i8* %ptr1
177 IfNotOne: 177 IfNotOne:
178 %ptr2 = alloca i8, i32 4 178 %ptr2 = alloca i8, i32 4
179 ret i8* %ptr2 179 ret i8* %ptr2
180 } 180 }
181 181
182 ; CHECK-LABEL: define i8* @test_stackptr_bb_propagation(i1 %cond) { 182 ; CHECK-LABEL: define i8* @test_stackptr_bb_propagation(i1 %cond) {
183 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 183 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
184 ; CHECK-NEXT: %1 = sub i32 %frame_top, 8 184 ; CHECK-NEXT: %1 = sub i32 %frame_top, 8
185 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8* 185 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*
186 ; CHECK-NEXT: br i1 %cond, label %IfOne, label %IfNotOne 186 ; CHECK-NEXT: br i1 %cond, label %IfOne, label %IfNotOne
187 ; CHECK: IfOne: 187 ; CHECK: IfOne:
188 ; CHECK-NEXT: %2 = phi i32 [ %1, %0 ] 188 ; CHECK-NEXT: %2 = phi i32 [ %1, %0 ]
189 ; CHECK-NEXT: ret i8* %ptr1 189 ; CHECK-NEXT: ret i8* %ptr1
190 ; CHECK: IfNotOne: 190 ; CHECK: IfNotOne:
191 ; CHECK-NEXT: %3 = phi i32 [ %1, %0 ] 191 ; CHECK-NEXT: %3 = phi i32 [ %1, %0 ]
192 ; CHECK-NEXT: %4 = sub i32 %3, 4 192 ; CHECK-NEXT: %4 = sub i32 %3, 4
193 ; CHECK-NEXT: %ptr2 = inttoptr i32 %4 to i8* 193 ; CHECK-NEXT: %ptr2 = inttoptr i32 %4 to i8*
194 ; CHECK-NEXT: ret i8* %ptr2 194 ; CHECK-NEXT: ret i8* %ptr2
195 ; CHECK-NEXT: } 195 ; CHECK-NEXT: }
196 196
197 define i8* @test_scoped_alloca(i1 %cmp) { 197 define i8* @test_scoped_alloca(i1 %cmp) {
198 br label %loop 198 br label %loop
199 loop: 199 loop:
200 %stacksave = call i8* @llvm.stacksave() 200 %stacksave = call i8* @llvm.stacksave()
201 %ptr = alloca i8, i32 17 201 %ptr = alloca i8, i32 17
202 call void @llvm.stackrestore(i8* %stacksave) 202 call void @llvm.stackrestore(i8* %stacksave)
203 br i1 %cmp, label %done, label %loop 203 br i1 %cmp, label %done, label %loop
204 done: 204 done:
205 ret i8* %ptr 205 ret i8* %ptr
206 } 206 }
207 207
208 ; CHECK-LABEL: define i8* @test_scoped_alloca(i1 %cmp) { 208 ; CHECK-LABEL: define i8* @test_scoped_alloca(i1 %cmp) {
209 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 209 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
210 ; CHECK-NEXT: br label %loop 210 ; CHECK-NEXT: br label %loop
211 ; CHECK: loop: 211 ; CHECK: loop:
212 ; CHECK-NEXT: %1 = phi i32 [ %frame_top, %0 ], [ %3, %loop ] 212 ; CHECK-NEXT: %1 = phi i32 [ %frame_top, %0 ], [ %3, %loop ]
213 ; CHECK-NEXT: %stacksave = inttoptr i32 %1 to i8* 213 ; CHECK-NEXT: %stacksave = inttoptr i32 %1 to i8*
214 ; CHECK-NEXT: %2 = sub i32 %1, 17 214 ; CHECK-NEXT: %2 = sub i32 %1, 17
215 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8* 215 ; CHECK-NEXT: %ptr = inttoptr i32 %2 to i8*
216 ; CHECK-NEXT: %3 = ptrtoint i8* %stacksave to i32 216 ; CHECK-NEXT: %3 = ptrtoint i8* %stacksave to i32
217 ; CHECK-NEXT: br i1 %cmp, label %done, label %loop 217 ; CHECK-NEXT: br i1 %cmp, label %done, label %loop
218 ; CHECK: done: 218 ; CHECK: done:
219 ; CHECK-NEXT: %4 = phi i32 [ %3, %loop ] 219 ; CHECK-NEXT: %4 = phi i32 [ %3, %loop ]
220 ; CHECK-NEXT: ret i8* %ptr 220 ; CHECK-NEXT: ret i8* %ptr
221 ; CHECK-NEXT: } 221 ; CHECK-NEXT: }
222 222
223 define i8* @test_global_ptr_updates(i32 %size) { 223 define i8* @test_global_ptr_updates(i32 %size) {
224 %ptr0 = call i8* @llvm.stacksave() 224 %ptr0 = call i8* @llvm.stacksave()
225 %ptr1 = alloca i8, i32 32 225 %ptr1 = alloca i8, i32 32
226 %ptr2 = alloca i8, i32 %size 226 %ptr2 = alloca i8, i32 %size
227 call void @llvm.stackrestore(i8* %ptr0) 227 call void @llvm.stackrestore(i8* %ptr0)
228 call void @foo() 228 call void @foo()
229 ret i8* %ptr2 229 ret i8* %ptr2
230 } 230 }
231 231
232 ; CHECK-LABEL: define i8* @test_global_ptr_updates(i32 %size) { 232 ; CHECK-LABEL: define i8* @test_global_ptr_updates(i32 %size) {
233 ; CHECK-NEXT: %frame_top = load i32* @__sfi_stack_ptr 233 ; CHECK-NEXT: %frame_top = load i32, i32* @__sfi_stack_ptr
234 ; CHECK-NEXT: %ptr0 = inttoptr i32 %frame_top to i8* 234 ; CHECK-NEXT: %ptr0 = inttoptr i32 %frame_top to i8*
235 ; CHECK-NEXT: %1 = sub i32 %frame_top, 32 235 ; CHECK-NEXT: %1 = sub i32 %frame_top, 32
236 ; CHECK-NEXT: store i32 %1, i32* @__sfi_stack_ptr 236 ; CHECK-NEXT: store i32 %1, i32* @__sfi_stack_ptr
237 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8* 237 ; CHECK-NEXT: %ptr1 = inttoptr i32 %1 to i8*
238 ; CHECK-NEXT: %2 = sub i32 %1, %size 238 ; CHECK-NEXT: %2 = sub i32 %1, %size
239 ; CHECK-NEXT: store i32 %2, i32* @__sfi_stack_ptr 239 ; CHECK-NEXT: store i32 %2, i32* @__sfi_stack_ptr
240 ; CHECK-NEXT: %ptr2 = inttoptr i32 %2 to i8* 240 ; CHECK-NEXT: %ptr2 = inttoptr i32 %2 to i8*
241 ; CHECK-NEXT: %3 = ptrtoint i8* %ptr0 to i32 241 ; CHECK-NEXT: %3 = ptrtoint i8* %ptr0 to i32
242 ; CHECK-NEXT: store i32 %3, i32* @__sfi_stack_ptr 242 ; CHECK-NEXT: store i32 %3, i32* @__sfi_stack_ptr
243 ; CHECK-NEXT: call void @foo() 243 ; CHECK-NEXT: call void @foo()
244 ; CHECK-NEXT: store i32 %frame_top, i32* @__sfi_stack_ptr 244 ; CHECK-NEXT: store i32 %frame_top, i32* @__sfi_stack_ptr
245 ; CHECK-NEXT: ret i8* %ptr2 245 ; CHECK-NEXT: ret i8* %ptr2
246 ; CHECK-NEXT: } 246 ; CHECK-NEXT: }
247 247
248 define i32 @_start_minsfi(i32 %args) { 248 define i32 @_start_minsfi(i32 %args) {
249 ret i32 0 249 ret i32 0
250 } 250 }
251 251
252 ; CHECK-LABEL: define i32 @_start_minsfi(i32 %args) { 252 ; CHECK-LABEL: define i32 @_start_minsfi(i32 %args) {
253 ; CHECK-NEXT: store i32 %args, i32* @__sfi_stack_ptr 253 ; CHECK-NEXT: store i32 %args, i32* @__sfi_stack_ptr
254 ; CHECK-NEXT: ret i32 0 254 ; CHECK-NEXT: ret i32 0
255 ; CHECK-NEXT: } 255 ; CHECK-NEXT: }
256 256
257 !1 = metadata !{i32 138, i32 0, metadata !1, null} 257 !1 = !MDLocation(line: 1, column: 13, scope: !2)
258 !2 = metadata !{i32 142, i32 0, metadata !2, null} 258 !2 = !MDSubprogram(name: "foo")
259 !3 = metadata !{i32 144, i32 0, metadata !3, null} 259 !3 = !MDLocation(line: 2, column: 10, scope: !2)
260 !4 = !MDLocation(line: 2, column: 3, scope: !2)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698