[llvm] 90242ca - Revert "[CodeGen] emit CG profile for COFF object file"

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 22 13:47:47 PDT 2020


Author: Reid Kleckner
Date: 2020-09-22T13:47:39-07:00
New Revision: 90242caca2074dab5a9b76e5bc36d9fafd2179a7

URL: https://github.com/llvm/llvm-project/commit/90242caca2074dab5a9b76e5bc36d9fafd2179a7
DIFF: https://github.com/llvm/llvm-project/commit/90242caca2074dab5a9b76e5bc36d9fafd2179a7.diff

LOG: Revert "[CodeGen] emit CG profile for COFF object file"

This reverts commit 91aed9bf975f1e4346cc8f4bdefc98436386ced2, it is
causing link errors.

Added: 
    

Modified: 
    llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
    llvm/include/llvm/Target/TargetLoweringObjectFile.h
    llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
    llvm/lib/Target/TargetLoweringObjectFile.cpp

Removed: 
    llvm/test/MC/COFF/cgprofile.ll


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
index 4f3e1ddc76bf..57cead3dde6c 100644
--- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -35,6 +35,7 @@ class TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
 protected:
   MCSymbolRefExpr::VariantKind PLTRelativeVariantKind =
       MCSymbolRefExpr::VK_None;
+  const TargetMachine *TM = nullptr;
 
 public:
   TargetLoweringObjectFileELF() = default;

