[llvm] 4d24334 - Revert "[MemProf] Update metadata during inlining" and preceeding commit

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 30 17:03:08 PDT 2022


Author: Teresa Johnson
Date: 2022-09-30T17:01:30-07:00
New Revision: 4d243348fbcb2643ffc8006109dacce94f36c08e

URL: https://github.com/llvm/llvm-project/commit/4d243348fbcb2643ffc8006109dacce94f36c08e
DIFF: https://github.com/llvm/llvm-project/commit/4d243348fbcb2643ffc8006109dacce94f36c08e.diff

LOG: Revert "[MemProf] Update metadata during inlining" and preceeding commit

This reverts commit 0d7f3464ce0ba3a97df73e08ee0acd4e33adbe9b and
commit f9403ca41e5f3dab60cd6e5de26eea65dcab01a4. The latter was
"Profile matching and IR annotation for memprof profiles." and was left
from a bad rebase from a commit already pushed upstream.

Added: 
    

Modified: 
    llvm/include/llvm/Transforms/Utils/Cloning.h
    llvm/lib/Transforms/Utils/CloneFunction.cpp
    llvm/lib/Transforms/Utils/InlineFunction.cpp

Removed: 
    llvm/test/Transforms/Inline/memprof_inline.ll
    llvm/test/Transforms/Inline/memprof_inline2.ll


