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

Side by Side Diff: test/Transforms/NaCl/replace-ptrs-with-ints.ll

Issue 809483003: Update ReplacePtrsWithInts to also fix up refs from subprogram debug metadata. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « lib/Transforms/NaCl/ReplacePtrsWithInts.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 !llvm.module.flags = !{!0}
4 !0 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
5
6 target datalayout = "p:32:32:32" 3 target datalayout = "p:32:32:32"
7 4
8 5
9 %struct = type { i32, i32 } 6 %struct = type { i32, i32 }
10 7
11 declare %struct* @addr_taken_func(%struct*) 8 declare %struct* @addr_taken_func(%struct*)
12 9
13 @addr_of_func = global %struct* (%struct*)* @addr_taken_func 10 @addr_of_func = global %struct* (%struct*)* @addr_taken_func
14 ; CHECK: @addr_of_func = global %struct* (%struct*)* bitcast (i32 (i32)* @addr_t aken_func to %struct* (%struct*)*) 11 ; CHECK: @addr_of_func = global %struct* (%struct*)* bitcast (i32 (i32)* @addr_t aken_func to %struct* (%struct*)*)
15 12
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 489
493 define void @debug_declare(i32 %val) { 490 define void @debug_declare(i32 %val) {
494 ; We normally expect llvm.dbg.declare to be used on an alloca. 491 ; We normally expect llvm.dbg.declare to be used on an alloca.
495 %var = alloca i32 492 %var = alloca i32
496 tail call void @llvm.dbg.declare(metadata !{i32* %var}, metadata !{}) 493 tail call void @llvm.dbg.declare(metadata !{i32* %var}, metadata !{})
497 tail call void @llvm.dbg.declare(metadata !{i32 %val}, metadata !{}) 494 tail call void @llvm.dbg.declare(metadata !{i32 %val}, metadata !{})
498 ret void 495 ret void
499 } 496 }
500 ; CHECK: define void @debug_declare(i32 %val) { 497 ; CHECK: define void @debug_declare(i32 %val) {
501 ; CHECK-NEXT: %var = alloca i8, i32 4 498 ; CHECK-NEXT: %var = alloca i8, i32 4
502 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !{i8* %var}, metadata !1) 499 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !{i8* %var}, metadata !2)
503 ; This case is currently not converted. 500 ; This case is currently not converted.
504 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !{null}, metadata !1) 501 ; CHECK-NEXT: call void @llvm.dbg.declare(metadata !{null}, metadata !2)
505 ; CHECK-NEXT: ret void 502 ; CHECK-NEXT: ret void
506 503
507 ; For now, debugging info for values is lost. replaceAllUsesWith() 504 ; For now, debugging info for values is lost. replaceAllUsesWith()
508 ; does not work for metadata references -- it converts them to nulls. 505 ; does not work for metadata references -- it converts them to nulls.
509 ; This makes dbg.value too tricky to handle for now. 506 ; This makes dbg.value too tricky to handle for now.
510 define void @debug_value(i32 %val, i8* %ptr) { 507 define void @debug_value(i32 %val, i8* %ptr) {
511 tail call void @llvm.dbg.value(metadata !{i32 %val}, i64 1, metadata !{}) 508 tail call void @llvm.dbg.value(metadata !{i32 %val}, i64 1, metadata !{})
512 tail call void @llvm.dbg.value(metadata !{i8* %ptr}, i64 2, metadata !{}) 509 tail call void @llvm.dbg.value(metadata !{i8* %ptr}, i64 2, metadata !{})
513 ret void 510 ret void
514 } 511 }
515 ; CHECK: define void @debug_value(i32 %val, i32 %ptr) { 512 ; CHECK: define void @debug_value(i32 %val, i32 %ptr) {
516 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !{null}, i64 1, metadata !1) 513 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !{null}, i64 1, metadata !2)
517 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !{null}, i64 2, metadata !1) 514 ; CHECK-NEXT: call void @llvm.dbg.value(metadata !{null}, i64 2, metadata !2)
518 ; CHECK-NEXT: ret void 515 ; CHECK-NEXT: ret void
519 516
520 517
521 declare void @llvm.lifetime.start(i64 %size, i8* %ptr) 518 declare void @llvm.lifetime.start(i64 %size, i8* %ptr)
522 declare {}* @llvm.invariant.start(i64 %size, i8* %ptr) 519 declare {}* @llvm.invariant.start(i64 %size, i8* %ptr)
523 declare void @llvm.invariant.end({}* %start, i64 %size, i8* %ptr) 520 declare void @llvm.invariant.end({}* %start, i64 %size, i8* %ptr)
524 521
525 ; GVN can introduce the following horrible corner case of a lifetime 522 ; GVN can introduce the following horrible corner case of a lifetime
526 ; marker referencing a PHI node. But we convert the phi to i32 type, 523 ; marker referencing a PHI node. But we convert the phi to i32 type,
527 ; and lifetime.start doesn't work on an inttoptr converting an i32 phi 524 ; and lifetime.start doesn't work on an inttoptr converting an i32 phi
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 define void @typeid_for() { 669 define void @typeid_for() {
673 %bc = bitcast i32* @typeid to i8* 670 %bc = bitcast i32* @typeid to i8*
674 call i32 @llvm.eh.typeid.for(i8* %bc) 671 call i32 @llvm.eh.typeid.for(i8* %bc)
675 ret void 672 ret void
676 } 673 }
677 ; CHECK: define void @typeid_for() { 674 ; CHECK: define void @typeid_for() {
678 ; CHECK-NEXT: %typeid.bc = bitcast i32* @typeid to i8* 675 ; CHECK-NEXT: %typeid.bc = bitcast i32* @typeid to i8*
679 ; CHECK-NEXT: call i32 @llvm.eh.typeid.for(i8* %typeid.bc) 676 ; CHECK-NEXT: call i32 @llvm.eh.typeid.for(i8* %typeid.bc)
680 677
681 678
679 ; Subprogram debug metadata may refer to a function.
680 ; Make sure those are updated too.
681 ; Regenerate the debug info from the following C program:
682 ; void nop(void *ptr) {
683 ; }
684
685 define void @nop(i8* %ptr) {
686 tail call void @llvm.dbg.value(metadata !{i8* %ptr}, i64 0, metadata !10), !db g !14
687 ret void, !dbg !15
688 }
689
Mark Seaborn 2014/12/15 23:43:27 Nit: remove empty line for consistency with other
jvoung (off chromium) 2014/12/16 01:09:09 Done.
690 ; CHECK: define void @nop(i32 %ptr) {
691 ; CHECK-NEXT: call void @llvm.dbg.value{{.*}}
692 ; CHECK-NEXT: ret void
693
694
682 ; CHECK: attributes {{.*}}[[NOUNWIND]] = { nounwind } 695 ; CHECK: attributes {{.*}}[[NOUNWIND]] = { nounwind }
696
697 !llvm.dbg.cu = !{!0}
698 !llvm.module.flags = !{!11, !12}
699 !llvm.ident = !{!13}
700
701 !0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5.0" , i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/home/foo/test_ min.c] [DW_LANG_C99]
702 !1 = metadata !{metadata !"test_min.c", metadata !"/home/foo"}
703 !2 = metadata !{}
704 !3 = metadata !{metadata !4}
705 !4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"nop", metadata !"nop", metadata !"", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, void (i8*)* @nop, null, null, metadata !9, i32 1} ; [ DW_TAG_ subprogram ] [line 1] [def] [nop]
706 !5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/home/ foo/test_min.c]
707 !6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
708 !7 = metadata !{null, metadata !8}
709 !8 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 32, i64 32, i64 0, i32 0, null} ; [ DW_TAG_pointer_type ] [line 0, size 32, align 32, offset 0] [from ]
710 !9 = metadata !{metadata !10}
711 !10 = metadata !{i32 786689, metadata !4, metadata !"ptr", metadata !5, i32 1677 7217, metadata !8, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [ptr] [line 1]
712 !11 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
713 !12 = metadata !{i32 2, metadata !"Debug Info Version", i32 1}
714 !13 = metadata !{metadata !"clang version 3.5.0"}
715 !14 = metadata !{i32 1, i32 16, metadata !4, null}
716 !15 = metadata !{i32 2, i32 1, metadata !4, null}
717
718 ; CHECK: !4 = metadata !{{{.*}}nop{{.*}}, void (i32)* @nop, {{.*}}} ; [ DW_TAG_s ubprogram ] [line 1] [def] [nop]
OLDNEW
« no previous file with comments | « lib/Transforms/NaCl/ReplacePtrsWithInts.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698