summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h3
-rw-r--r--llvm/include/llvm/InitializePasses.h1
-rw-r--r--llvm/include/llvm/LinkAllPasses.h1
-rw-r--r--llvm/include/llvm/Transforms/Instrumentation.h2
-rw-r--r--llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp54
-rw-r--r--llvm/lib/IR/Verifier.cpp20
-rw-r--r--llvm/lib/Transforms/IPO/PassManagerBuilder.cpp2
-rw-r--r--llvm/lib/Transforms/Instrumentation/CGProfile.cpp110
-rw-r--r--llvm/lib/Transforms/Instrumentation/CMakeLists.txt1
-rw-r--r--llvm/lib/Transforms/Instrumentation/Instrumentation.cpp1
-rw-r--r--llvm/test/Instrumentation/cgprofile.ll28
-rw-r--r--llvm/test/MC/ELF/cgprofile.ll50
-rw-r--r--llvm/test/Other/opt-O2-pipeline.ll4
-rw-r--r--llvm/test/Other/opt-O3-pipeline.ll4
-rw-r--r--llvm/test/Other/opt-Os-pipeline.ll4
-rw-r--r--llvm/test/Verifier/module-flags-cgprofile.ll30
16 files changed, 7 insertions, 308 deletions
diff --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
index fe14e8564ec..626703e46f6 100644
--- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -36,14 +36,11 @@ class TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
protected:
MCSymbolRefExpr::VariantKind PLTRelativeVariantKind =
MCSymbolRefExpr::VK_None;
- const TargetMachine *TM;
public:
TargetLoweringObjectFileELF() = default;
~TargetLoweringObjectFileELF() override = default;
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
-
/// Emit Obj-C garbage collection and linker options.
void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 2ca71350592..55132d38c20 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -94,7 +94,6 @@ void initializeCFGViewerLegacyPassPass(PassRegistry&);
void initializeCFIInstrInserterPass(PassRegistry&);
void initializeCFLAndersAAWrapperPassPass(PassRegistry&);
void initializeCFLSteensAAWrapperPassPass(PassRegistry&);
-void initializeCGProfilePassPass(PassRegistry&);
void initializeCallGraphDOTPrinterPass(PassRegistry&);
void initializeCallGraphPrinterLegacyPassPass(PassRegistry&);
void initializeCallGraphViewerPass(PassRegistry&);
diff --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h
index 9c70c5b8577..a49c4aad865 100644
--- a/llvm/include/llvm/LinkAllPasses.h
+++ b/llvm/include/llvm/LinkAllPasses.h
@@ -80,7 +80,6 @@ namespace {
(void) llvm::createCallGraphDOTPrinterPass();
(void) llvm::createCallGraphViewerPass();
(void) llvm::createCFGSimplificationPass();
- (void) llvm::createCGProfilePass();
(void) llvm::createCFLAndersAAWrapperPass();
(void) llvm::createCFLSteensAAWrapperPass();
(void) llvm::createStructurizeCFGPass();
diff --git a/llvm/include/llvm/Transforms/Instrumentation.h b/llvm/include/llvm/Transforms/Instrumentation.h
index 994998afefa..4a346c8d745 100644
--- a/llvm/include/llvm/Transforms/Instrumentation.h
+++ b/llvm/include/llvm/Transforms/Instrumentation.h
@@ -187,8 +187,6 @@ struct SanitizerCoverageOptions {
ModulePass *createSanitizerCoverageModulePass(
const SanitizerCoverageOptions &Options = SanitizerCoverageOptions());
-ModulePass *createCGProfilePass();
-
/// Calculate what to divide by to scale counts.
///
/// Given the maximum count, calculate a divisor that will scale all the
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 24ff42a34ff..df8aecd7cf4 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -91,12 +91,6 @@ static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags,
// ELF
//===----------------------------------------------------------------------===//
-void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
- const TargetMachine &TgtM) {
- TargetLoweringObjectFile::Initialize(Ctx, TgtM);
- TM = &TgtM;
-}
-
void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
Module &M) const {
auto &C = getContext();
@@ -122,49 +116,15 @@ void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
StringRef Section;
GetObjCImageInfo(M, Version, Flags, Section);
- if (!Section.empty()) {
- auto *S = C.getELFSection(Section, ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
- Streamer.SwitchSection(S);
- Streamer.EmitLabel(C.getOrCreateSymbol(StringRef("OBJC_IMAGE_INFO")));
- Streamer.EmitIntValue(Version, 4);
- Streamer.EmitIntValue(Flags, 4);
- Streamer.AddBlankLine();
- }
-
- 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)
+ if (Section.empty())
return;
- auto GetSym = [this](const MDOperand &MDO) {
- 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));
- 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);
- }
+ auto *S = C.getELFSection(Section, ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
+ Streamer.SwitchSection(S);
+ Streamer.EmitLabel(C.getOrCreateSymbol(StringRef("OBJC_IMAGE_INFO")));
+ Streamer.EmitIntValue(Version, 4);
+ Streamer.EmitIntValue(Flags, 4);
+ Streamer.AddBlankLine();
}
MCSymbol *TargetLoweringObjectFileELF::getCFIPersonalitySymbol(
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 11af71142ef..dca9d9b64ff 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -409,7 +409,6 @@ private:
void visitModuleFlag(const MDNode *Op,
DenseMap<const MDString *, const MDNode *> &SeenIDs,
SmallVectorImpl<const MDNode *> &Requirements);
- void visitModuleFlagCGProfileEntry(const MDOperand &MDO);
void visitFunction(const Function &F);
void visitBasicBlock(BasicBlock &BB);
void visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty);
@@ -1412,25 +1411,6 @@ Verifier::visitModuleFlag(const MDNode *Op,
Assert(M.getNamedMetadata("llvm.linker.options"),
"'Linker Options' named metadata no longer supported");
}
-
- if (ID->getString() == "CG Profile") {
- for (const MDOperand &MDO : cast<MDNode>(Op->getOperand(2))->operands())
- visitModuleFlagCGProfileEntry(MDO);
- }
-}
-
-void Verifier::visitModuleFlagCGProfileEntry(const MDOperand &MDO) {
- auto Node = dyn_cast_or_null<MDNode>(MDO);
- Assert(Node && Node->getNumOperands() == 3, "expected a MDNode triple", MDO);
- auto From = dyn_cast_or_null<ValueAsMetadata>(Node->getOperand(0));
- Assert(From && isa<Function>(From->getValue()), "expected a Function",
- Node->getOperand(0));
- auto To = dyn_cast_or_null<ValueAsMetadata>(Node->getOperand(1));
- Assert(To && isa<Function>(To->getValue()), "expected a Function",
- Node->getOperand(1));
- auto Count = dyn_cast_or_null<ConstantAsMetadata>(Node->getOperand(2));
- Assert(Count && Count->getType()->isIntegerTy(),
- "expected an integer constant", Node->getOperand(2));
}
/// Return true if this attribute kind only applies to functions.
diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
index defb54e19bf..a2559bc70b1 100644
--- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -694,8 +694,6 @@ void PassManagerBuilder::populateModulePassManager(
MPM.add(createConstantMergePass()); // Merge dup global constants
}
- MPM.add(createCGProfilePass());
-
if (MergeFunctions)
MPM.add(createMergeFunctionsPass());
diff --git a/llvm/lib/Transforms/Instrumentation/CGProfile.cpp b/llvm/lib/Transforms/Instrumentation/CGProfile.cpp
deleted file mode 100644
index cb1fcb21425..00000000000
--- a/llvm/lib/Transforms/Instrumentation/CGProfile.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-//===-- CGProfile.cpp -----------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ADT/MapVector.h"
-#include "llvm/Analysis/BlockFrequencyInfo.h"
-#include "llvm/Analysis/BranchProbabilityInfo.h"
-#include "llvm/IR/Constants.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/MDBuilder.h"
-#include "llvm/IR/PassManager.h"
-#include "llvm/Transforms/Instrumentation.h"
-
-#include <array>
-
-using namespace llvm;
-
-class CGProfilePass : public ModulePass {
-public:
- static char ID;
-
- CGProfilePass() : ModulePass(ID) {
- initializeCGProfilePassPass(*PassRegistry::getPassRegistry());
- }
-
- StringRef getPassName() const override { return "CGProfilePass"; }
-
-private:
- bool runOnModule(Module &M) override;
- bool addModuleFlags(
- Module &M,
- MapVector<std::pair<Function *, Function *>, uint64_t> &Counts) const;
-
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.addRequired<BlockFrequencyInfoWrapperPass>();
- AU.addRequired<BranchProbabilityInfoWrapperPass>();
- }
-};
-
-bool CGProfilePass::runOnModule(Module &M) {
- if (skipModule(M))
- return false;
-
- MapVector<std::pair<Function *, Function *>, uint64_t> Counts;
-
- for (auto &F : M) {
- if (F.isDeclaration())
- continue;
- getAnalysis<BranchProbabilityInfoWrapperPass>(F).getBPI();
- auto &BFI = getAnalysis<BlockFrequencyInfoWrapperPass>(F).getBFI();
- for (const auto &BB : F) {
- Optional<uint64_t> BBCount = BFI.getBlockProfileCount(&BB);
- if (!BBCount)
- continue;
- for (const auto &I : BB) {
- auto *CI = dyn_cast<CallInst>(&I);
- if (!CI)
- continue;
- Function *CalledF = CI->getCalledFunction();
- if (!CalledF || CalledF->isIntrinsic())
- continue;
-
- uint64_t &Count = Counts[std::make_pair(&F, CalledF)];
- Count = SaturatingAdd(Count, *BBCount);
- }
- }
- }
-
- return addModuleFlags(M, Counts);
-}
-
-bool CGProfilePass::addModuleFlags(
- Module &M,
- MapVector<std::pair<Function *, Function *>, uint64_t> &Counts) const {
- if (Counts.empty())
- return false;
-
- LLVMContext &Context = M.getContext();
- MDBuilder MDB(Context);
- std::vector<Metadata *> Nodes;
-
- for (auto E : Counts) {
- SmallVector<Metadata *, 3> Vals;
- Vals.push_back(ValueAsMetadata::get(E.first.first));
- Vals.push_back(ValueAsMetadata::get(E.first.second));
- Vals.push_back(MDB.createConstant(
- ConstantInt::get(Type::getInt64Ty(Context), E.second)));
- Nodes.push_back(MDNode::get(Context, Vals));
- }
-
- M.addModuleFlag(Module::Append, "CG Profile", MDNode::get(Context, Nodes));
- return true;
-}
-
-char CGProfilePass::ID = 0;
-INITIALIZE_PASS_BEGIN(CGProfilePass, "cg-profile",
- "Generate profile information from the call graph.",
- false, false)
-INITIALIZE_PASS_DEPENDENCY(BlockFrequencyInfoWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(BranchProbabilityInfoWrapperPass)
-INITIALIZE_PASS_END(CGProfilePass, "cg-profile",
- "Generate profile information from the call graph.", false,
- false)
-
-ModulePass *llvm::createCGProfilePass() { return new CGProfilePass(); }
diff --git a/llvm/lib/Transforms/Instrumentation/CMakeLists.txt b/llvm/lib/Transforms/Instrumentation/CMakeLists.txt
index 5d008482319..66fdcb3ccc4 100644
--- a/llvm/lib/Transforms/Instrumentation/CMakeLists.txt
+++ b/llvm/lib/Transforms/Instrumentation/CMakeLists.txt
@@ -1,7 +1,6 @@
add_llvm_library(LLVMInstrumentation
AddressSanitizer.cpp
BoundsChecking.cpp
- CGProfile.cpp
DataFlowSanitizer.cpp
GCOVProfiling.cpp
MemorySanitizer.cpp
diff --git a/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp b/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp
index fbd651f3f20..8e9eea96ced 100644
--- a/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp
+++ b/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp
@@ -60,7 +60,6 @@ void llvm::initializeInstrumentation(PassRegistry &Registry) {
initializeAddressSanitizerModulePass(Registry);
initializeBoundsCheckingLegacyPassPass(Registry);
initializeGCOVProfilerLegacyPassPass(Registry);
- initializeCGProfilePassPass(Registry);
initializePGOInstrumentationGenLegacyPassPass(Registry);
initializePGOInstrumentationUseLegacyPassPass(Registry);
initializePGOIndirectCallPromotionLegacyPassPass(Registry);
diff --git a/llvm/test/Instrumentation/cgprofile.ll b/llvm/test/Instrumentation/cgprofile.ll
deleted file mode 100644
index f515a511f84..00000000000
--- a/llvm/test/Instrumentation/cgprofile.ll
+++ /dev/null
@@ -1,28 +0,0 @@
-; RUN: opt < %s -cg-profile -S | FileCheck %s
-
-declare void @b()
-
-define void @a() !prof !1 {
- call void @b()
- ret void
-}
-
-define void @freq(i1 %cond) !prof !1 {
- br i1 %cond, label %A, label %B, !prof !2
-A:
- call void @a();
- ret void
-B:
- call void @b();
- ret void
-}
-
-!1 = !{!"function_entry_count", i64 32}
-!2 = !{!"branch_weights", i32 5, i32 10}
-
-; CHECK: !llvm.module.flags = !{![[cgprof:[0-9]+]]}
-; CHECK: ![[cgprof]] = !{i32 5, !"CG Profile", ![[prof:[0-9]+]]}
-; CHECK: ![[prof]] = !{![[e0:[0-9]+]], ![[e1:[0-9]+]], ![[e2:[0-9]+]]}
-; CHECK: ![[e0]] = !{void ()* @a, void ()* @b, i64 32}
-; CHECK: ![[e1]] = !{void (i1)* @freq, void ()* @a, i64 11}
-; CHECK: ![[e2]] = !{void (i1)* @freq, void ()* @b, i64 20}
diff --git a/llvm/test/MC/ELF/cgprofile.ll b/llvm/test/MC/ELF/cgprofile.ll
deleted file mode 100644
index 27b43f1172c..00000000000
--- a/llvm/test/MC/ELF/cgprofile.ll
+++ /dev/null
@@ -1,50 +0,0 @@
-; RUN: llc -filetype=asm %s -o - -mtriple x86_64-pc-linux-gnu | FileCheck %s
-; RUN: llc -filetype=obj %s -o %t -mtriple x86_64-pc-linux-gnu
-; RUN: llvm-readobj -elf-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}
-!2 = !{void ()* @a, void ()* @b, i64 32}
-!3 = !{void (i1)* @freq, void ()* @a, i64 11}
-!4 = !{void (i1)* @freq, void ()* @b, 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:]
diff --git a/llvm/test/Other/opt-O2-pipeline.ll b/llvm/test/Other/opt-O2-pipeline.ll
index 17574abba34..96d9f22cc01 100644
--- a/llvm/test/Other/opt-O2-pipeline.ll
+++ b/llvm/test/Other/opt-O2-pipeline.ll
@@ -249,10 +249,6 @@
; CHECK-NEXT: Strip Unused Function Prototypes
; CHECK-NEXT: Dead Global Elimination
; CHECK-NEXT: Merge Duplicate Global Constants
-; CHECK-NEXT: CGProfilePass
-; FIXME: This pass uses the magic "on-demand function analysis" feature of the
-; legacy pass manager and doesn't correctly print pass names.
-; CHECK-NEXT: Unnamed pass
; CHECK-NEXT: FunctionPass Manager
; CHECK-NEXT: Dominator Tree Construction
; CHECK-NEXT: Natural Loop Information
diff --git a/llvm/test/Other/opt-O3-pipeline.ll b/llvm/test/Other/opt-O3-pipeline.ll
index ab62dc96397..fc9f4fd6b31 100644
--- a/llvm/test/Other/opt-O3-pipeline.ll
+++ b/llvm/test/Other/opt-O3-pipeline.ll
@@ -253,10 +253,6 @@
; CHECK-NEXT: Strip Unused Function Prototypes
; CHECK-NEXT: Dead Global Elimination
; CHECK-NEXT: Merge Duplicate Global Constants
-; CHECK-NEXT: CGProfilePass
-; FIXME: This pass uses the magic "on-demand function analysis" feature of the
-; legacy pass manager and doesn't correctly print pass names.
-; CHECK-NEXT: Unnamed pass
; CHECK-NEXT: FunctionPass Manager
; CHECK-NEXT: Dominator Tree Construction
; CHECK-NEXT: Natural Loop Information
diff --git a/llvm/test/Other/opt-Os-pipeline.ll b/llvm/test/Other/opt-Os-pipeline.ll
index 6e008a9be19..206a20a598e 100644
--- a/llvm/test/Other/opt-Os-pipeline.ll
+++ b/llvm/test/Other/opt-Os-pipeline.ll
@@ -235,10 +235,6 @@
; CHECK-NEXT: Strip Unused Function Prototypes
; CHECK-NEXT: Dead Global Elimination
; CHECK-NEXT: Merge Duplicate Global Constants
-; CHECK-NEXT: CGProfilePass
-; FIXME: This pass uses the magic "on-demand function analysis" feature of the
-; legacy pass manager and doesn't correctly print pass names.
-; CHECK-NEXT: Unnamed pass
; CHECK-NEXT: FunctionPass Manager
; CHECK-NEXT: Dominator Tree Construction
; CHECK-NEXT: Natural Loop Information
diff --git a/llvm/test/Verifier/module-flags-cgprofile.ll b/llvm/test/Verifier/module-flags-cgprofile.ll
deleted file mode 100644
index 307c4f28705..00000000000
--- a/llvm/test/Verifier/module-flags-cgprofile.ll
+++ /dev/null
@@ -1,30 +0,0 @@
-; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
-
-declare void @b()
-declare void @a()
-
-!llvm.module.flags = !{!0}
-
-!0 = !{i32 5, !"CG Profile", !1}
-!1 = !{!2, !"", !3, !4, !5, !6, !7, !8}
-!2 = !{void ()* @a, void ()* @b, i64 32}
-!3 = !{void ()* @a, void ()* @b}
-!4 = !{void ()* @a, void ()* @b, i64 32, i64 32}
-!5 = !{!"a", void ()* @b, i64 32}
-!6 = !{void ()* @a, !"b", i64 32}
-!7 = !{void ()* @a, void ()* @b, !""}
-!8 = !{void ()* @a, void ()* @b, null}
-
-; CHECK: expected a MDNode triple
-; CHECK: !""
-; CHECK: expected a MDNode triple
-; CHECK: !3 = !{void ()* @a, void ()* @b}
-; CHECK: expected a MDNode triple
-; CHECK: !4 = !{void ()* @a, void ()* @b, i64 32, i64 32}
-; CHECK: expected a Function
-; CHECK: !"a"
-; CHECK: expected a Function
-; CHECK: !"b"
-; CHECK: expected an integer constant
-; CHECK: !""
-; CHECK: expected an integer constant
OpenPOWER on IntegriCloud