################################################################################
diff  --git a/llvm/include/llvm/Transforms/Utils/Cloning.h b/llvm/include/llvm/Transforms/Utils/Cloning.h
index 77050391746bc..72276eb9bb826 100644
--- a/llvm/include/llvm/Transforms/Utils/Cloning.h
+++ b/llvm/include/llvm/Transforms/Utils/Cloning.h
@@ -63,10 +63,6 @@ struct ClonedCodeInfo {
   /// This is set to true if the cloned code contains a normal call instruction.
   bool ContainsCalls = false;
 
-  /// This is set to true if there is memprof related metadata (memprof or
-  /// callsite metadata) in the cloned code.
-  bool ContainsMemProfMetadata = false;
-
   /// This is set to true if the cloned code contains a 'dynamic' alloca.
   /// Dynamic allocas are allocas that are either not in the entry block or they
   /// are in the entry block but are not a constant size.

diff  --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp
index 2fde87ef7b098..d20d2a2d77d0c 100644
--- a/llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp
@@ -46,7 +46,7 @@ BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB, ValueToValueMapTy &VMap,
   if (BB->hasName())
     NewBB->setName(BB->getName() + NameSuffix);
 
-  bool hasCalls = false, hasDynamicAllocas = false, hasMemProfMetadata = false;
+  bool hasCalls = false, hasDynamicAllocas = false;
   Module *TheModule = F ? F->getParent() : nullptr;
 
   // Loop over all instructions, and copy them over.
@@ -60,10 +60,7 @@ BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB, ValueToValueMapTy &VMap,
     NewBB->getInstList().push_back(NewInst);
     VMap[&I] = NewInst; // Add instruction map to value.
 
-    if (isa<CallInst>(I) && !I.isDebugOrPseudoInst()) {
-      hasCalls = true;
-      hasMemProfMetadata |= I.hasMetadata(LLVMContext::MD_memprof);
-    }
+    hasCalls |= (isa<CallInst>(I) && !I.isDebugOrPseudoInst());
     if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
       if (!AI->isStaticAlloca()) {
         hasDynamicAllocas = true;
@@ -73,7 +70,6 @@ BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB, ValueToValueMapTy &VMap,
 
   if (CodeInfo) {
     CodeInfo->ContainsCalls |= hasCalls;
-    CodeInfo->ContainsMemProfMetadata |= hasMemProfMetadata;
     CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas;
   }
   return NewBB;
@@ -475,7 +471,6 @@ void PruningFunctionCloner::CloneBlock(
   }
 
   bool hasCalls = false, hasDynamicAllocas = false, hasStaticAllocas = false;
-  bool hasMemProfMetadata = false;
 
   // Loop over all instructions, and copy them over, DCE'ing as we go.  This
   // loop doesn't include the terminator.
@@ -520,10 +515,7 @@ void PruningFunctionCloner::CloneBlock(
       NewInst->setName(II->getName() + NameSuffix);
     VMap[&*II] = NewInst; // Add instruction map to value.
     NewBB->getInstList().push_back(NewInst);
-    if (isa<CallInst>(II) && !II->isDebugOrPseudoInst()) {
-      hasCalls = true;
-      hasMemProfMetadata |= II->hasMetadata(LLVMContext::MD_memprof);
-    }
+    hasCalls |= (isa<CallInst>(II) && !II->isDebugOrPseudoInst());
 
     if (CodeInfo) {
       CodeInfo->OrigVMap[&*II] = NewInst;
@@ -597,7 +589,6 @@ void PruningFunctionCloner::CloneBlock(
 
   if (CodeInfo) {
     CodeInfo->ContainsCalls |= hasCalls;
-    CodeInfo->ContainsMemProfMetadata |= hasMemProfMetadata;
     CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas;
     CodeInfo->ContainsDynamicAllocas |=
         hasStaticAllocas && BB != &BB->getParent()->front();

diff  --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index da1ce85a54103..cf7541f5f8e35 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -27,7 +27,6 @@
 #include "llvm/Analysis/CaptureTracking.h"
 #include "llvm/Analysis/EHPersonalities.h"
 #include "llvm/Analysis/InstructionSimplify.h"
-#include "llvm/Analysis/MemoryProfileInfo.h"
 #include "llvm/Analysis/ObjCARCAnalysisUtils.h"
 #include "llvm/Analysis/ObjCARCUtil.h"
 #include "llvm/Analysis/ProfileSummaryInfo.h"
@@ -75,10 +74,7 @@
 #include <utility>
 #include <vector>
 
-#define DEBUG_TYPE "inline-function"
-
 using namespace llvm;
-using namespace llvm::memprof;
 using ProfileCount = Function::ProfileCount;
 
 static cl::opt<bool>
@@ -786,174 +782,6 @@ static void HandleInlinedEHPad(InvokeInst *II, BasicBlock *FirstNewBlock,
   UnwindDest->removePredecessor(InvokeBB);
 }
 
-static bool haveCommonPrefix(MDNode *MIBStackContext,
-                             MDNode *CallsiteStackContext) {
-  assert(MIBStackContext->getNumOperands() > 0 &&
-         CallsiteStackContext->getNumOperands() > 0);
-  // Because of the context trimming performed during matching, the callsite
-  // context could have more stack ids than the MIB. We match up to the end of
-  // the shortest stack context.
-  for (auto MIBStackIter = MIBStackContext->op_begin(),
-            CallsiteStackIter = CallsiteStackContext->op_begin();
-       MIBStackIter != MIBStackContext->op_end() &&
-       CallsiteStackIter != CallsiteStackContext->op_end();
-       MIBStackIter++, CallsiteStackIter++) {
-    auto *Val1 = mdconst::dyn_extract<ConstantInt>(*MIBStackIter);
-    auto *Val2 = mdconst::dyn_extract<ConstantInt>(*CallsiteStackIter);
-    assert(Val1 && Val2);
-    if (Val1->getZExtValue() != Val2->getZExtValue())
-      return false;
-  }
-  return true;
-}
-
-static void removeMemProfMetadata(CallBase *Call) {
-  Call->setMetadata(LLVMContext::MD_memprof, nullptr);
-}
-
-static void removeCallsiteMetadata(CallBase *Call) {
-  Call->setMetadata(LLVMContext::MD_callsite, nullptr);
-}
-
-static void updateMemprofMetadata(CallBase *CI,
-                                  const std::vector<Metadata *> &MIBList) {
-  assert(!MIBList.empty());
-  // Remove existing memprof, which will either be replaced or may not be needed
-  // if we are able to use a single allocation type function attribute.
-  removeMemProfMetadata(CI);
-  CallStackTrie CallStack;
-  for (Metadata *MIB : MIBList)
-    CallStack.addCallStack(cast<MDNode>(MIB));
-  bool MemprofMDAttached = CallStack.buildAndAttachMIBMetadata(CI);
-  assert(MemprofMDAttached == CI->hasMetadata(LLVMContext::MD_memprof));
-  if (!MemprofMDAttached)
-    // If we used a function attribute remove the callsite metadata as well.
-    removeCallsiteMetadata(CI);
-}
-
-// Update the metadata on the inlined copy ClonedCall of a call OrigCall in the
-// inlined callee body, based on the callsite metadata InlinedCallsiteMD from
-// the call that was inlined.
-static void
-propagateMemProfHelper(const CallBase *OrigCall, CallBase *ClonedCall,
-                       MDNode *InlinedCallsiteMD,
-                       std::map<const CallBase *, std::vector<Metadata *>>
-                           &OrigCallToNewMemProfMDMap) {
-  MDNode *OrigCallsiteMD = ClonedCall->getMetadata(LLVMContext::MD_callsite);
-  MDNode *ClonedCallsiteMD = nullptr;
-  // Check if the call originally had callsite metadata, and update it for the
-  // new call in the inlined body.
-  if (OrigCallsiteMD) {
-    // The cloned call's context is now the concatenation of the original call's
-    // callsite metadata and the callsite metadata on the call where it was
-    // inlined.
-    ClonedCallsiteMD = MDNode::concatenate(OrigCallsiteMD, InlinedCallsiteMD);
-    ClonedCall->setMetadata(LLVMContext::MD_callsite, ClonedCallsiteMD);
-  }
-
-  // Update any memprof metadata on the cloned call.
-  MDNode *OrigMemProfMD = ClonedCall->getMetadata(LLVMContext::MD_memprof);
-  if (!OrigMemProfMD)
-    return;
-  // We currently expect that allocations with memprof metadata also have
-  // callsite metadata for the allocation's part of the context.
-  assert(OrigCallsiteMD);
-
-  // New call's MIB list.
-  std::vector<Metadata *> NewMIBList;
-  // Updated MIB list for the original call in the out-of-line callee.
-  std::vector<Metadata *> UpdatedOrigMIBList;
-
-  // For each MIB metadata, check if its call stack context starts with the
-  // new clone's callsite metadata. If so, that MIB goes onto the cloned call in
-  // the inlined body. If not, it stays on the out-of-line original call.
-  for (auto &MIBOp : OrigMemProfMD->operands()) {
-    MDNode *MIB = dyn_cast<MDNode>(MIBOp);
-    // Stack is first operand of MIB.
-    MDNode *StackMD = getMIBStackNode(MIB);
-    assert(StackMD);
-    // See if the new cloned callsite context matches this profiled context.
-    if (haveCommonPrefix(StackMD, ClonedCallsiteMD))
-      // Add it to the cloned call's MIB list.
-      NewMIBList.push_back(MIB);
-    else
-      // Keep it on the original call.
-      UpdatedOrigMIBList.push_back(MIB);
-  }
-  if (NewMIBList.empty()) {
-    removeMemProfMetadata(ClonedCall);
-    removeCallsiteMetadata(ClonedCall);
-    return;
-  }
-  if (NewMIBList.size() < OrigMemProfMD->getNumOperands()) {
-    assert(!UpdatedOrigMIBList.empty());
-    OrigCallToNewMemProfMDMap[OrigCall] = UpdatedOrigMIBList;
-    updateMemprofMetadata(ClonedCall, NewMIBList);
-  } else
-    OrigCallToNewMemProfMDMap[OrigCall] = {};
-}
-
-// Update memprof related metadata (!memprof and !callsite) based on the
-// inlining of Callee into the callsite at CB. The updates include merging the
-// inlined callee's callsite metadata with that of the inlined call,
-// and moving the subset of any memprof contexts to the inlined callee
-// allocations if they match the new inlined call stack.
-// FIXME: Replace memprof metadata with function attribute if all MIB end up
-// having the same behavior. Do other context trimming/merging optimizations
-// too.
-static void
-propagateMemProfMetadata(Function *Callee, CallBase &CB,
-                         bool ContainsMemProfMetadata,
-                         const ValueMap<const Value *, WeakTrackingVH> &VMap) {
-  MDNode *CallsiteMD = CB.getMetadata(LLVMContext::MD_callsite);
-  // Only need to update if the inlined callsite had callsite metadata, or if
-  // there was any memprof metadata inlined.
-  if (!CallsiteMD && !ContainsMemProfMetadata)
-    return;
-
-  // Propagate metadata onto the cloned calls in the inlined callee.
-  // Can't update the original call using the VMap since it holds a const
-  // pointer, those will be updated in the subsequent loop.
-  std::map<const CallBase *, std::vector<Metadata *>> OrigCallToNewMemProfMDMap;
-  for (const auto &Entry : VMap) {
-    // See if this is a call that has been inlined and remapped, and not
-    // simplified away in the process.
-    auto *OrigCall = dyn_cast_or_null<CallBase>(Entry.first);
-    auto *ClonedCall = dyn_cast_or_null<CallBase>(Entry.second);
-    if (!OrigCall || !ClonedCall)
-      continue;
-    // If the inlined callsite did not have any callsite metadata, then it isn't
-    // involved in any profiled call contexts, and we can remove any memprof
-    // metadata on the cloned call.
-    if (!CallsiteMD) {
-      removeMemProfMetadata(ClonedCall);
-      removeCallsiteMetadata(ClonedCall);
-      continue;
-    }
-    propagateMemProfHelper(OrigCall, ClonedCall, CallsiteMD,
-                           OrigCallToNewMemProfMDMap);
-  }
-
-  // Update memprof MD on calls within the original callee function to remove
-  // MIB with stacks that matched the inlined context (those moved to a new
-  // memprof MD on the inlined version of the call).
-  for (BasicBlock &BB : *Callee) {
-    for (Instruction &I : BB) {
-      CallBase *Call = dyn_cast<CallBase>(&I);
-      if (!Call || !OrigCallToNewMemProfMDMap.count(Call))
-        continue;
-      std::vector<Metadata *> &UpdatedMemProfMD =
-          OrigCallToNewMemProfMDMap[Call];
-      if (!UpdatedMemProfMD.empty())
-        updateMemprofMetadata(Call, UpdatedMemProfMD);
-      else {
-        removeMemProfMetadata(Call);
-        removeCallsiteMetadata(Call);
-      }
-    }
-  }
-}
-
 /// When inlining a call site that has !llvm.mem.parallel_loop_access,
 /// !llvm.access.group, !alias.scope or !noalias metadata, that metadata should
 /// be propagated to all memory-accessing cloned instructions.
@@ -2263,9 +2091,6 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI,
     // function which feed into its return value.
     AddReturnAttributes(CB, VMap);
 
-    propagateMemProfMetadata(CalledFunc, CB,
-                             InlinedFunctionInfo.ContainsMemProfMetadata, VMap);
-
     // Propagate metadata on the callsite if necessary.
     PropagateCallSiteMetadata(CB, FirstNewBlock, Caller->end());
 

diff  --git a/llvm/test/Transforms/Inline/memprof_inline.ll b/llvm/test/Transforms/Inline/memprof_inline.ll
deleted file mode 100644
index 840136763795e..0000000000000
--- a/llvm/test/Transforms/Inline/memprof_inline.ll
+++ /dev/null
@@ -1,228 +0,0 @@
-;; Test for memprof metadata propagation, ensuring metadata is simplified
-;; to function attributes appropriately after inlining profiled call chains.
-;;
-;; The following code was used to generate the following IR and its memprof
-;; profile:
-;;
-;; #include <stdlib.h>
-;; #include <string.h>
-;; #include <unistd.h>
-;; char *foo() {
-;;   return new char[10];
-;; }
-;; char *foo2() {
-;;   return foo();
-;; }
-;; int main(int argc, char **argv) {
-;;   char *c = foo();
-;;   char *d = foo();
-;;   char *e = foo2();
-;;   memset(c, 0, 10);
-;;   memset(d, 0, 10);
-;;   memset(e, 0, 10);
-;;   delete[] c;
-;;   sleep(200);
-;;   delete[] d;
-;;   delete[] e;
-;;   return 0;
-;; }
-
-
-; RUN: opt -inline %s -S | FileCheck %s
-
-; ModuleID = 'memprof_inline.cc'
-source_filename = "memprof_inline.cc"
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-; Function Attrs: mustprogress uwtable
-; CHECK-LABEL: define dso_local noundef i8* @_Z3foov
-define dso_local noundef i8* @_Z3foov() #0 !dbg !39 {
-entry:
-  ; CHECK: call {{.*}} @_Znam
-  ; CHECK-NOT: !memprof
-  ; CHECK-NOT: !callsite
-  %call = call noalias noundef nonnull i8* @_Znam(i64 noundef 10) #6, !dbg !42, !memprof !43, !callsite !50
-  ; CHECK-NEXT: ret
-  ret i8* %call, !dbg !51
-}
-
-; Function Attrs: nobuiltin allocsize(0)
-declare noundef nonnull i8* @_Znam(i64 noundef) #1
-
-; Function Attrs: mustprogress uwtable
-; CHECK-LABEL: define dso_local noundef i8* @_Z4foo2v
-define dso_local noundef i8* @_Z4foo2v() #0 !dbg !52 {
-entry:
-  ; CHECK: call {{.*}} @_Znam{{.*}} #[[COLD:[0-9]+]]
-  %call = call noundef i8* @_Z3foov(), !dbg !53, !callsite !54
-  ret i8* %call, !dbg !55
-}
-
-; Function Attrs: mustprogress norecurse uwtable
-; CHECK-LABEL: define dso_local noundef i32 @main
-define dso_local noundef i32 @main(i32 noundef %argc, i8** noundef %argv) #2 !dbg !56 {
-entry:
-  %retval = alloca i32, align 4
-  %argc.addr = alloca i32, align 4
-  %argv.addr = alloca i8**, align 8
-  %c = alloca i8*, align 8
-  %d = alloca i8*, align 8
-  %e = alloca i8*, align 8
-  store i32 0, i32* %retval, align 4
-  store i32 %argc, i32* %argc.addr, align 4
-  store i8** %argv, i8*** %argv.addr, align 8
-  ; CHECK: call {{.*}} @_Znam{{.*}} #[[NOTCOLD:[0-9]+]]
-  %call = call noundef i8* @_Z3foov(), !dbg !57, !callsite !58
-  store i8* %call, i8** %c, align 8, !dbg !59
-  ; CHECK: call {{.*}} @_Znam{{.*}} #[[COLD]]
-  %call1 = call noundef i8* @_Z3foov(), !dbg !60, !callsite !61
-  store i8* %call1, i8** %d, align 8, !dbg !62
-  ; CHECK: call {{.*}} @_Znam{{.*}} #[[COLD]]
-  %call2 = call noundef i8* @_Z4foo2v(), !dbg !63, !callsite !64
-  store i8* %call2, i8** %e, align 8, !dbg !65
-  %0 = load i8*, i8** %c, align 8, !dbg !66
-  call void @llvm.memset.p0i8.i64(i8* align 1 %0, i8 0, i64 10, i1 false), !dbg !67
-  %1 = load i8*, i8** %d, align 8, !dbg !68
-  call void @llvm.memset.p0i8.i64(i8* align 1 %1, i8 0, i64 10, i1 false), !dbg !69
-  %2 = load i8*, i8** %e, align 8, !dbg !70
-  call void @llvm.memset.p0i8.i64(i8* align 1 %2, i8 0, i64 10, i1 false), !dbg !71
-  %3 = load i8*, i8** %c, align 8, !dbg !72
-  %isnull = icmp eq i8* %3, null, !dbg !73
-  br i1 %isnull, label %delete.end, label %delete.notnull, !dbg !73
-
-delete.notnull:                                   ; preds = %entry
-  call void @_ZdaPv(i8* noundef %3) #7, !dbg !74
-  br label %delete.end, !dbg !74
-
-delete.end:                                       ; preds = %delete.notnull, %entry
-  %call4 = call i32 @sleep(i32 noundef 200), !dbg !76
-  %4 = load i8*, i8** %d, align 8, !dbg !77
-  %isnull5 = icmp eq i8* %4, null, !dbg !78
-  br i1 %isnull5, label %delete.end7, label %delete.notnull6, !dbg !78
-
-delete.notnull6:                                  ; preds = %delete.end
-  call void @_ZdaPv(i8* noundef %4) #7, !dbg !79
-  br label %delete.end7, !dbg !79
-
-delete.end7:                                      ; preds = %delete.notnull6, %delete.end
-  %5 = load i8*, i8** %e, align 8, !dbg !80
-  %isnull8 = icmp eq i8* %5, null, !dbg !81
-  br i1 %isnull8, label %delete.end10, label %delete.notnull9, !dbg !81
-
-delete.notnull9:                                  ; preds = %delete.end7
-  call void @_ZdaPv(i8* noundef %5) #7, !dbg !82
-  br label %delete.end10, !dbg !82
-
-delete.end10:                                     ; preds = %delete.notnull9, %delete.end7
-  ret i32 0, !dbg !83
-}
-
-; Function Attrs: argmemonly nofree nounwind willreturn writeonly
-declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #3
-
-; Function Attrs: nobuiltin nounwind
-declare void @_ZdaPv(i8* noundef) #4
-
-declare i32 @sleep(i32 noundef) #5
-
-; CHECK: attributes #[[COLD]] = { builtin allocsize(0) "memprof"="cold" }
-; CHECK: attributes #[[NOTCOLD]] = { builtin allocsize(0) "memprof"="notcold" }
-
-attributes #0 = { mustprogress uwtable "disable-tail-calls"="true" "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #1 = { nobuiltin allocsize(0) "disable-tail-calls"="true" "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #2 = { mustprogress norecurse uwtable "disable-tail-calls"="true" "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #3 = { argmemonly nofree nounwind willreturn writeonly }
-attributes #4 = { nobuiltin nounwind "disable-tail-calls"="true" "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #5 = { "disable-tail-calls"="true" "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #6 = { builtin allocsize(0) }
-attributes #7 = { builtin nounwind }
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!2, !3, !4, !5, !6, !7, !8, !9}
-!llvm.ident = !{!38}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 15.0.0 (https://github.com/llvm/llvm-project.git e09c924f98ec157adeaa74819b0aec9a07a1b552)", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, splitDebugInlining: false, debugInfoForProfiling: true, nameTableKind: None)
-!1 = !DIFile(filename: "memprof_inline.cc", directory: "/usr/local/google/home/tejohnson/llvm/tmp", checksumkind: CSK_MD5, checksum: "8711f6fd269e6cb5611fef48bc906eab")
-!2 = !{i32 7, !"Dwarf Version", i32 5}
-!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = !{i32 1, !"wchar_size", i32 4}
-!5 = !{i32 7, !"PIC Level", i32 2}
-!6 = !{i32 7, !"PIE Level", i32 2}
-!7 = !{i32 7, !"uwtable", i32 2}
-!8 = !{i32 7, !"frame-pointer", i32 2}
-!9 = !{i32 1, !"ProfileSummary", !10}
-!10 = !{!11, !12, !13, !14, !15, !16, !17, !18, !19, !20}
-!11 = !{!"ProfileFormat", !"InstrProf"}
-!12 = !{!"TotalCount", i64 0}
-!13 = !{!"MaxCount", i64 0}
-!14 = !{!"MaxInternalCount", i64 0}
-!15 = !{!"MaxFunctionCount", i64 0}
-!16 = !{!"NumCounts", i64 0}
-!17 = !{!"NumFunctions", i64 0}
-!18 = !{!"IsPartialProfile", i64 0}
-!19 = !{!"PartialProfileRatio", double 0.000000e+00}
-!20 = !{!"DetailedSummary", !21}
-!21 = !{!22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37}
-!22 = !{i32 10000, i64 0, i32 0}
-!23 = !{i32 100000, i64 0, i32 0}
-!24 = !{i32 200000, i64 0, i32 0}
-!25 = !{i32 300000, i64 0, i32 0}
-!26 = !{i32 400000, i64 0, i32 0}
-!27 = !{i32 500000, i64 0, i32 0}
-!28 = !{i32 600000, i64 0, i32 0}
-!29 = !{i32 700000, i64 0, i32 0}
-!30 = !{i32 800000, i64 0, i32 0}
-!31 = !{i32 900000, i64 0, i32 0}
-!32 = !{i32 950000, i64 0, i32 0}
-!33 = !{i32 990000, i64 0, i32 0}
-!34 = !{i32 999000, i64 0, i32 0}
-!35 = !{i32 999900, i64 0, i32 0}
-!36 = !{i32 999990, i64 0, i32 0}
-!37 = !{i32 999999, i64 0, i32 0}
-!38 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git e09c924f98ec157adeaa74819b0aec9a07a1b552)"}
-!39 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 4, type: !40, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!40 = !DISubroutineType(types: !41)
-!41 = !{}
-!42 = !DILocation(line: 5, column: 10, scope: !39)
-!43 = !{!44, !46, !48}
-!44 = !{!45, !"cold"}
-!45 = !{i64 -2458008693472584243, i64 7394638144382192936}
-!46 = !{!47, !"noncold"}
-!47 = !{i64 -2458008693472584243, i64 -8908997186479157179}
-!48 = !{!49, !"cold"}
-!49 = !{i64 -2458008693472584243, i64 -8079659623765193173}
-!50 = !{i64 -2458008693472584243}
-!51 = !DILocation(line: 5, column: 3, scope: !39)
-!52 = distinct !DISubprogram(name: "foo2", linkageName: "_Z4foo2v", scope: !1, file: !1, line: 7, type: !40, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!53 = !DILocation(line: 8, column: 10, scope: !52)
-!54 = !{i64 -8079659623765193173}
-!55 = !DILocation(line: 8, column: 3, scope: !52)
-!56 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 16, type: !40, scopeLine: 16, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!57 = !DILocation(line: 17, column: 13, scope: !56)
-!58 = !{i64 -8908997186479157179}
-!59 = !DILocation(line: 17, column: 9, scope: !56)
-!60 = !DILocation(line: 18, column: 13, scope: !56)
-!61 = !{i64 7394638144382192936}
-!62 = !DILocation(line: 18, column: 9, scope: !56)
-!63 = !DILocation(line: 19, column: 13, scope: !56)
-!64 = !{i64 -5510257407004945023}
-!65 = !DILocation(line: 19, column: 9, scope: !56)
-!66 = !DILocation(line: 21, column: 10, scope: !56)
-!67 = !DILocation(line: 21, column: 3, scope: !56)
-!68 = !DILocation(line: 22, column: 10, scope: !56)
-!69 = !DILocation(line: 22, column: 3, scope: !56)
-!70 = !DILocation(line: 23, column: 10, scope: !56)
-!71 = !DILocation(line: 23, column: 3, scope: !56)
-!72 = !DILocation(line: 25, column: 12, scope: !56)
-!73 = !DILocation(line: 25, column: 3, scope: !56)
-!74 = !DILocation(line: 25, column: 3, scope: !75)
-!75 = !DILexicalBlockFile(scope: !56, file: !1, discriminator: 2)
-!76 = !DILocation(line: 26, column: 3, scope: !56)
-!77 = !DILocation(line: 27, column: 12, scope: !56)
-!78 = !DILocation(line: 27, column: 3, scope: !56)
-!79 = !DILocation(line: 27, column: 3, scope: !75)
-!80 = !DILocation(line: 28, column: 12, scope: !56)
-!81 = !DILocation(line: 28, column: 3, scope: !56)
-!82 = !DILocation(line: 28, column: 3, scope: !75)
-!83 = !DILocation(line: 30, column: 3, scope: !56)

diff  --git a/llvm/test/Transforms/Inline/memprof_inline2.ll b/llvm/test/Transforms/Inline/memprof_inline2.ll
deleted file mode 100644
index 14c4a21251af2..0000000000000
--- a/llvm/test/Transforms/Inline/memprof_inline2.ll
+++ /dev/null
@@ -1,316 +0,0 @@
-;; Test for memprof metadata propagation, ensuring metadata is moved to
-;; inlined callsites.
-;; Also check that callsite metadata was updated with inlined stack ids.
-;;
-;; The following code was used to generate the following IR and its memprof
-;; profile:
-;;
-;; #include <stdlib.h>
-;; #include <string.h>
-;; #include <unistd.h>
-;; char *foo() {
-;;   return new char[10];
-;; }
-;; char *foo2() __attribute((noinline)) {
-;;   return foo();
-;; }
-;; char *bar() {
-;;   return foo2();
-;; }
-;; char *baz() {
-;;   return foo2();
-;; }
-;; int main(int argc, char **argv) {
-;;   char *c = foo();
-;;   char *d = foo();
-;;   char *e = bar();
-;;   char *f = baz();
-;;   memset(c, 0, 10);
-;;   memset(d, 0, 10);
-;;   memset(e, 0, 10);
-;;   memset(f, 0, 10);
-;;   delete[] c;
-;;   sleep(200);
-;;   delete[] d;
-;;   delete[] e;
-;;   delete[] f;
-;;   return 0;
-;; }
-
-; RUN: opt -inline %s -S | FileCheck %s
-
-; ModuleID = 'memprof_inline2.cc'
-source_filename = "memprof_inline2.cc"
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-; Function Attrs: mustprogress uwtable
-; CHECK-LABEL: define dso_local noundef i8* @_Z3foov
-define dso_local noundef i8* @_Z3foov() #0 !dbg !39 {
-entry:
-  ;; We should still have memprof/callsite metadata for the non-inlined calls
-  ;; from main, but should have removed those from the inlined call in_Z4foo2v.
-  ;; CHECK: call {{.*}} @_Znam{{.*}} !memprof ![[ORIGMEMPROF:[0-9]+]]
-  %call = call noalias noundef nonnull i8* @_Znam(i64 noundef 10) #7, !dbg !42, !memprof !43, !callsite !52
-  ret i8* %call, !dbg !53
-}
-
-; Function Attrs: nobuiltin allocsize(0)
-declare noundef nonnull i8* @_Znam(i64 noundef) #1
-
-;; Mark noinline so we don't inline into calls from bar and baz. We should end
-;; up with a memprof metadata on the call to foo below.
-; Function Attrs: mustprogress noinline uwtable
-; CHECK-LABEL: define dso_local noundef i8* @_Z4foo2v
-define dso_local noundef i8* @_Z4foo2v() #2 !dbg !54 {
-entry:
-  ;; We should have memprof metadata for the call stacks from bar and baz,
-  ;; and the callsite metadata should be the concatentation of the id from the
-  ;; inlined call to new and the original callsite.
-  ; CHECK: call {{.*}} @_Znam{{.*}} !memprof ![[NEWMEMPROF:[0-9]+]], !callsite ![[NEWCALLSITE:[0-9]+]]
-  %call = call noundef i8* @_Z3foov(), !dbg !55, !callsite !56
-  ret i8* %call, !dbg !57
-}
-
-; Function Attrs: mustprogress uwtable
-define dso_local noundef i8* @_Z3barv() #0 !dbg !58 {
-entry:
-  %call = call noundef i8* @_Z4foo2v(), !dbg !59, !callsite !60
-  ret i8* %call, !dbg !61
-}
-
-; Function Attrs: mustprogress uwtable
-define dso_local noundef i8* @_Z3bazv() #0 !dbg !62 {
-entry:
-  %call = call noundef i8* @_Z4foo2v(), !dbg !63, !callsite !64
-  ret i8* %call, !dbg !65
-}
-
-;; Make sure we don't propagate any memprof/callsite metadata
-; Function Attrs: mustprogress uwtable
-; CHECK-LABEL: define dso_local noundef i8* @notprofiled
-define dso_local noundef i8* @notprofiled() #0 !dbg !66 {
-entry:
-  ; CHECK: call {{.*}} @_Znam
-  ; CHECK-NOT: !memprof
-  ; CHECK-NOT: !callsite
-  %call = call noundef i8* @_Z3foov(), !dbg !67
-  ; CHECK-NEXT: ret
-  ret i8* %call, !dbg !68
-}
-
-; Function Attrs: mustprogress noinline norecurse optnone uwtable
-define dso_local noundef i32 @main(i32 noundef %argc, i8** noundef %argv) #3 !dbg !69 {
-entry:
-  %retval = alloca i32, align 4
-  %argc.addr = alloca i32, align 4
-  %argv.addr = alloca i8**, align 8
-  %c = alloca i8*, align 8
-  %d = alloca i8*, align 8
-  %e = alloca i8*, align 8
-  %f = alloca i8*, align 8
-  store i32 0, i32* %retval, align 4
-  store i32 %argc, i32* %argc.addr, align 4
-  store i8** %argv, i8*** %argv.addr, align 8
-  ;; The below 4 callsites are all annotated as noinline
-  %call = call noundef i8* @_Z3foov() #8, !dbg !70, !callsite !71
-  store i8* %call, i8** %c, align 8, !dbg !72
-  %call1 = call noundef i8* @_Z3foov() #8, !dbg !73, !callsite !74
-  store i8* %call1, i8** %d, align 8, !dbg !75
-  %call2 = call noundef i8* @_Z3barv() #8, !dbg !76, !callsite !77
-  store i8* %call2, i8** %e, align 8, !dbg !78
-  %call3 = call noundef i8* @_Z3bazv() #8, !dbg !79, !callsite !80
-  store i8* %call3, i8** %f, align 8, !dbg !81
-  %0 = load i8*, i8** %c, align 8, !dbg !82
-  call void @llvm.memset.p0i8.i64(i8* align 1 %0, i8 0, i64 10, i1 false), !dbg !83
-  %1 = load i8*, i8** %d, align 8, !dbg !84
-  call void @llvm.memset.p0i8.i64(i8* align 1 %1, i8 0, i64 10, i1 false), !dbg !85
-  %2 = load i8*, i8** %e, align 8, !dbg !86
-  call void @llvm.memset.p0i8.i64(i8* align 1 %2, i8 0, i64 10, i1 false), !dbg !87
-  %3 = load i8*, i8** %f, align 8, !dbg !88
-  call void @llvm.memset.p0i8.i64(i8* align 1 %3, i8 0, i64 10, i1 false), !dbg !89
-  %4 = load i8*, i8** %c, align 8, !dbg !90
-  %isnull = icmp eq i8* %4, null, !dbg !91
-  br i1 %isnull, label %delete.end, label %delete.notnull, !dbg !91
-
-delete.notnull:                                   ; preds = %entry
-  call void @_ZdaPv(i8* noundef %4) #9, !dbg !92
-  br label %delete.end, !dbg !92
-
-delete.end:                                       ; preds = %delete.notnull, %entry
-  %call4 = call i32 @sleep(i32 noundef 200), !dbg !94
-  %5 = load i8*, i8** %d, align 8, !dbg !95
-  %isnull5 = icmp eq i8* %5, null, !dbg !96
-  br i1 %isnull5, label %delete.end7, label %delete.notnull6, !dbg !96
-
-delete.notnull6:                                  ; preds = %delete.end
-  call void @_ZdaPv(i8* noundef %5) #9, !dbg !97
-  br label %delete.end7, !dbg !97
-
-delete.end7:                                      ; preds = %delete.notnull6, %delete.end
-  %6 = load i8*, i8** %e, align 8, !dbg !98
-  %isnull8 = icmp eq i8* %6, null, !dbg !99
-  br i1 %isnull8, label %delete.end10, label %delete.notnull9, !dbg !99
-
-delete.notnull9:                                  ; preds = %delete.end7
-  call void @_ZdaPv(i8* noundef %6) #9, !dbg !100
-  br label %delete.end10, !dbg !100
-
-delete.end10:                                     ; preds = %delete.notnull9, %delete.end7
-  %7 = load i8*, i8** %f, align 8, !dbg !101
-  %isnull11 = icmp eq i8* %7, null, !dbg !102
-  br i1 %isnull11, label %delete.end13, label %delete.notnull12, !dbg !102
-
-delete.notnull12:                                 ; preds = %delete.end10
-  call void @_ZdaPv(i8* noundef %7) #9, !dbg !103
-  br label %delete.end13, !dbg !103
-
-delete.end13:                                     ; preds = %delete.notnull12, %delete.end10
-  ret i32 0, !dbg !104
-}
-
-; Function Attrs: argmemonly nofree nounwind willreturn writeonly
-declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #4
-
-; Function Attrs: nobuiltin nounwind
-declare void @_ZdaPv(i8* noundef) #5
-
-declare i32 @sleep(i32 noundef) #6
-
-attributes #0 = { mustprogress uwtable "disable-tail-calls"="true" "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #1 = { nobuiltin allocsize(0) "disable-tail-calls"="true" "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #2 = { mustprogress noinline uwtable "disable-tail-calls"="true" "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #3 = { mustprogress noinline norecurse optnone uwtable "disable-tail-calls"="true" "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #4 = { argmemonly nofree nounwind willreturn writeonly }
-attributes #5 = { nobuiltin nounwind "disable-tail-calls"="true" "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #6 = { "disable-tail-calls"="true" "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #7 = { builtin allocsize(0) }
-attributes #8 = { noinline }
-attributes #9 = { builtin nounwind }
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!2, !3, !4, !5, !6, !7, !8, !9}
-!llvm.ident = !{!38}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 15.0.0 (https://github.com/llvm/llvm-project.git e09c924f98ec157adeaa74819b0aec9a07a1b552)", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, splitDebugInlining: false, debugInfoForProfiling: true, nameTableKind: None)
-!1 = !DIFile(filename: "memprof_inline.cc", directory: "/usr/local/google/home/tejohnson/llvm/tmp", checksumkind: CSK_MD5, checksum: "8711f6fd269e6cb5611fef48bc906eab")
-!2 = !{i32 7, !"Dwarf Version", i32 5}
-!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = !{i32 1, !"wchar_size", i32 4}
-!5 = !{i32 7, !"PIC Level", i32 2}
-!6 = !{i32 7, !"PIE Level", i32 2}
-!7 = !{i32 7, !"uwtable", i32 2}
-!8 = !{i32 7, !"frame-pointer", i32 2}
-!9 = !{i32 1, !"ProfileSummary", !10}
-!10 = !{!11, !12, !13, !14, !15, !16, !17, !18, !19, !20}
-!11 = !{!"ProfileFormat", !"InstrProf"}
-!12 = !{!"TotalCount", i64 0}
-!13 = !{!"MaxCount", i64 0}
-!14 = !{!"MaxInternalCount", i64 0}
-!15 = !{!"MaxFunctionCount", i64 0}
-!16 = !{!"NumCounts", i64 0}
-!17 = !{!"NumFunctions", i64 0}
-!18 = !{!"IsPartialProfile", i64 0}
-!19 = !{!"PartialProfileRatio", double 0.000000e+00}
-!20 = !{!"DetailedSummary", !21}
-!21 = !{!22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37}
-!22 = !{i32 10000, i64 0, i32 0}
-!23 = !{i32 100000, i64 0, i32 0}
-!24 = !{i32 200000, i64 0, i32 0}
-!25 = !{i32 300000, i64 0, i32 0}
-!26 = !{i32 400000, i64 0, i32 0}
-!27 = !{i32 500000, i64 0, i32 0}
-!28 = !{i32 600000, i64 0, i32 0}
-!29 = !{i32 700000, i64 0, i32 0}
-!30 = !{i32 800000, i64 0, i32 0}
-!31 = !{i32 900000, i64 0, i32 0}
-!32 = !{i32 950000, i64 0, i32 0}
-!33 = !{i32 990000, i64 0, i32 0}
-!34 = !{i32 999000, i64 0, i32 0}
-!35 = !{i32 999900, i64 0, i32 0}
-!36 = !{i32 999990, i64 0, i32 0}
-!37 = !{i32 999999, i64 0, i32 0}
-!38 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git e09c924f98ec157adeaa74819b0aec9a07a1b552)"}
-!39 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 4, type: !40, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!40 = !DISubroutineType(types: !41)
-!41 = !{}
-!42 = !DILocation(line: 5, column: 10, scope: !39)
-;; The first 2 are from the direct calls to foo from main. Those stay on the
-;; callsite in foo, which isn't inlined into main due to the callsites in main
-;; being annotated as noinline.
-;; The second 2 are from the calls from foo2, which inlines its callsite to foo
-;; but is not itself inlined into its callers. Therefore they get moved to a
-;; new memprof metadata within foo2.
-!43 = !{!44, !46, !48, !50}
-!44 = !{!45, !"cold"}
-!45 = !{i64 -2458008693472584243, i64 7394638144382192936}
-!46 = !{!47, !"noncold"}
-!47 = !{i64 -2458008693472584243, i64 -8908997186479157179}
-!48 = !{!49, !"noncold"}
-!49 = !{i64 -2458008693472584243, i64 -8079659623765193173, i64 -4805294506621015872}
-!50 = !{!51, !"cold"}
-!51 = !{i64 -2458008693472584243, i64 -8079659623765193173, i64 -972865200055133905}
-; CHECK: ![[ORIGMEMPROF]] = !{![[ORIGMIB1:[0-9]+]], ![[ORIGMIB2:[0-9]+]]}
-; CHECK: ![[ORIGMIB1]] = !{![[ORIGMIBSTACK1:[0-9]+]], !"cold"}
-; CHECK: ![[ORIGMIBSTACK1]] = !{i64 -2458008693472584243, i64 7394638144382192936}
-; CHECK: ![[ORIGMIB2]] = !{![[ORIGMIBSTACK2:[0-9]+]], !"notcold"}
-; CHECK: ![[ORIGMIBSTACK2]] = !{i64 -2458008693472584243, i64 -8908997186479157179}
-; CHECK: ![[NEWMEMPROF]] = !{![[NEWMIB1:[0-9]+]], ![[NEWMIB2:[0-9]+]]}
-; CHECK: ![[NEWMIB1]] = !{![[NEWMIBSTACK1:[0-9]+]], !"notcold"}
-; CHECK: ![[NEWMIBSTACK1]] = !{i64 -2458008693472584243, i64 -8079659623765193173, i64 -4805294506621015872}
-; CHECK: ![[NEWMIB2]] = !{![[NEWMIBSTACK2:[0-9]+]], !"cold"}
-; CHECK: ![[NEWMIBSTACK2]] = !{i64 -2458008693472584243, i64 -8079659623765193173, i64 -972865200055133905}
-; CHECK: ![[NEWCALLSITE]] = !{i64 -2458008693472584243, i64 -8079659623765193173}
-!52 = !{i64 -2458008693472584243}
-!53 = !DILocation(line: 5, column: 3, scope: !39)
-!54 = distinct !DISubprogram(name: "foo2", linkageName: "_Z4foo2v", scope: !1, file: !1, line: 7, type: !40, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!55 = !DILocation(line: 8, column: 10, scope: !54)
-!56 = !{i64 -8079659623765193173}
-!57 = !DILocation(line: 8, column: 3, scope: !54)
-!58 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !1, file: !1, line: 10, type: !40, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!59 = !DILocation(line: 11, column: 10, scope: !58)
-!60 = !{i64 -972865200055133905}
-!61 = !DILocation(line: 11, column: 3, scope: !58)
-!62 = distinct !DISubprogram(name: "baz", linkageName: "_Z3bazv", scope: !1, file: !1, line: 13, type: !40, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!63 = !DILocation(line: 14, column: 10, scope: !62)
-!64 = !{i64 -4805294506621015872}
-!65 = !DILocation(line: 14, column: 3, scope: !62)
-!66 = distinct !DISubprogram(name: "notprofiled", linkageName: "notprofiled", scope: !1, file: !1, line: 400, type: !40, scopeLine: 400, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!67 = !DILocation(line: 401, column: 10, scope: !66)
-!68 = !DILocation(line: 401, column: 3, scope: !66)
-!69 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 16, type: !40, scopeLine: 16, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !41)
-!70 = !DILocation(line: 17, column: 13, scope: !69)
-!71 = !{i64 -8908997186479157179}
-!72 = !DILocation(line: 17, column: 9, scope: !69)
-!73 = !DILocation(line: 18, column: 13, scope: !69)
-!74 = !{i64 7394638144382192936}
-!75 = !DILocation(line: 18, column: 9, scope: !69)
-!76 = !DILocation(line: 19, column: 13, scope: !69)
-!77 = !{i64 -5510257407004945023}
-!78 = !DILocation(line: 19, column: 9, scope: !69)
-!79 = !DILocation(line: 20, column: 13, scope: !69)
-!80 = !{i64 8771588133652501463}
-!81 = !DILocation(line: 20, column: 9, scope: !69)
-!82 = !DILocation(line: 21, column: 10, scope: !69)
-!83 = !DILocation(line: 21, column: 3, scope: !69)
-!84 = !DILocation(line: 22, column: 10, scope: !69)
-!85 = !DILocation(line: 22, column: 3, scope: !69)
-!86 = !DILocation(line: 23, column: 10, scope: !69)
-!87 = !DILocation(line: 23, column: 3, scope: !69)
-!88 = !DILocation(line: 24, column: 10, scope: !69)
-!89 = !DILocation(line: 24, column: 3, scope: !69)
-!90 = !DILocation(line: 25, column: 12, scope: !69)
-!91 = !DILocation(line: 25, column: 3, scope: !69)
-!92 = !DILocation(line: 25, column: 3, scope: !93)
-!93 = !DILexicalBlockFile(scope: !69, file: !1, discriminator: 2)
-!94 = !DILocation(line: 26, column: 3, scope: !69)
-!95 = !DILocation(line: 27, column: 12, scope: !69)
-!96 = !DILocation(line: 27, column: 3, scope: !69)
-!97 = !DILocation(line: 27, column: 3, scope: !93)
-!98 = !DILocation(line: 28, column: 12, scope: !69)
-!99 = !DILocation(line: 28, column: 3, scope: !69)
-!100 = !DILocation(line: 28, column: 3, scope: !93)
-!101 = !DILocation(line: 29, column: 12, scope: !69)
-!102 = !DILocation(line: 29, column: 3, scope: !69)
-!103 = !DILocation(line: 29, column: 3, scope: !93)
-!104 = !DILocation(line: 30, column: 3, scope: !69)


        


More information about the llvm-commits mailing list