[PATCH] D61083: Recommitting r358783 and r358786 "[MS] Emit S_HEAPALLOCSITE debug info" with fixes for buildbot error (undefined assembler label).
This revision was automatically updated to reflect the committed changes. Closed by commit rL359149: Recommitting r358783 and r358786 [MS] Emit S_HEAPALLOCSITE debug info with… (authored by akhuang, committed by ). Changed prior to commit: https://reviews.llvm.org/D61083?vs=196525=196540#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61083/new/ https://reviews.llvm.org/D61083 Files: llvm/trunk/include/llvm/CodeGen/MachineFunction.h llvm/trunk/include/llvm/CodeGen/MachineInstr.h llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.h llvm/trunk/lib/CodeGen/MachineFunction.cpp llvm/trunk/lib/CodeGen/MachineInstr.cpp llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp llvm/trunk/lib/Target/X86/X86FastISel.cpp llvm/trunk/test/CodeGen/X86/label-heapallocsite.ll Index: llvm/trunk/test/CodeGen/X86/label-heapallocsite.ll === --- llvm/trunk/test/CodeGen/X86/label-heapallocsite.ll +++ llvm/trunk/test/CodeGen/X86/label-heapallocsite.ll @@ -0,0 +1,111 @@ +; RUN: llc -O0 < %s | FileCheck %s +; FIXME: Add test for llc with optimizations once it is implemented. + +; Source to regenerate: +; $ clang --target=x86_64-windows-msvc -S heapallocsite.c -g -gcodeview -o t.ll \ +; -emit-llvm -O0 -Xclang -disable-llvm-passes -fms-extensions +; __declspec(allocator) char *myalloc(void); +; void f() { +; myalloc() +; } +; +; struct Foo { +; __declspec(allocator) virtual void *alloc(); +; }; +; void use_alloc(void*); +; void do_alloc(Foo *p) { +; use_alloc(p->alloc()); +; } + +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-windows-msvc" + +%struct.Foo = type { i32 (...)** } + +; Function Attrs: noinline optnone uwtable +define dso_local void @f() #0 !dbg !8 { +entry: + %call = call i8* @myalloc(), !dbg !11, !heapallocsite !2 + ret void, !dbg !12 +} + +; CHECK-LABEL: f: # @f +; CHECK: .Lheapallocsite0: +; CHECK: callq myalloc +; CHECK: .Lheapallocsite1: +; CHECK: retq + +declare dso_local i8* @myalloc() #1 + +; Function Attrs: noinline optnone uwtable +define dso_local void @do_alloc(%struct.Foo* %p) #0 !dbg !13 { +entry: + %p.addr = alloca %struct.Foo*, align 8 + store %struct.Foo* %p, %struct.Foo** %p.addr, align 8 + call void @llvm.dbg.declare(metadata %struct.Foo** %p.addr, metadata !18, metadata !DIExpression()), !dbg !19 + %0 = load %struct.Foo*, %struct.Foo** %p.addr, align 8, !dbg !20 + %1 = bitcast %struct.Foo* %0 to i8* (%struct.Foo*)***, !dbg !20 + %vtable = load i8* (%struct.Foo*)**, i8* (%struct.Foo*)*** %1, align 8, !dbg !20 + %vfn = getelementptr inbounds i8* (%struct.Foo*)*, i8* (%struct.Foo*)** %vtable, i64 0, !dbg !20 + %2 = load i8* (%struct.Foo*)*, i8* (%struct.Foo*)** %vfn, align 8, !dbg !20 + %call = call i8* %2(%struct.Foo* %0), !dbg !20, !heapallocsite !2 + call void @use_alloc(i8* %call), !dbg !20 + ret void, !dbg !21 +} + +; CHECK-LABEL: do_alloc: # @do_alloc +; CHECK: .Lheapallocsite2: +; CHECK: callq *(%rax) +; CHECK: .Lheapallocsite3: +; CHECK: retq + +; CHECK-LABEL: .short 4423# Record kind: S_GPROC32_ID +; CHECK: .short 4446# Record kind: S_HEAPALLOCSITE +; CHECK-NEXT: .secrel32 .Lheapallocsite0 +; CHECK-NEXT: .secidx .Lheapallocsite0 +; CHECK-NEXT: .short .Lheapallocsite1-.Lheapallocsite0 +; CHECK-NEXT: .long 3 +; CHECK-NEXT: .p2align 2 +; CHECK-LABEL: .short 4431# Record kind: S_PROC_ID_END + +; CHECK-LABEL: .short 4423# Record kind: S_GPROC32_ID +; CHECK: .short 4446# Record kind: S_HEAPALLOCSITE +; CHECK-NEXT: .secrel32 .Lheapallocsite2 +; CHECK-NEXT: .secidx .Lheapallocsite2 +; CHECK-NEXT: .short .Lheapallocsite3-.Lheapallocsite2 +; CHECK-NEXT: .long 3 +; CHECK-NEXT: .p2align 2 +; CHECK-LABEL: .short 4431# Record kind: S_PROC_ID_END + +; Function Attrs: nounwind readnone speculatable +declare void @llvm.dbg.declare(metadata, metadata, metadata) #2 + +declare dso_local void @use_alloc(i8*) #1 + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4, !5, !6} +!llvm.ident = !{!7} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None) +!1 = !DIFile(filename: "heapallocsite.cpp", directory: "C:\5Csrc\5Ctest", checksumkind: CSK_MD5, checksum: "6d758cfa3834154a04ce8a55102772a9") +!2 = !{} +!3 = !{i32 2, !"CodeView", i32 1} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!5 = !{i32 1, !"wchar_size", i32 2} +!6 = !{i32 7, !"PIC Level", i32 2} +!7 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)"} +!8 = distinct !DISubprogram(name: "f", scope: !1, file:
[PATCH] D61083: Recommitting r358783 and r358786 "[MS] Emit S_HEAPALLOCSITE debug info" with fixes for buildbot error (undefined assembler label).
rnk accepted this revision. rnk added a comment. This revision is now accepted and ready to land. lgtm, thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61083/new/ https://reviews.llvm.org/D61083 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D61083: Recommitting r358783 and r358786 "[MS] Emit S_HEAPALLOCSITE debug info" with fixes for buildbot error (undefined assembler label).
akhuang updated this revision to Diff 196525. akhuang added a comment. - Add test case and comment for undefined labels Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61083/new/ https://reviews.llvm.org/D61083 Files: llvm/include/llvm/CodeGen/MachineFunction.h llvm/include/llvm/CodeGen/MachineInstr.h llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h llvm/lib/CodeGen/MachineFunction.cpp llvm/lib/CodeGen/MachineInstr.cpp llvm/lib/CodeGen/SelectionDAG/FastISel.cpp llvm/lib/Target/X86/X86FastISel.cpp llvm/test/CodeGen/X86/label-heapallocsite.ll Index: llvm/test/CodeGen/X86/label-heapallocsite.ll === --- /dev/null +++ llvm/test/CodeGen/X86/label-heapallocsite.ll @@ -0,0 +1,111 @@ +; RUN: llc -O0 < %s | FileCheck %s +; FIXME: Add test for llc with optimizations once it is implemented. + +; Source to regenerate: +; $ clang --target=x86_64-windows-msvc -S heapallocsite.c -g -gcodeview -o t.ll \ +; -emit-llvm -O0 -Xclang -disable-llvm-passes -fms-extensions +; __declspec(allocator) char *myalloc(void); +; void f() { +; myalloc() +; } +; +; struct Foo { +; __declspec(allocator) virtual void *alloc(); +; }; +; void use_alloc(void*); +; void do_alloc(Foo *p) { +; use_alloc(p->alloc()); +; } + +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-windows-msvc" + +%struct.Foo = type { i32 (...)** } + +; Function Attrs: noinline optnone uwtable +define dso_local void @f() #0 !dbg !8 { +entry: + %call = call i8* @myalloc(), !dbg !11, !heapallocsite !2 + ret void, !dbg !12 +} + +; CHECK-LABEL: f: # @f +; CHECK: .Lheapallocsite0: +; CHECK: callq myalloc +; CHECK: .Lheapallocsite1: +; CHECK: retq + +declare dso_local i8* @myalloc() #1 + +; Function Attrs: noinline optnone uwtable +define dso_local void @do_alloc(%struct.Foo* %p) #0 !dbg !13 { +entry: + %p.addr = alloca %struct.Foo*, align 8 + store %struct.Foo* %p, %struct.Foo** %p.addr, align 8 + call void @llvm.dbg.declare(metadata %struct.Foo** %p.addr, metadata !18, metadata !DIExpression()), !dbg !19 + %0 = load %struct.Foo*, %struct.Foo** %p.addr, align 8, !dbg !20 + %1 = bitcast %struct.Foo* %0 to i8* (%struct.Foo*)***, !dbg !20 + %vtable = load i8* (%struct.Foo*)**, i8* (%struct.Foo*)*** %1, align 8, !dbg !20 + %vfn = getelementptr inbounds i8* (%struct.Foo*)*, i8* (%struct.Foo*)** %vtable, i64 0, !dbg !20 + %2 = load i8* (%struct.Foo*)*, i8* (%struct.Foo*)** %vfn, align 8, !dbg !20 + %call = call i8* %2(%struct.Foo* %0), !dbg !20, !heapallocsite !2 + call void @use_alloc(i8* %call), !dbg !20 + ret void, !dbg !21 +} + +; CHECK-LABEL: do_alloc: # @do_alloc +; CHECK: .Lheapallocsite2: +; CHECK: callq *(%rax) +; CHECK: .Lheapallocsite3: +; CHECK: retq + +; CHECK-LABEL: .short 4423# Record kind: S_GPROC32_ID +; CHECK: .short 4446# Record kind: S_HEAPALLOCSITE +; CHECK-NEXT: .secrel32 .Lheapallocsite0 +; CHECK-NEXT: .secidx .Lheapallocsite0 +; CHECK-NEXT: .short .Lheapallocsite1-.Lheapallocsite0 +; CHECK-NEXT: .long 3 +; CHECK-NEXT: .p2align 2 +; CHECK-LABEL: .short 4431# Record kind: S_PROC_ID_END + +; CHECK-LABEL: .short 4423# Record kind: S_GPROC32_ID +; CHECK: .short 4446# Record kind: S_HEAPALLOCSITE +; CHECK-NEXT: .secrel32 .Lheapallocsite2 +; CHECK-NEXT: .secidx .Lheapallocsite2 +; CHECK-NEXT: .short .Lheapallocsite3-.Lheapallocsite2 +; CHECK-NEXT: .long 3 +; CHECK-NEXT: .p2align 2 +; CHECK-LABEL: .short 4431# Record kind: S_PROC_ID_END + +; Function Attrs: nounwind readnone speculatable +declare void @llvm.dbg.declare(metadata, metadata, metadata) #2 + +declare dso_local void @use_alloc(i8*) #1 + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4, !5, !6} +!llvm.ident = !{!7} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None) +!1 = !DIFile(filename: "heapallocsite.cpp", directory: "C:\5Csrc\5Ctest", checksumkind: CSK_MD5, checksum: "6d758cfa3834154a04ce8a55102772a9") +!2 = !{} +!3 = !{i32 2, !"CodeView", i32 1} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!5 = !{i32 1, !"wchar_size", i32 2} +!6 = !{i32 7, !"PIC Level", i32 2} +!7 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)"} +!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !9, scopeLine: 3, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!9 = !DISubroutineType(types: !10) +!10 = !{null} +!11 = !DILocation(line: 4, scope: !8) +!12 = !DILocation(line: 5, scope: !8) +!13 = distinct !DISubprogram(name:
[PATCH] D61083: Recommitting r358783 and r358786 "[MS] Emit S_HEAPALLOCSITE debug info" with fixes for buildbot error (undefined assembler label).
rnk added inline comments. Comment at: llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp:1078 + MCSymbol *EndLabel = std::get<1>(HeapAllocSite); + if (BeginLabel->isDefined() && EndLabel->isDefined()) { +DIType *DITy = std::get<2>(HeapAllocSite); I think it's worth a comment explaining why some of these labels might not be defined. Basically, if the instruction gets replaced anywhere in the codegen pipeline, they won't be defined. Also, it would be LLVM-y to invert the condition and use `continue` to reduce indentation: https://llvm.org/docs/CodingStandards.html#use-early-exits-and-continue-to-simplify-code Comment at: llvm/lib/Target/X86/X86FastISel.cpp:3988 Result->addMemOperand(*FuncInfo.MF, createMachineMemOperandFor(LI)); + Result->cloneInstrSymbols(*FuncInfo.MF, *MI); MachineBasicBlock::iterator I(MI); Please add a new test case that fails if this line of code is removed. I think you can start from this C++ code: ``` struct Foo { __declspec(allocator) virtual void *alloc(); }; void use_alloc(void*); void do_alloc(Foo *p) { use_alloc(p->alloc()); } ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61083/new/ https://reviews.llvm.org/D61083 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D61083: Recommitting r358783 and r358786 "[MS] Emit S_HEAPALLOCSITE debug info" with fixes for buildbot error (undefined assembler label).
akhuang updated this revision to Diff 196496. akhuang added a comment. - remove added whitespace Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61083/new/ https://reviews.llvm.org/D61083 Files: llvm/include/llvm/CodeGen/MachineFunction.h llvm/include/llvm/CodeGen/MachineInstr.h llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h llvm/lib/CodeGen/MachineFunction.cpp llvm/lib/CodeGen/MachineInstr.cpp llvm/lib/CodeGen/SelectionDAG/FastISel.cpp llvm/lib/Target/X86/X86FastISel.cpp llvm/test/CodeGen/X86/label-heapallocsite.ll Index: llvm/test/CodeGen/X86/label-heapallocsite.ll === --- /dev/null +++ llvm/test/CodeGen/X86/label-heapallocsite.ll @@ -0,0 +1,57 @@ +; RUN: llc -O0 < %s | FileCheck %s +; FIXME: Add test for llc with optimizations once it is implemented. + +; Source to regenerate: +; $ clang --target=x86_64-windows-msvc -S heapallocsite.c -g -gcodeview -o t.ll \ +; -emit-llvm -O0 -Xclang -disable-llvm-passes -fms-extensions +; __declspec(allocator) char *myalloc(void); +; void foo() { +; myalloc() +; } + +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-windows-msvc" + +; Function Attrs: noinline nounwind optnone +define dso_local void @f() #0 !dbg !8 { +entry: + %call = call i8* @myalloc(), !dbg !11, !heapallocsite !2 + ret void, !dbg !12 +} + +; CHECK-LABEL: f: # @f +; CHECK: .Lheapallocsite0: +; CHECK: callq myalloc +; CHECK: .Lheapallocsite1: +; CHECK: retq + +; CHECK-LABEL: .short 4423# Record kind: S_GPROC32_ID +; CHECK: .short 4446# Record kind: S_HEAPALLOCSITE +; CHECK-NEXT: .secrel32 .Lheapallocsite0 +; CHECK-NEXT: .secidx .Lheapallocsite0 +; CHECK-NEXT: .short .Lheapallocsite1-.Lheapallocsite0 +; CHECK-NEXT: .long 3 +; CHECK-NEXT: .p2align 2 + +; CHECK-LABEL: .short 4431# Record kind: S_PROC_ID_END + +declare dso_local i8* @myalloc() #1 + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4, !5, !6} +!llvm.ident = !{!7} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None) +!1 = !DIFile(filename: "heapallocsite.c", directory: "C:\5Csrc\5Ctest", checksumkind: CSK_MD5, checksum: "6d758cfa3834154a04ce8a55102772a9") +!2 = !{} +!3 = !{i32 2, !"CodeView", i32 1} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!5 = !{i32 1, !"wchar_size", i32 2} +!6 = !{i32 7, !"PIC Level", i32 2} +!7 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)"} +!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !9, scopeLine: 3, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!9 = !DISubroutineType(types: !10) +!10 = !{null} +!11 = !DILocation(line: 4, scope: !8) +!12 = !DILocation(line: 5, scope: !8) + Index: llvm/lib/Target/X86/X86FastISel.cpp === --- llvm/lib/Target/X86/X86FastISel.cpp +++ llvm/lib/Target/X86/X86FastISel.cpp @@ -3985,6 +3985,7 @@ } Result->addMemOperand(*FuncInfo.MF, createMachineMemOperandFor(LI)); + Result->cloneInstrSymbols(*FuncInfo.MF, *MI); MachineBasicBlock::iterator I(MI); removeDeadCode(I, std::next(I)); return true; Index: llvm/lib/CodeGen/SelectionDAG/FastISel.cpp === --- llvm/lib/CodeGen/SelectionDAG/FastISel.cpp +++ llvm/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -1234,6 +1234,12 @@ if (CLI.NumResultRegs && CLI.CS) updateValueMap(CLI.CS->getInstruction(), CLI.ResultReg, CLI.NumResultRegs); + // Set labels for heapallocsite call. + if (CLI.CS && CLI.CS->getInstruction()->getMetadata("heapallocsite")) { +MDNode *MD = CLI.CS->getInstruction()->getMetadata("heapallocsite"); +MF->addCodeViewHeapAllocSite(CLI.Call, MD); + } + return true; } Index: llvm/lib/CodeGen/MachineInstr.cpp === --- llvm/lib/CodeGen/MachineInstr.cpp +++ llvm/lib/CodeGen/MachineInstr.cpp @@ -513,6 +513,19 @@ MF.createMIExtraInfo(memoperands(), getPreInstrSymbol(), Symbol)); } +void MachineInstr::cloneInstrSymbols(MachineFunction , + const MachineInstr ) { + if (this == ) +// Nothing to do for a self-clone! +return; + + assert( == MI.getMF() && + "Invalid machine functions when cloning instruction symbols!"); + + setPreInstrSymbol(MF, MI.getPreInstrSymbol()); + setPostInstrSymbol(MF, MI.getPostInstrSymbol()); +} + uint16_t MachineInstr::mergeFlagsWith(const MachineInstr ) const { // For now, the just return the union of
[PATCH] D61083: Recommitting r358783 and r358786 "[MS] Emit S_HEAPALLOCSITE debug info" with fixes for buildbot error (undefined assembler label).
akhuang created this revision. akhuang added a reviewer: rnk. Herald added subscribers: llvm-commits, cfe-commits, hiraditya, aprantl. Herald added projects: clang, LLVM. This emits labels around heapallocsite calls and S_HEAPALLOCSITE debug info in codeview. Currently only changes FastISel, so emitting labels still needs to be implemented in SelectionDAG. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D61083 Files: clang/lib/CodeGen/CGDebugInfo.cpp llvm/include/llvm/CodeGen/MachineFunction.h llvm/include/llvm/CodeGen/MachineInstr.h llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h llvm/lib/CodeGen/MachineFunction.cpp llvm/lib/CodeGen/MachineInstr.cpp llvm/lib/CodeGen/SelectionDAG/FastISel.cpp llvm/lib/Target/X86/X86FastISel.cpp llvm/test/CodeGen/X86/label-heapallocsite.ll Index: llvm/test/CodeGen/X86/label-heapallocsite.ll === --- /dev/null +++ llvm/test/CodeGen/X86/label-heapallocsite.ll @@ -0,0 +1,57 @@ +; RUN: llc -O0 < %s | FileCheck %s +; FIXME: Add test for llc with optimizations once it is implemented. + +; Source to regenerate: +; $ clang --target=x86_64-windows-msvc -S heapallocsite.c -g -gcodeview -o t.ll \ +; -emit-llvm -O0 -Xclang -disable-llvm-passes -fms-extensions +; __declspec(allocator) char *myalloc(void); +; void foo() { +; myalloc() +; } + +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-windows-msvc" + +; Function Attrs: noinline nounwind optnone +define dso_local void @f() #0 !dbg !8 { +entry: + %call = call i8* @myalloc(), !dbg !11, !heapallocsite !2 + ret void, !dbg !12 +} + +; CHECK-LABEL: f: # @f +; CHECK: .Lheapallocsite0: +; CHECK: callq myalloc +; CHECK: .Lheapallocsite1: +; CHECK: retq + +; CHECK-LABEL: .short 4423# Record kind: S_GPROC32_ID +; CHECK: .short 4446# Record kind: S_HEAPALLOCSITE +; CHECK-NEXT: .secrel32 .Lheapallocsite0 +; CHECK-NEXT: .secidx .Lheapallocsite0 +; CHECK-NEXT: .short .Lheapallocsite1-.Lheapallocsite0 +; CHECK-NEXT: .long 3 +; CHECK-NEXT: .p2align 2 + +; CHECK-LABEL: .short 4431# Record kind: S_PROC_ID_END + +declare dso_local i8* @myalloc() #1 + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4, !5, !6} +!llvm.ident = !{!7} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None) +!1 = !DIFile(filename: "heapallocsite.c", directory: "C:\5Csrc\5Ctest", checksumkind: CSK_MD5, checksum: "6d758cfa3834154a04ce8a55102772a9") +!2 = !{} +!3 = !{i32 2, !"CodeView", i32 1} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!5 = !{i32 1, !"wchar_size", i32 2} +!6 = !{i32 7, !"PIC Level", i32 2} +!7 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git 4eff3de99423a62fd6e833e29c71c1e62ba6140b)"} +!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !9, scopeLine: 3, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!9 = !DISubroutineType(types: !10) +!10 = !{null} +!11 = !DILocation(line: 4, scope: !8) +!12 = !DILocation(line: 5, scope: !8) + Index: llvm/lib/Target/X86/X86FastISel.cpp === --- llvm/lib/Target/X86/X86FastISel.cpp +++ llvm/lib/Target/X86/X86FastISel.cpp @@ -3985,6 +3985,7 @@ } Result->addMemOperand(*FuncInfo.MF, createMachineMemOperandFor(LI)); + Result->cloneInstrSymbols(*FuncInfo.MF, *MI); MachineBasicBlock::iterator I(MI); removeDeadCode(I, std::next(I)); return true; Index: llvm/lib/CodeGen/SelectionDAG/FastISel.cpp === --- llvm/lib/CodeGen/SelectionDAG/FastISel.cpp +++ llvm/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -1234,6 +1234,12 @@ if (CLI.NumResultRegs && CLI.CS) updateValueMap(CLI.CS->getInstruction(), CLI.ResultReg, CLI.NumResultRegs); + // Set labels for heapallocsite call. + if (CLI.CS && CLI.CS->getInstruction()->getMetadata("heapallocsite")) { +MDNode *MD = CLI.CS->getInstruction()->getMetadata("heapallocsite"); +MF->addCodeViewHeapAllocSite(CLI.Call, MD); + } + return true; } Index: llvm/lib/CodeGen/MachineInstr.cpp === --- llvm/lib/CodeGen/MachineInstr.cpp +++ llvm/lib/CodeGen/MachineInstr.cpp @@ -513,6 +513,19 @@ MF.createMIExtraInfo(memoperands(), getPreInstrSymbol(), Symbol)); } +void MachineInstr::cloneInstrSymbols(MachineFunction , + const MachineInstr ) { + if (this == ) +// Nothing to do for a self-clone! +return; + + assert( == MI.getMF() && + "Invalid machine functions when cloning instruction