diff  --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
index 0c8f6835c67a..793e45c5b925 100644
--- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
@@ -61,8 +61,6 @@ class TargetLoweringObjectFile : public MCObjectFileInfo {
   /// This section contains the static destructor pointer list.
   MCSection *StaticDtorSection = nullptr;
 
-  const TargetMachine *TM = nullptr;
-
 public:
   TargetLoweringObjectFile() = default;
   TargetLoweringObjectFile(const TargetLoweringObjectFile &) = delete;
@@ -83,9 +81,6 @@ class TargetLoweringObjectFile : public MCObjectFileInfo {
   /// Emit the module-level metadata that the platform cares about.
   virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {}
 
-  /// Emit Call Graph Profile metadata.
-  virtual void emitCGProfile(MCStreamer &Streamer, Module &M) const;
-
   /// Get the module-level metadata that the platform cares about.
   virtual void getModuleMetadata(Module &M) {}
 

diff  --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 0c43ec842371..83014da0a41f 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -107,6 +107,7 @@ static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags,
 void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
                                              const TargetMachine &TgtM) {
   TargetLoweringObjectFile::Initialize(Ctx, TgtM);
+  TM = &TgtM;
 
   CodeModel::Model CM = TgtM.getCodeModel();
   InitializeELF(TgtM.Options.UseInitArray);
@@ -323,7 +324,46 @@ void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
     Streamer.AddBlankLine();
   }
 
-  emitCGProfile(Streamer, M);
+  SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
+  M.getModuleFlagsMetadata(ModuleFlags);
+
+  MDNode *CFGProfile = nullptr;
+
+  for (const auto &MFE : ModuleFlags) {
+    StringRef Key = MFE.Key->getString();
+    if (Key == "CG Profile") {
+      CFGProfile = cast<MDNode>(MFE.Val);
+      break;
+    }
+  }
+
+  if (!CFGProfile)
+    return;
+
+  auto GetSym = [this](const MDOperand &MDO) -> MCSymbol * {
+    if (!MDO)
+      return nullptr;
+    auto V = cast<ValueAsMetadata>(MDO);
+    const Function *F = cast<Function>(V->getValue());
+    return TM->getSymbol(F);
+  };
+
+  for (const auto &Edge : CFGProfile->operands()) {
+    MDNode *E = cast<MDNode>(Edge);
+    const MCSymbol *From = GetSym(E->getOperand(0));
+    const MCSymbol *To = GetSym(E->getOperand(1));
+    // Skip null functions. This can happen if functions are dead stripped after
+    // the CGProfile pass has been run.
+    if (!From || !To)
+      continue;
+    uint64_t Count = cast<ConstantAsMetadata>(E->getOperand(2))
+                         ->getValue()
+                         ->getUniqueInteger()
+                         .getZExtValue();
+    Streamer.emitCGProfileEntry(
+        MCSymbolRefExpr::create(From, MCSymbolRefExpr::VK_None, C),
+        MCSymbolRefExpr::create(To, MCSymbolRefExpr::VK_None, C), Count);
+  }
 }
 
 MCSymbol *TargetLoweringObjectFileELF::getCFIPersonalitySymbol(
@@ -1558,20 +1598,18 @@ void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer,
   StringRef Section;
 
   GetObjCImageInfo(M, Version, Flags, Section);
-  if (!Section.empty()) {
-    auto &C = getContext();
-    auto *S = C.getCOFFSection(Section,
-                               COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
-                                   COFF::IMAGE_SCN_MEM_READ,
-                               SectionKind::getReadOnly());
-    Streamer.SwitchSection(S);
-    Streamer.emitLabel(C.getOrCreateSymbol(StringRef("OBJC_IMAGE_INFO")));
-    Streamer.emitInt32(Version);
-    Streamer.emitInt32(Flags);
-    Streamer.AddBlankLine();
-  }
+  if (Section.empty())
+    return;
 
-  emitCGProfile(Streamer, M);
+  auto &C = getContext();
+  auto *S = C.getCOFFSection(
+      Section, COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ,
+      SectionKind::getReadOnly());
+  Streamer.SwitchSection(S);
+  Streamer.emitLabel(C.getOrCreateSymbol(StringRef("OBJC_IMAGE_INFO")));
+  Streamer.emitInt32(Version);
+  Streamer.emitInt32(Flags);
+  Streamer.AddBlankLine();
 }
 
 void TargetLoweringObjectFileCOFF::emitLinkerDirectives(

diff  --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp
index 0e45c706112c..eea0aeea2c45 100644
--- a/llvm/lib/Target/TargetLoweringObjectFile.cpp
+++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp
@@ -49,8 +49,6 @@ void TargetLoweringObjectFile::Initialize(MCContext &ctx,
   // Reset various EH DWARF encodings.
   PersonalityEncoding = LSDAEncoding = TTypeEncoding = dwarf::DW_EH_PE_absptr;
   CallSiteEncoding = dwarf::DW_EH_PE_uleb128;
-
-  this->TM = &TM;
 }
 
 TargetLoweringObjectFile::~TargetLoweringObjectFile() {
@@ -138,50 +136,6 @@ void TargetLoweringObjectFile::emitPersonalityValue(MCStreamer &Streamer,
                                                     const MCSymbol *Sym) const {
 }
 
-void TargetLoweringObjectFile::emitCGProfile(MCStreamer &Streamer,
-                                             Module &M) const {
-  MCContext &C = getContext();
-  SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
-  M.getModuleFlagsMetadata(ModuleFlags);
-
-  MDNode *CFGProfile = nullptr;
-
-  for (const auto &MFE : ModuleFlags) {
-    StringRef Key = MFE.Key->getString();
-    if (Key == "CG Profile") {
-      CFGProfile = cast<MDNode>(MFE.Val);
-      break;
-    }
-  }
-
-  if (!CFGProfile)
-    return;
-
-  auto GetSym = [this](const MDOperand &MDO) -> MCSymbol * {
-    if (!MDO)
-      return nullptr;
-    auto *V = cast<ValueAsMetadata>(MDO);
-    const Function *F = cast<Function>(V->getValue());
-    return TM->getSymbol(F);
-  };
-
-  for (const auto &Edge : CFGProfile->operands()) {
-    MDNode *E = cast<MDNode>(Edge);
-    const MCSymbol *From = GetSym(E->getOperand(0));
-    const MCSymbol *To = GetSym(E->getOperand(1));
-    // Skip null functions. This can happen if functions are dead stripped after
-    // the CGProfile pass has been run.
-    if (!From || !To)
-      continue;
-    uint64_t Count = cast<ConstantAsMetadata>(E->getOperand(2))
-                         ->getValue()
-                         ->getUniqueInteger()
-                         .getZExtValue();
-    Streamer.emitCGProfileEntry(
-        MCSymbolRefExpr::create(From, MCSymbolRefExpr::VK_None, C),
-        MCSymbolRefExpr::create(To, MCSymbolRefExpr::VK_None, C), Count);
-  }
-}
 
 /// getKindForGlobal - This is a top-level target-independent classifier for
 /// a global object.  Given a global variable and information from the TM, this

diff  --git a/llvm/test/MC/COFF/cgprofile.ll b/llvm/test/MC/COFF/cgprofile.ll
deleted file mode 100644
index 0156aedb1221..000000000000
--- a/llvm/test/MC/COFF/cgprofile.ll
+++ /dev/null
@@ -1,51 +0,0 @@
-; RUN: llc -filetype=asm %s -o - -mtriple x86_64-pc-windows-msvc | FileCheck %s
-; RUN: llc -filetype=obj %s -o %t -mtriple x86_64-pc-windows-msvc
-; RUN: llvm-readobj --cg-profile %t | FileCheck %s --check-prefix=OBJ
-
-declare void @b()
-
-define void @a() {
-  call void @b()
-  ret void
-}
-
-define void @freq(i1 %cond) {
-  br i1 %cond, label %A, label %B
-A:
-  call void @a();
-  ret void
-B:
-  call void @b();
-  ret void
-}
-
-!llvm.module.flags = !{!0}
-
-!0 = !{i32 5, !"CG Profile", !1}
-!1 = !{!2, !3, !4, !5}
-!2 = !{void ()* @a, void ()* @b, i64 32}
-!3 = !{void (i1)* @freq, void ()* @a, i64 11}
-!4 = !{void (i1)* @freq, void ()* @b, i64 20}
-!5 = !{void (i1)* @freq, null, i64 20}
-
-; CHECK: .cg_profile a, b, 32
-; CHECK: .cg_profile freq, a, 11
-; CHECK: .cg_profile freq, b, 20
-
-; OBJ: CGProfile [
-; OBJ:  CGProfileEntry {
-; OBJ:    From: a
-; OBJ:    To: b
-; OBJ:    Weight: 32
-; OBJ:  }
-; OBJ:  CGProfileEntry {
-; OBJ:    From: freq
-; OBJ:    To: a
-; OBJ:    Weight: 11
-; OBJ:  }
-; OBJ:  CGProfileEntry {
-; OBJ:    From: freq
-; OBJ:    To: b
-; OBJ:    Weight: 20
-; OBJ:  }
-; OBJ:]


        


More information about the llvm-commits mailing list