mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-04-13 04:52:50 +00:00

Summary: Instead of using the workaround of suppressing the entire index for modules that call inline asm that may reference locals, use the NoRename flag on the summary for any locals in the llvm.used set, and add a reference edge from any functions containing inline asm. This avoids issues from having no summaries despite the module defining global values, which was preventing more aggressive index-based optimization. It will be followed by a subsequent patch to make a similar fix for local references in module level asm (to fix PR30610). Reviewers: mehdi_amini Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D26121 llvm-svn: 285513
76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
//===- ModuleSummaryAnalysis.h - Module summary index builder ---*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
/// \file
|
|
/// This is the interface to build a ModuleSummaryIndex for a module.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_ANALYSIS_MODULESUMMARYANALYSIS_H
|
|
#define LLVM_ANALYSIS_MODULESUMMARYANALYSIS_H
|
|
|
|
#include "llvm/ADT/STLExtras.h"
|
|
#include "llvm/IR/ModuleSummaryIndex.h"
|
|
#include "llvm/IR/PassManager.h"
|
|
#include "llvm/Pass.h"
|
|
|
|
namespace llvm {
|
|
class BlockFrequencyInfo;
|
|
class ProfileSummaryInfo;
|
|
|
|
/// Direct function to compute a \c ModuleSummaryIndex from a given module.
|
|
///
|
|
/// If operating within a pass manager which has defined ways to compute the \c
|
|
/// BlockFrequencyInfo for a given function, that can be provided via
|
|
/// a std::function callback. Otherwise, this routine will manually construct
|
|
/// that information.
|
|
ModuleSummaryIndex buildModuleSummaryIndex(
|
|
const Module &M,
|
|
std::function<BlockFrequencyInfo *(const Function &F)> GetBFICallback,
|
|
ProfileSummaryInfo *PSI);
|
|
|
|
/// Analysis pass to provide the ModuleSummaryIndex object.
|
|
class ModuleSummaryIndexAnalysis
|
|
: public AnalysisInfoMixin<ModuleSummaryIndexAnalysis> {
|
|
friend AnalysisInfoMixin<ModuleSummaryIndexAnalysis>;
|
|
static char PassID;
|
|
|
|
public:
|
|
typedef ModuleSummaryIndex Result;
|
|
|
|
Result run(Module &M, ModuleAnalysisManager &AM);
|
|
};
|
|
|
|
/// Legacy wrapper pass to provide the ModuleSummaryIndex object.
|
|
class ModuleSummaryIndexWrapperPass : public ModulePass {
|
|
Optional<ModuleSummaryIndex> Index;
|
|
|
|
public:
|
|
static char ID;
|
|
|
|
ModuleSummaryIndexWrapperPass();
|
|
|
|
/// Get the index built by pass
|
|
ModuleSummaryIndex &getIndex() { return *Index; }
|
|
const ModuleSummaryIndex &getIndex() const { return *Index; }
|
|
|
|
bool runOnModule(Module &M) override;
|
|
bool doFinalization(Module &M) override;
|
|
void getAnalysisUsage(AnalysisUsage &AU) const override;
|
|
};
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createModuleSummaryIndexWrapperPass - This pass builds a ModuleSummaryIndex
|
|
// object for the module, to be written to bitcode or LLVM assembly.
|
|
//
|
|
ModulePass *createModuleSummaryIndexWrapperPass();
|
|
}
|
|
|
|
#endif
|