brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.6 KiB · 1aa0f65 Raw
272 lines · plain
1; REQUIRES: x86-registered-target2; RUN: opt < %s -passes=pseudo-probe -function-sections -S -o %t3; RUN: FileCheck %s < %t --check-prefix=CHECK-IL4; RUN: llc %t -mtriple=x86_64-- -stop-after=pseudo-probe-inserter -o - | FileCheck %s --check-prefix=CHECK-MIR5; For ELF.6; RUN: llc %t -function-sections -mtriple=x86_64-unknown-linux-gnu -filetype=asm -o %t17; RUN: FileCheck %s < %t1 --check-prefixes=CHECK-ASM,CHECK-ASM-ELF8; RUN: llc %t -function-sections -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t29; RUN: llvm-readelf -S -g %t2 | FileCheck %s --check-prefix=CHECK-SEC-ELF10; RUN: llvm-mc %t1 -triple=x86_64-unknown-linux-gnu -filetype=obj -o %t311; RUN: llvm-readelf -S -g %t3 | FileCheck %s --check-prefix=CHECK-SEC-ELF12 13; RUN: llc %t -function-sections -mtriple=x86_64-unknown-linux-gnu -unique-section-names=0 -filetype=obj -o %t414; RUN: llvm-readelf -S %t4 | FileCheck %s --check-prefix=CHECK-SEC2-ELF15 16; For COFF.17; RUN: llc %t -function-sections -mtriple=x86_64-unknown-windows-msvc -filetype=asm -o %t118; RUN: FileCheck %s < %t1 --check-prefixes=CHECK-ASM,CHECK-ASM-COFF19; RUN: llc %t -function-sections -mtriple=x86_64-unknown-windows-msvc -filetype=obj -o %t220; RUN: llvm-readobj -Ss %t2 | FileCheck %s --check-prefix=CHECK-SEC-COFF21; RUN: llvm-mc %t1 -triple=x86_64-unknown-windows-msvc -filetype=obj -o %t322; RUN: llvm-readobj -Ss %t3 | FileCheck %s --check-prefix=CHECK-SEC-COFF23;; Check the generation of pseudoprobe intrinsic call.24 25@a = dso_local global i32 0, align 426 27define void @foo(i32 %x) !dbg !3 {28bb0:29  %cmp = icmp eq i32 %x, 030; CHECK-IL-LABEL: void @foo(i32 %x) !dbg ![[#]] {31; CHECK-IL: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 1, i32 0, i64 -1), !dbg ![[#FAKELINE:]]32; CHECK-MIR: PSEUDO_PROBE [[#GUID:]], 1, 0, 033; CHECK-ASM: .pseudoprobe	[[#GUID:]] 1 0 0 foo34  br i1 %cmp, label %bb1, label %bb235 36bb1:37; CHECK-IL: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 2, i32 0, i64 -1), !dbg ![[#FAKELINE]]38; CHECK-MIR: PSEUDO_PROBE [[#GUID]], 3, 0, 039; CHECK-MIR: PSEUDO_PROBE [[#GUID]], 4, 0, 040; CHECK-ASM: .pseudoprobe	[[#GUID]] 3 0 0 foo41; CHECK-ASM: .pseudoprobe	[[#GUID]] 4 0 0 foo42  store i32 6, ptr @a, align 443  br label %bb344 45bb2:46; CHECK-IL: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 3, i32 0, i64 -1), !dbg ![[#FAKELINE]]47; CHECK-MIR: PSEUDO_PROBE [[#GUID]], 2, 0, 048; CHECK-MIR: PSEUDO_PROBE [[#GUID]], 4, 0, 049; CHECK-ASM: .pseudoprobe	[[#GUID]] 2 0 0 foo50; CHECK-ASM: .pseudoprobe	[[#GUID]] 4 0 0 foo51  store i32 8, ptr @a, align 452  br label %bb353 54bb3:55; CHECK-IL: call void @llvm.pseudoprobe(i64 [[#GUID]], i64 4, i32 0, i64 -1), !dbg ![[#REALLINE:]]56  ret void, !dbg !1257}58 59declare void @bar(i32 %x)60 61define internal void @foo2(ptr %f) !dbg !4 {62entry:63; CHECK-IL-LABEL: void @foo2(ptr %f) !dbg ![[#]] {64; CHECK-IL: call void @llvm.pseudoprobe(i64 [[#GUID2:]], i64 1, i32 0, i64 -1)65; CHECK-MIR: PSEUDO_PROBE [[#GUID2:]], 1, 0, 066; CHECK-ASM: .pseudoprobe	[[#GUID2:]] 1 0 0 foo267; Check pseudo_probe metadata attached to the indirect call instruction.68; CHECK-IL: call void %f(i32 1), !dbg ![[#PROBE0:]]69; CHECK-MIR: PSEUDO_PROBE [[#GUID2]], 2, 1, 070; CHECK-ASM: .pseudoprobe	[[#GUID2]] 2 1 0 foo271  call void %f(i32 1), !dbg !1372; Check pseudo_probe metadata attached to the direct call instruction.73; CHECK-IL: call void @bar(i32 1), !dbg ![[#PROBE1:]]74; CHECK-MIR: PSEUDO_PROBE	[[#GUID2]], 3, 2, 075; CHECK-ASM: .pseudoprobe	[[#GUID2]] 3 2 0 foo276  call void @bar(i32 1)77  ret void78}79 80$foo3 = comdat any81 82define void @foo3(i32 %x) comdat {83entry:84  ret void85}86 87; CHECK-IL: Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)88; CHECK-IL-NEXT: declare void @llvm.pseudoprobe(i64, i64, i32, i64)89 90; CHECK-IL: ![[#FOO:]] = distinct !DISubprogram(name: "foo"91; CHECK-IL: ![[#FAKELINE]] = !DILocation(line: 0, scope: ![[#FOO]])92; CHECK-IL: ![[#REALLINE]] = !DILocation(line: 2, scope: ![[#DISC0:]])93; CHECK-IL: ![[#DISC0]] = !DILexicalBlockFile(scope: ![[#FOO]], file: ![[#]], discriminator: 0)94; CHECK-IL: ![[#PROBE0]] = !DILocation(line: 2, column: 20, scope: ![[#SCOPE0:]])95;; A discriminator of 387973143 which is 0x17200017 in hexdecimal, stands for a direct call probe96;; with an index of 2.97; CHECK-IL: ![[#SCOPE0]] = !DILexicalBlockFile(scope: ![[#]], file: ![[#]], discriminator: 387973143)98; CHECK-IL: ![[#PROBE1]] = !DILocation(line: 0, scope: ![[#SCOPE1:]])99;; A discriminator of 455082015 which is 0x1b20001f in hexdecimal, stands for a direct call probe100;; with an index of 3.101; CHECK-IL: ![[#SCOPE1]] = !DILexicalBlockFile(scope: ![[#]], file: ![[#]], discriminator: 455082015)102 103; Check the generation of .pseudo_probe_desc section104; CHECK-ASM-ELF: .section .pseudo_probe_desc,"G",@progbits,.pseudo_probe_desc_foo,comdat105; CHECK-ASM-ELF-NEXT: .quad [[#GUID]]106; CHECK-ASM-ELF-NEXT: .quad [[#HASH:]]107; CHECK-ASM-ELF-NEXT: .byte  3108; CHECK-ASM-ELF-NEXT: .ascii	"foo"109; CHECK-ASM-ELF-NEXT: .section  .pseudo_probe_desc,"G",@progbits,.pseudo_probe_desc_foo2,comdat110; CHECK-ASM-ELF-NEXT: .quad [[#GUID2]]111; CHECK-ASM-ELF-NEXT: .quad [[#HASH2:]]112; CHECK-ASM-ELF-NEXT: .byte 4113; CHECK-ASM-ELF-NEXT: .ascii	"foo2"114; CHECK-ASM-COFF: .section	.pseudo_probe_desc,"drD",same_contents,.pseudo_probe_desc_foo115; CHECK-ASM-COFF-NEXT: .pseudo_probe_desc_foo:116; CHECK-ASM-COFF-NEXT: .quad	[[#GUID]]117; CHECK-ASM-COFF-NEXT: .quad	[[#HASH:]]118; CHECK-ASM-COFF-NEXT: .byte	3119; CHECK-ASM-COFF-NEXT: .ascii	"foo"120; CHECK-ASM-COFF-NEXT: .section	.pseudo_probe_desc,"drD",same_contents,.pseudo_probe_desc_foo2121; CHECK-ASM-COFF-NEXT: .pseudo_probe_desc_foo2:122; CHECK-ASM-COFF-NEXT: .quad	[[#GUID2]]123; CHECK-ASM-COFF-NEXT: .quad	[[#HASH2:]]124; CHECK-ASM-COFF-NEXT: .byte	4125; CHECK-ASM-COFF-NEXT: .ascii	"foo2"126 127; CHECK-SEC-ELF:       [Nr] Name               Type     {{.*}} ES Flg Lk Inf Al128; CHECK-SEC-ELF:       [ 3] .text.foo          PROGBITS {{.*}} 00  AX  0   0 16129; CHECK-SEC-ELF:       [ 5] .text.foo2         PROGBITS {{.*}} 00  AX  0   0 16130; CHECK-SEC-ELF:       [ 8] .text.foo3         PROGBITS {{.*}} 00  AXG 0   0 16131; CHECK-SEC-ELF-COUNT-3:    .pseudo_probe_desc PROGBITS132; CHECK-SEC-ELF:            .pseudo_probe      PROGBITS {{.*}} 00   L  3   0  1133; CHECK-SEC-ELF-NEXT:       .pseudo_probe      PROGBITS {{.*}} 00   L  5   0  1134; CHECK-SEC-ELF-NEXT:       .pseudo_probe      PROGBITS {{.*}} 00   LG 8   0  1135; CHECK-SEC-ELF-NOT:   .rela.pseudo_probe136 137; CHECK-SEC-ELF:       COMDAT group section [    7] `.group' [foo3] contains 2 sections:138; CHECK-SEC-ELF-NEXT:     [Index]    Name139; CHECK-SEC-ELF-NEXT:     [    8]   .text.foo3140; CHECK-SEC-ELF-NEXT:     [   21]   .pseudo_probe141; CHECK-SEC-ELF-EMPTY:142; CHECK-SEC-ELF-NEXT:  COMDAT group section [   10] `.group' [.pseudo_probe_desc_foo] contains 1 sections:143; CHECK-SEC-ELF-NEXT:     [Index]    Name144; CHECK-SEC-ELF-NEXT:     [   11]   .pseudo_probe_desc145; CHECK-SEC-ELF-EMPTY:146; CHECK-SEC-ELF-NEXT:  COMDAT group section [   12] `.group' [.pseudo_probe_desc_foo2] contains 1 sections:147; CHECK-SEC-ELF-NEXT:     [Index]    Name148; CHECK-SEC-ELF-NEXT:     [   13]   .pseudo_probe_desc149; CHECK-SEC-ELF-EMPTY:150; CHECK-SEC-ELF-NEXT:  COMDAT group section [   14] `.group' [.pseudo_probe_desc_foo3] contains 1 sections:151; CHECK-SEC-ELF-NEXT:     [Index]    Name152; CHECK-SEC-ELF-NEXT:     [   15]   .pseudo_probe_desc153 154; CHECK-SEC2-ELF:      [Nr] Name               Type     {{.*}} ES Flg Lk Inf Al155; CHECK-SEC2-ELF:      [ 3] .text              PROGBITS {{.*}} 00  AX  0   0 16156; CHECK-SEC2-ELF:      [ 5] .text              PROGBITS {{.*}} 00  AX  0   0 16157; CHECK-SEC2-ELF:      [ 8] .text              PROGBITS {{.*}} 00  AXG 0   0 16158; CHECK-SEC2-ELF-COUNT-3:   .pseudo_probe_desc PROGBITS159; CHECK-SEC2-ELF:           .pseudo_probe      PROGBITS {{.*}} 00   L  3   0  1160; CHECK-SEC2-ELF-NEXT:      .pseudo_probe      PROGBITS {{.*}} 00   L  5   0  1161; CHECK-SEC2-ELF-NEXT:      .pseudo_probe      PROGBITS {{.*}} 00   LG 8   0  1162; CHECK-SEC2-ELF-NOT:  .rela.pseudo_probe163 164; CHECK-SEC-COFF-LABEL: Sections [165; CHECK-SEC-COFF:           Number: 4166; CHECK-SEC-COFF-NEXT:      Name: .text167; CHECK-SEC-COFF:           Number: 5168; CHECK-SEC-COFF-NEXT:      Name: .text169; CHECK-SEC-COFF:           Number: 6170; CHECK-SEC-COFF-NEXT:      Name: .text171; CHECK-SEC-COFF:           Number: 7172; CHECK-SEC-COFF-NEXT:      Name: .pseudo_probe_desc173; CHECK-SEC-COFF:           Characteristics [174; CHECK-SEC-COFF:             IMAGE_SCN_CNT_INITIALIZED_DATA175; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_LNK_COMDAT176; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_DISCARDABLE177; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_READ178; CHECK-SEC-COFF:           Number: 8179; CHECK-SEC-COFF-NEXT:      Name: .pseudo_probe_desc180; CHECK-SEC-COFF:           Characteristics [181; CHECK-SEC-COFF:             IMAGE_SCN_CNT_INITIALIZED_DATA182; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_LNK_COMDAT183; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_DISCARDABLE184; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_READ185; CHECK-SEC-COFF:           Number: 9186; CHECK-SEC-COFF-NEXT:      Name: .pseudo_probe_desc187; CHECK-SEC-COFF:           Characteristics [188; CHECK-SEC-COFF:             IMAGE_SCN_CNT_INITIALIZED_DATA189; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_LNK_COMDAT190; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_DISCARDABLE191; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_READ192; CHECK-SEC-COFF:           Number: 13193; CHECK-SEC-COFF-NEXT:      Name: .pseudo_probe194; CHECK-SEC-COFF:           Characteristics [195; CHECK-SEC-COFF:             IMAGE_SCN_CNT_INITIALIZED_DATA196; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_LNK_COMDAT197; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_DISCARDABLE198; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_READ199; CHECK-SEC-COFF:           Number: 14200; CHECK-SEC-COFF-NEXT:      Name: .pseudo_probe201; CHECK-SEC-COFF:           Characteristics [202; CHECK-SEC-COFF:             IMAGE_SCN_CNT_INITIALIZED_DATA203; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_LNK_COMDAT204; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_DISCARDABLE205; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_READ206; CHECK-SEC-COFF:           Number: 15207; CHECK-SEC-COFF-NEXT:      Name: .pseudo_probe208; CHECK-SEC-COFF:           Characteristics [209; CHECK-SEC-COFF:             IMAGE_SCN_CNT_INITIALIZED_DATA210; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_LNK_COMDAT211; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_DISCARDABLE212; CHECK-SEC-COFF-NEXT:        IMAGE_SCN_MEM_READ213; COMDAT symbols214; CHECK-SEC-COFF-LABEL: Symbols [215; CHECK-SEC-COFF:           Name: foo216; CHECK-SEC-COFF:           Section: .text (4)217; CHECK-SEC-COFF:         }218; CHECK-SEC-COFF:           Name: foo2219; CHECK-SEC-COFF:           Section: .text (5)220; CHECK-SEC-COFF:         }221; CHECK-SEC-COFF:           Name: foo3222; CHECK-SEC-COFF:           Section: .text (6)223; CHECK-SEC-COFF:         }224; CHECK-SEC-COFF:           Name: .pseudo_probe_desc_foo225; CHECK-SEC-COFF:           Section: .pseudo_probe_desc (7)226; CHECK-SEC-COFF:           StorageClass: Static227; CHECK-SEC-COFF:         }228; CHECK-SEC-COFF:           Name: .pseudo_probe_desc_foo2229; CHECK-SEC-COFF:           Section: .pseudo_probe_desc (8)230; CHECK-SEC-COFF:           StorageClass: Static231; CHECK-SEC-COFF:         }232; CHECK-SEC-COFF:           Name: .pseudo_probe_desc_foo3233; CHECK-SEC-COFF:           Section: .pseudo_probe_desc (9)234; CHECK-SEC-COFF:           StorageClass: Static235; CHECK-SEC-COFF:         }236; Section symbols237; CHECK-SEC-COFF:           Name: .pseudo_probe238; CHECK-SEC-COFF:           Section: .pseudo_probe (13)239; CHECK-SEC-COFF:           AuxSectionDef {240; CHECK-SEC-COFF:             Selection: Associative241; CHECK-SEC-COFF-NEXT:        AssocSection: .text (4)242; CHECK-SEC-COFF:         }243; CHECK-SEC-COFF:           Name: .pseudo_probe244; CHECK-SEC-COFF:           Section: .pseudo_probe (14)245; CHECK-SEC-COFF:           AuxSectionDef {246; CHECK-SEC-COFF:             Selection: Associative247; CHECK-SEC-COFF-NEXT:        AssocSection: .text (5)248; CHECK-SEC-COFF:         }249; CHECK-SEC-COFF:           Name: .pseudo_probe250; CHECK-SEC-COFF:           Section: .pseudo_probe (15)251; CHECK-SEC-COFF:           AuxSectionDef {252; CHECK-SEC-COFF:             Selection: Associative253; CHECK-SEC-COFF-NEXT:        AssocSection: .text (6)254 255!llvm.dbg.cu = !{!0}256!llvm.module.flags = !{!9, !10}257 258!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)259!1 = !DIFile(filename: "test.c", directory: "")260!2 = !{}261!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, unit: !0, retainedNodes: !2)262!4 = distinct !DISubprogram(name: "foo2", scope: !1, file: !1, line: 2, type: !5, unit: !0, retainedNodes: !2)263!5 = !DISubroutineType(types: !6)264!6 = !{!7}265!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)266!9 = !{i32 2, !"Dwarf Version", i32 4}267!10 = !{i32 2, !"Debug Info Version", i32 3}268!11 = !{!"clang version 3.9.0"}269!12 = !DILocation(line: 2, scope: !14)270!13 = !DILocation(line: 2, column: 20, scope: !4)271!14 = !DILexicalBlockFile(scope: !3, file: !1, discriminator: 1)272