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

Side by Side Diff: test/Transforms/NaCl/replace-ptrs-with-ints.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 -replace-ptrs-with-ints -S | FileCheck %s 1 ; RUN: opt %s -replace-ptrs-with-ints -S | FileCheck %s
2 2
3 target datalayout = "p:32:32:32" 3 target datalayout = "p:32:32:32"
4 4
5 5
6 %struct = type { i32, i32 } 6 %struct = type { i32, i32 }
7 7
8 declare %struct* @addr_taken_func(%struct*) 8 declare %struct* @addr_taken_func(%struct*)
9 9
10 @addr_of_func = global %struct* (%struct*)* @addr_taken_func 10 @addr_of_func = global %struct* (%struct*)* @addr_taken_func
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 ; CHECK: define void @circular_reference_inttoptr(i32 %dest) { 73 ; CHECK: define void @circular_reference_inttoptr(i32 %dest) {
74 ; CHECK: store i32 undef, i32* %dest.asptr 74 ; CHECK: store i32 undef, i32* %dest.asptr
75 75
76 define i8* @forwards_reference(%struct** %ptr) { 76 define i8* @forwards_reference(%struct** %ptr) {
77 br label %block1 77 br label %block1
78 block2: 78 block2:
79 ; Forwards reference to %val. 79 ; Forwards reference to %val.
80 %cast = bitcast %struct* %val to i8* 80 %cast = bitcast %struct* %val to i8*
81 br label %block3 81 br label %block3
82 block1: 82 block1:
83 %val = load %struct** %ptr 83 %val = load %struct*, %struct** %ptr
84 br label %block2 84 br label %block2
85 block3: 85 block3:
86 ; Backwards reference to a forwards reference that has already been 86 ; Backwards reference to a forwards reference that has already been
87 ; resolved. 87 ; resolved.
88 ret i8* %cast 88 ret i8* %cast
89 } 89 }
90 ; CHECK: define i32 @forwards_reference(i32 %ptr) { 90 ; CHECK: define i32 @forwards_reference(i32 %ptr) {
91 ; CHECK-NEXT: br label %block1 91 ; CHECK-NEXT: br label %block1
92 ; CHECK: block2: 92 ; CHECK: block2:
93 ; CHECK-NEXT: br label %block3 93 ; CHECK-NEXT: br label %block3
94 ; CHECK: block1: 94 ; CHECK: block1:
95 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i32* 95 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i32*
96 ; CHECK-NEXT: %val = load i32* %ptr.asptr 96 ; CHECK-NEXT: %val = load i32, i32* %ptr.asptr
97 ; CHECK-NEXT: br label %block2 97 ; CHECK-NEXT: br label %block2
98 ; CHECK: block3: 98 ; CHECK: block3:
99 ; CHECK-NEXT: ret i32 %val 99 ; CHECK-NEXT: ret i32 %val
100 100
101 101
102 define i8* @phi_multiple_entry(i1 %arg, i8* %ptr) { 102 define i8* @phi_multiple_entry(i1 %arg, i8* %ptr) {
103 entry: 103 entry:
104 br i1 %arg, label %done, label %done 104 br i1 %arg, label %done, label %done
105 done: 105 done:
106 %result = phi i8* [ %ptr, %entry ], [ %ptr, %entry ] 106 %result = phi i8* [ %ptr, %entry ], [ %ptr, %entry ]
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 ; CHECK-NEXT: ret i32 0 188 ; CHECK-NEXT: ret i32 0
189 189
190 define i32 @constant_pointer_undef() { 190 define i32 @constant_pointer_undef() {
191 %val = ptrtoint i32* undef to i32 191 %val = ptrtoint i32* undef to i32
192 ret i32 %val 192 ret i32 %val
193 } 193 }
194 ; CHECK: define i32 @constant_pointer_undef() { 194 ; CHECK: define i32 @constant_pointer_undef() {
195 ; CHECK-NEXT: ret i32 undef 195 ; CHECK-NEXT: ret i32 undef
196 196
197 define i16* @constant_pointer_null_load() { 197 define i16* @constant_pointer_null_load() {
198 %val = load i16** null 198 %val = load i16*, i16** null
199 ret i16* %val 199 ret i16* %val
200 } 200 }
201 ; CHECK: define i32 @constant_pointer_null_load() { 201 ; CHECK: define i32 @constant_pointer_null_load() {
202 ; CHECK-NEXT: %.asptr = inttoptr i32 0 to i32* 202 ; CHECK-NEXT: %.asptr = inttoptr i32 0 to i32*
203 ; CHECK-NEXT: %val = load i32* %.asptr 203 ; CHECK-NEXT: %val = load i32, i32* %.asptr
204 204
205 define i16* @constant_pointer_undef_load() { 205 define i16* @constant_pointer_undef_load() {
206 %val = load i16** undef 206 %val = load i16*, i16** undef
207 ret i16* %val 207 ret i16* %val
208 } 208 }
209 ; CHECK: define i32 @constant_pointer_undef_load() { 209 ; CHECK: define i32 @constant_pointer_undef_load() {
210 ; CHECK-NEXT: %.asptr = inttoptr i32 undef to i32* 210 ; CHECK-NEXT: %.asptr = inttoptr i32 undef to i32*
211 ; CHECK-NEXT: %val = load i32* %.asptr 211 ; CHECK-NEXT: %val = load i32, i32* %.asptr
212 212
213 213
214 define i8 @load(i8* %ptr) { 214 define i8 @load(i8* %ptr) {
215 %x = load i8* %ptr 215 %x = load i8, i8* %ptr
216 ret i8 %x 216 ret i8 %x
217 } 217 }
218 ; CHECK: define i8 @load(i32 %ptr) { 218 ; CHECK: define i8 @load(i32 %ptr) {
219 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8* 219 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8*
220 ; CHECK-NEXT: %x = load i8* %ptr.asptr 220 ; CHECK-NEXT: %x = load i8, i8* %ptr.asptr
221 221
222 define void @store(i8* %ptr, i8 %val) { 222 define void @store(i8* %ptr, i8 %val) {
223 store i8 %val, i8* %ptr 223 store i8 %val, i8* %ptr
224 ret void 224 ret void
225 } 225 }
226 ; CHECK: define void @store(i32 %ptr, i8 %val) { 226 ; CHECK: define void @store(i32 %ptr, i8 %val) {
227 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8* 227 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8*
228 ; CHECK-NEXT: store i8 %val, i8* %ptr.asptr 228 ; CHECK-NEXT: store i8 %val, i8* %ptr.asptr
229 229
230 230
231 define i8* @load_ptr(i8** %ptr) { 231 define i8* @load_ptr(i8** %ptr) {
232 %x = load i8** %ptr 232 %x = load i8*, i8** %ptr
233 ret i8* %x 233 ret i8* %x
234 } 234 }
235 ; CHECK: define i32 @load_ptr(i32 %ptr) { 235 ; CHECK: define i32 @load_ptr(i32 %ptr) {
236 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i32* 236 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i32*
237 ; CHECK-NEXT: %x = load i32* %ptr.asptr 237 ; CHECK-NEXT: %x = load i32, i32* %ptr.asptr
238 238
239 define void @store_ptr(i8** %ptr, i8* %val) { 239 define void @store_ptr(i8** %ptr, i8* %val) {
240 store i8* %val, i8** %ptr 240 store i8* %val, i8** %ptr
241 ret void 241 ret void
242 } 242 }
243 ; CHECK: define void @store_ptr(i32 %ptr, i32 %val) { 243 ; CHECK: define void @store_ptr(i32 %ptr, i32 %val) {
244 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i32* 244 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i32*
245 ; CHECK-NEXT: store i32 %val, i32* %ptr.asptr 245 ; CHECK-NEXT: store i32 %val, i32* %ptr.asptr
246 246
247 247
248 define i8 @load_attrs(i8* %ptr) { 248 define i8 @load_attrs(i8* %ptr) {
249 %x = load atomic volatile i8* %ptr seq_cst, align 128 249 %x = load atomic volatile i8, i8* %ptr seq_cst, align 128
250 ret i8 %x 250 ret i8 %x
251 } 251 }
252 ; CHECK: define i8 @load_attrs(i32 %ptr) { 252 ; CHECK: define i8 @load_attrs(i32 %ptr) {
253 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8* 253 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8*
254 ; CHECK-NEXT: %x = load atomic volatile i8* %ptr.asptr seq_cst, align 128 254 ; CHECK-NEXT: %x = load atomic volatile i8, i8* %ptr.asptr seq_cst, align 128
255 255
256 define void @store_attrs(i8* %ptr, i8 %val) { 256 define void @store_attrs(i8* %ptr, i8 %val) {
257 store atomic volatile i8 %val, i8* %ptr singlethread release, align 256 257 store atomic volatile i8 %val, i8* %ptr singlethread release, align 256
258 ret void 258 ret void
259 } 259 }
260 ; CHECK: define void @store_attrs(i32 %ptr, i8 %val) { 260 ; CHECK: define void @store_attrs(i32 %ptr, i8 %val) {
261 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8* 261 ; CHECK-NEXT: %ptr.asptr = inttoptr i32 %ptr to i8*
262 ; CHECK-NEXT: store atomic volatile i8 %val, i8* %ptr.asptr singlethread release , align 256 262 ; CHECK-NEXT: store atomic volatile i8 %val, i8* %ptr.asptr singlethread release , align 256
263 263
264 264
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 320
321 define %struct* (%struct*)* @get_addr_of_func() { 321 define %struct* (%struct*)* @get_addr_of_func() {
322 ret %struct* (%struct*)* @addr_taken_func 322 ret %struct* (%struct*)* @addr_taken_func
323 } 323 }
324 ; CHECK: define i32 @get_addr_of_func() { 324 ; CHECK: define i32 @get_addr_of_func() {
325 ; CHECK-NEXT: %expanded = ptrtoint i32 (i32)* @addr_taken_func to i32 325 ; CHECK-NEXT: %expanded = ptrtoint i32 (i32)* @addr_taken_func to i32
326 ; CEHCK-NEXT: ret i32 %expanded 326 ; CEHCK-NEXT: ret i32 %expanded
327 327
328 328
329 define i32 @load_global() { 329 define i32 @load_global() {
330 %val = load i32* @var 330 %val = load i32, i32* @var
331 ret i32 %val 331 ret i32 %val
332 } 332 }
333 ; CHECK: define i32 @load_global() { 333 ; CHECK: define i32 @load_global() {
334 ; CHECK-NEXT: %val = load i32* @var 334 ; CHECK-NEXT: %val = load i32, i32* @var
335 ; CHECK-NEXT: ret i32 %val 335 ; CHECK-NEXT: ret i32 %val
336 336
337 define i16 @load_global_bitcast() { 337 define i16 @load_global_bitcast() {
338 %ptr = bitcast i32* @var to i16* 338 %ptr = bitcast i32* @var to i16*
339 %val = load i16* %ptr 339 %val = load i16, i16* %ptr
340 ret i16 %val 340 ret i16 %val
341 } 341 }
342 ; CHECK: define i16 @load_global_bitcast() { 342 ; CHECK: define i16 @load_global_bitcast() {
343 ; CHECK-NEXT: %var.bc = bitcast i32* @var to i16* 343 ; CHECK-NEXT: %var.bc = bitcast i32* @var to i16*
344 ; CHECK-NEXT: %val = load i16* %var.bc 344 ; CHECK-NEXT: %val = load i16, i16* %var.bc
345 ; CHECK-NEXT: ret i16 %val 345 ; CHECK-NEXT: ret i16 %val
346 346
347 347
348 ; Check that unsimplified allocas are properly handled: 348 ; Check that unsimplified allocas are properly handled:
349 declare void @receive_alloca(%struct* %ptr) 349 declare void @receive_alloca(%struct* %ptr)
350 350
351 define void @unsimplified_alloca() { 351 define void @unsimplified_alloca() {
352 %a = alloca %struct 352 %a = alloca %struct
353 call void @receive_alloca(%struct* %a) 353 call void @receive_alloca(%struct* %a)
354 unreachable 354 unreachable
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 ret i16** %val 392 ret i16** %val
393 } 393 }
394 394
395 395
396 declare void @llvm.dbg.declare(metadata, metadata, metadata) 396 declare void @llvm.dbg.declare(metadata, metadata, metadata)
397 declare void @llvm.dbg.value(metadata, i64, metadata, metadata) 397 declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
398 398
399 define void @debug_declare(i32 %val) { 399 define void @debug_declare(i32 %val) {
400 ; We normally expect llvm.dbg.declare to be used on an alloca. 400 ; We normally expect llvm.dbg.declare to be used on an alloca.
401 %var = alloca i32 401 %var = alloca i32
402 call void @llvm.dbg.declare(metadata !{i32* %var}, metadata !2, metadata !14) 402 call void @llvm.dbg.declare(metadata i32* %var, metadata !11, metadata !12), ! dbg !13
403 call void @llvm.dbg.declare(metadata !{i32 %val}, metadata !2, metadata !14) 403 call void @llvm.dbg.declare(metadata i32 %val, metadata !14, metadata !12), !d bg !13
404 ret void 404 ret void
405 } 405 }
406 ; CHECK: define void @debug_declare(i32 %val) { 406 ; CHECK: define void @debug_declare(i32 %val) {
407 ; CHECK-NEXT: %var = alloca i32 407 ; CHECK-NEXT: %var = alloca i32
408 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !{i32* %var}, metadata !2, me tadata !14) 408 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata i32* %var, metadata !11, meta data !12), !dbg !13
409 ; This case is currently not converted. 409 ; This case is currently not converted.
410 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !{null}, metadata !2, metadat a !14) 410 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !2, metadata !14, metadata !1 2)
411 ; CHECK-NEXT: ret void 411 ; CHECK-NEXT: ret void
412 412
413 ; For now, debugging info for values is lost. replaceAllUsesWith() 413 ; For now, debugging info for values is lost. replaceAllUsesWith()
414 ; does not work for metadata references -- it converts them to nulls. 414 ; does not work for metadata references -- it converts them to nulls.
415 ; This makes dbg.value too tricky to handle for now. 415 ; This makes dbg.value too tricky to handle for now.
416 define void @debug_value(i32 %val, i8* %ptr) { 416 define void @debug_value(i32 %val, i8* %ptr) {
417 tail call void @llvm.dbg.value(metadata !{i32 %val}, i64 1, metadata !1, metad ata !14) 417 tail call void @llvm.dbg.value(metadata i32 %val, i64 1, metadata !11, metadat a !12), !dbg !18
418 tail call void @llvm.dbg.value(metadata !{i8* %ptr}, i64 2, metadata !1, metad ata !14) 418 tail call void @llvm.dbg.value(metadata i8* %ptr, i64 2, metadata !14, metadat a !12), !dbg !18
419 419
420 ; check that we don't crash when encountering odd things: 420 ; check that we don't crash when encountering odd things:
421 tail call void @llvm.dbg.value(metadata !{i8* null}, i64 3, metadata !1, metad ata !14) 421 tail call void @llvm.dbg.value(metadata i8* null, i64 3, metadata !11, metadat a !12), !dbg !18
422 tail call void @llvm.dbg.value(metadata !{i8* undef}, i64 4, metadata !1, meta data !14) 422 tail call void @llvm.dbg.value(metadata i8* undef, i64 4, metadata !11, metada ta !12), !dbg !18
423 tail call void @llvm.dbg.value(metadata !{}, i64 5, metadata !1, metadata !14) 423 tail call void @llvm.dbg.value(metadata !{}, i64 5, metadata !11, metadata !12 ), !dbg !18
424 ret void 424 ret void
425 } 425 }
426 ; CHECK: define void @debug_value(i32 %val, i32 %ptr) { 426 ; CHECK: define void @debug_value(i32 %val, i32 %ptr) {
427 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !{null}, i64 1, metadata !1, me tadata !14) 427 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !2, i64 1, metadata !11, metada ta !12)
428 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !{null}, i64 2, metadata !1, me tadata !14) 428 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !2, i64 2, metadata !14, metada ta !12)
429 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !15, i64 3, metadata !1, metada ta !14) 429 ; CHECK-NEXT: call void @llvm.dbg.value(metadata i8* null, i64 3, metadata !11, metadata !12)
430 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !16, i64 4, metadata !1, metada ta !14) 430 ; CHECK-NEXT: call void @llvm.dbg.value(metadata i8* undef, i64 4, metadata !11, metadata !12)
431 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !2, i64 5, metadata !1, metadat a !14) 431 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !2, i64 5, metadata !11, metada ta !12)
432 ; CHECK-NEXT: ret void 432 ; CHECK-NEXT: ret void
433 433
434 434
435 declare void @llvm.lifetime.start(i64 %size, i8* %ptr) 435 declare void @llvm.lifetime.start(i64 %size, i8* %ptr)
436 declare {}* @llvm.invariant.start(i64 %size, i8* %ptr) 436 declare {}* @llvm.invariant.start(i64 %size, i8* %ptr)
437 declare void @llvm.invariant.end({}* %start, i64 %size, i8* %ptr) 437 declare void @llvm.invariant.end({}* %start, i64 %size, i8* %ptr)
438 438
439 ; GVN can introduce the following horrible corner case of a lifetime 439 ; GVN can introduce the following horrible corner case of a lifetime
440 ; marker referencing a PHI node. But we convert the phi to i32 type, 440 ; marker referencing a PHI node. But we convert the phi to i32 type,
441 ; and lifetime.start doesn't work on an inttoptr converting an i32 phi 441 ; and lifetime.start doesn't work on an inttoptr converting an i32 phi
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 ; CHECK-NEXT: ret void 486 ; CHECK-NEXT: ret void
487 487
488 488
489 ; "nocapture" and "noalias" only apply to pointers, so must be stripped. 489 ; "nocapture" and "noalias" only apply to pointers, so must be stripped.
490 define void @nocapture_attr(i8* nocapture noalias %ptr) { 490 define void @nocapture_attr(i8* nocapture noalias %ptr) {
491 ret void 491 ret void
492 } 492 }
493 ; CHECK: define void @nocapture_attr(i32 %ptr) { 493 ; CHECK: define void @nocapture_attr(i32 %ptr) {
494 494
495 495
496 define void @readonly_readnone(i8* readonly readnone) { 496 define void @readonly_readnone(i8* readonly dereferenceable_or_null(4)) {
497 ret void 497 ret void
498 } 498 }
499 ; CHECK-LABEL: define void @readonly_readnone(i32) 499 ; CHECK-LABEL: define void @readonly_readnone(i32)
500 500
501 define nonnull i8* @nonnull_ptr(i8* nonnull) { 501 define nonnull i8* @nonnull_ptr(i8* nonnull) {
502 ret i8* undef 502 ret i8* undef
503 } 503 }
504 ; CHECK-LABEL: define i32 @nonnull_ptr(i32) 504 ; CHECK-LABEL: define i32 @nonnull_ptr(i32)
505 505
506 define dereferenceable(16) i8* @dereferenceable_ptr(i8* dereferenceable(8)) { 506 define dereferenceable(16) i8* @dereferenceable_ptr(i8* dereferenceable(8)) {
(...skipping 30 matching lines...) Expand all
537 tail call void @tail_call() 537 tail call void @tail_call()
538 ret void 538 ret void
539 } 539 }
540 ; CHECK: define void @tail_call() 540 ; CHECK: define void @tail_call()
541 ; CHECK-NEXT: tail call void @tail_call() 541 ; CHECK-NEXT: tail call void @tail_call()
542 542
543 543
544 ; Just check that the pass does not crash on getelementptr. (The pass 544 ; Just check that the pass does not crash on getelementptr. (The pass
545 ; should not depend unnecessarily on ExpandGetElementPtr having been 545 ; should not depend unnecessarily on ExpandGetElementPtr having been
546 ; run.) 546 ; run.)
547 define i8* @getelementptr(i8* %ptr) { 547 define i8* @getelementptr(i8, i8* %ptr) {
548 %gep = getelementptr i8* %ptr, i32 10 548 %gep = getelementptr i8, i8* %ptr, i32 10
549 ret i8* %gep 549 ret i8* %gep
550 } 550 }
551 551
552 ; Just check that the pass does not crash on va_arg. 552 ; Just check that the pass does not crash on va_arg.
553 define i32* @va_arg(i8* %valist) { 553 define i32* @va_arg(i8* %valist) {
554 %r = va_arg i8* %valist, i32* 554 %r = va_arg i8* %valist, i32*
555 ret i32* %r 555 ret i32* %r
556 } 556 }
557 557
558 558
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 ; CHECK-NEXT: call i32 @llvm.eh.typeid.for(i8* %typeid.bc) 610 ; CHECK-NEXT: call i32 @llvm.eh.typeid.for(i8* %typeid.bc)
611 611
612 612
613 ; Subprogram debug metadata may refer to a function. 613 ; Subprogram debug metadata may refer to a function.
614 ; Make sure those are updated too. 614 ; Make sure those are updated too.
615 ; Regenerate the debug info from the following C program: 615 ; Regenerate the debug info from the following C program:
616 ; void nop(void *ptr) { 616 ; void nop(void *ptr) {
617 ; } 617 ; }
618 618
619 define void @nop(i8* %ptr) { 619 define void @nop(i8* %ptr) {
620 tail call void @llvm.dbg.value(metadata !{i8* %ptr}, i64 0, metadata !10, meta data !14), !dbg !15 620 tail call void @llvm.dbg.value(metadata i8* %ptr, i64 0, metadata !11, metadat a !12), !dbg !19
621 ret void, !dbg !16 621 ret void, !dbg !19
622 } 622 }
623 ; CHECK: define void @nop(i32 %ptr) { 623 ; CHECK: define void @nop(i32 %ptr) {
624 ; CHECK-NEXT: call void @llvm.dbg.value{{.*}} 624 ; CHECK-NEXT: call void @llvm.dbg.value{{.*}}
625 ; CHECK-NEXT: ret void 625 ; CHECK-NEXT: ret void
626 626
627 627
628 ; CHECK: attributes {{.*}}[[NOUNWIND]] = { nounwind } 628 ; CHECK: attributes {{.*}}[[NOUNWIND]] = { nounwind }
629 629
630 !llvm.dbg.cu = !{!0} 630 !llvm.dbg.cu = !{!0}
631 !llvm.module.flags = !{!11, !12} 631 !llvm.module.flags = !{!8, !9}
632 !llvm.ident = !{!13} 632 !llvm.ident = !{!10}
633 633
634 !0 = metadata !{metadata !"0x11\0012\00clang version 3.6.0", metadata !1, metada ta !2, metadata !2, metadata !3, metadata !2, metadata !2} ; [ DW_TAG_compile_un it ] [/home/foo/test_debug.c] [DW_LANG_C99] 634 ; CHECK: !4 = !MDSubprogram(name: "debug_declare", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagProtot yped, isOptimized: false, function: void (i32)* @debug_declare, variables: !2)
635 !1 = metadata !{metadata !"test_debug.c", metadata !"/home/foo"}
636 !2 = metadata !{}
637 !3 = metadata !{metadata !4}
638 !4 = metadata !{metadata !"0x2e\00nop\00nop\00\001\000\001\000\000\00256\001\001 ", metadata !1, metadata !5, metadata !6, null, void (i8*)* @nop, null, null, me tadata !9} ; [ DW_TAG_subprogram ] [line 1] [def] [nop]
jvoung (off chromium) 2015/05/26 20:39:45 If the test is now checking that "void (i32)* @deb
Derek Schuff 2015/05/26 22:01:33 Done.
639 !5 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [/home/ foo/test_debug.c]
640 !6 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, m etadata !7, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, alig n 0, offset 0] [from ]
641 !7 = metadata !{null, metadata !8}
642 !8 = metadata !{metadata !"0xf\00\000\0032\0032\000\000", null, null, null} ; [ DW_TAG_pointer_type ] [line 0, size 32, align 32, offset 0] [from ]
643 !9 = metadata !{metadata !10}
644 !10 = metadata !{metadata !"0x101\00ptr\0016777217\000", metadata !4, metadata ! 5, metadata !8} ; [ DW_TAG_arg_variable ] [ptr] [line 1]
645 !11 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
646 !12 = metadata !{i32 2, metadata !"Debug Info Version", i32 2}
647 !13 = metadata !{metadata !"clang version 3.6.0"}
648 !14 = metadata !{metadata !"0x102"} ; [ DW_TAG_expression ]
649 !15 = metadata !{i32 1, i32 16, metadata !4, null}
650 !16 = metadata !{i32 2, i32 1, metadata !4, null}
651 635
652 ; CHECK: !4 = metadata !{{{.*}}nop{{.*}}, void (i32)* @nop, {{.*}}} ; [ DW_TAG_s ubprogram ] [line 1] [def] [nop] 636 !0 = !MDCompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3. 7.0 (trunk 235150) (llvm/trunk 235152)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2, imp orts: !2)
637 !1 = !MDFile(filename: "foo.c", directory: "/s/llvm/cmakebuild")
638 !2 = !{}
639 !3 = !{!4}
640 !4 = !MDSubprogram(name: "debug_declare", scope: !1, file: !1, line: 1, type: !5 , isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isO ptimized: false, function: void (i32)* @debug_declare, variables: !2)
641 !5 = !MDSubroutineType(types: !6)
642 !6 = !{null, !7}
643 !7 = !MDBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
644 !8 = !{i32 2, !"Dwarf Version", i32 4}
645 !9 = !{i32 2, !"Debug Info Version", i32 3}
646 !10 = !{!"clang version 3.7.0 (trunk 235150) (llvm/trunk 235152)"}
647 !11 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", arg: 1, scope: !4, file: !1, line: 1, type: !7)
648 !12 = !MDExpression()
649 !13 = !MDLocation(line: 1, column: 24, scope: !4)
650
651 !14 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "var", scope: !4, file: !1, line: 2, type: !15)
652 !15 = !MDCompositeType(tag: DW_TAG_array_type, baseType: !7, align: 32, elements : !16)
653 !16 = !{!17}
654 !17 = !MDSubrange(count: -1)
655 !18 = !MDLocation(line: 2, column: 11, scope: !4)
656 !19 = !MDLocation(line: 2, column: 3, scope: !4)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698