forked from OSchip/llvm-project
Fix some Clang-tidy modernize and Include What You Use warnings.
Differential revision: https://reviews.llvm.org/D23291 llvm-svn: 278364
This commit is contained in:
parent
fe24bff8c6
commit
cdc7161281
|
@ -58,37 +58,61 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/BitVector.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/ADT/MapVector.h"
|
||||
#include "llvm/ADT/PriorityQueue.h"
|
||||
#include "llvm/ADT/SetVector.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/Analysis/AliasAnalysis.h"
|
||||
#include "llvm/Analysis/MemoryLocation.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/CodeGen/DFAPacketizer.h"
|
||||
#include "llvm/CodeGen/LiveIntervalAnalysis.h"
|
||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||
#include "llvm/CodeGen/MachineDominators.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
#include "llvm/CodeGen/MachineInstr.h"
|
||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||
#include "llvm/CodeGen/MachineInstrBundle.h"
|
||||
#include "llvm/CodeGen/MachineLoopInfo.h"
|
||||
#include "llvm/CodeGen/MachineMemOperand.h"
|
||||
#include "llvm/CodeGen/MachineOperand.h"
|
||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
#include "llvm/CodeGen/RegisterClassInfo.h"
|
||||
#include "llvm/CodeGen/RegisterPressure.h"
|
||||
#include "llvm/CodeGen/ScheduleDAG.h"
|
||||
#include "llvm/CodeGen/ScheduleDAGInstrs.h"
|
||||
#include "llvm/IR/Attributes.h"
|
||||
#include "llvm/IR/DebugLoc.h"
|
||||
#include "llvm/MC/MCInstrItineraries.h"
|
||||
#include "llvm/PassAnalysisSupport.h"
|
||||
#include "llvm/PassRegistry.h"
|
||||
#include "llvm/PassSupport.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <climits>
|
||||
#include <cstdint>
|
||||
#include <deque>
|
||||
#include <functional>
|
||||
#include <iterator>
|
||||
#include <map>
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
|
@ -175,9 +199,9 @@ public:
|
|||
initializeMachinePipelinerPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
virtual bool runOnMachineFunction(MachineFunction &MF);
|
||||
bool runOnMachineFunction(MachineFunction &MF) override;
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<AAResultsWrapperPass>();
|
||||
AU.addPreserved<AAResultsWrapperPass>();
|
||||
AU.addRequired<MachineLoopInfo>();
|
||||
|
@ -265,8 +289,8 @@ public:
|
|||
Scheduled(false), Loop(L), LIS(lis), RegClassInfo(rci),
|
||||
Topo(SUnits, &ExitSU) {}
|
||||
|
||||
void schedule();
|
||||
void finishBlock();
|
||||
void schedule() override;
|
||||
void finishBlock() override;
|
||||
|
||||
/// Return true if the loop kernel has been scheduled.
|
||||
bool hasNewSchedule() { return Scheduled; }
|
||||
|
@ -1099,7 +1123,7 @@ void SwingSchedulerDAG::updatePhiDependences() {
|
|||
UI != UE; ++UI) {
|
||||
MachineInstr *UseMI = &*UI;
|
||||
SUnit *SU = getSUnit(UseMI);
|
||||
if (SU != 0 && UseMI->isPHI()) {
|
||||
if (SU != nullptr && UseMI->isPHI()) {
|
||||
if (!MI->isPHI()) {
|
||||
SDep Dep(SU, SDep::Anti, Reg);
|
||||
I.addPred(Dep);
|
||||
|
@ -1115,10 +1139,10 @@ void SwingSchedulerDAG::updatePhiDependences() {
|
|||
} else if (MOI->isUse()) {
|
||||
// If the register is defined by a Phi, then create a true dependence.
|
||||
MachineInstr *DefMI = MRI.getUniqueVRegDef(Reg);
|
||||
if (DefMI == 0)
|
||||
if (DefMI == nullptr)
|
||||
continue;
|
||||
SUnit *SU = getSUnit(DefMI);
|
||||
if (SU != 0 && DefMI->isPHI()) {
|
||||
if (SU != nullptr && DefMI->isPHI()) {
|
||||
if (!MI->isPHI()) {
|
||||
SDep Dep(SU, SDep::Data, Reg);
|
||||
Dep.setLatency(0);
|
||||
|
@ -1218,6 +1242,7 @@ void SwingSchedulerDAG::changeDependences() {
|
|||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// FuncUnitSorter - Comparison operator used to sort instructions by
|
||||
// the number of functional unit choices.
|
||||
struct FuncUnitSorter {
|
||||
|
@ -1270,7 +1295,8 @@ struct FuncUnitSorter {
|
|||
return MFUs1 > MFUs2;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
/// Calculate the resource constrained minimum initiation interval for the
|
||||
/// specified loop. We use the DFA to model the resources needed for
|
||||
|
@ -2009,7 +2035,7 @@ void SwingSchedulerDAG::computeNodeOrder(NodeSetType &NodeSets) {
|
|||
while (!R.empty()) {
|
||||
SUnit *maxHeight = nullptr;
|
||||
for (SUnit *I : R) {
|
||||
if (maxHeight == 0 || getHeight(I) > getHeight(maxHeight))
|
||||
if (maxHeight == nullptr || getHeight(I) > getHeight(maxHeight))
|
||||
maxHeight = I;
|
||||
else if (getHeight(I) == getHeight(maxHeight) &&
|
||||
getMOV(I) < getMOV(maxHeight) &&
|
||||
|
@ -2053,7 +2079,7 @@ void SwingSchedulerDAG::computeNodeOrder(NodeSetType &NodeSets) {
|
|||
while (!R.empty()) {
|
||||
SUnit *maxDepth = nullptr;
|
||||
for (SUnit *I : R) {
|
||||
if (maxDepth == 0 || getDepth(I) > getDepth(maxDepth))
|
||||
if (maxDepth == nullptr || getDepth(I) > getDepth(maxDepth))
|
||||
maxDepth = I;
|
||||
else if (getDepth(I) == getDepth(maxDepth) &&
|
||||
getMOV(I) < getMOV(maxDepth) &&
|
||||
|
@ -2340,7 +2366,7 @@ void SwingSchedulerDAG::generateProlog(SMSchedule &Schedule, unsigned LastStage,
|
|||
unsigned numBranches = TII->RemoveBranch(*PreheaderBB);
|
||||
if (numBranches) {
|
||||
SmallVector<MachineOperand, 0> Cond;
|
||||
TII->InsertBranch(*PreheaderBB, PrologBBs[0], 0, Cond, DebugLoc());
|
||||
TII->InsertBranch(*PreheaderBB, PrologBBs[0], nullptr, Cond, DebugLoc());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2432,7 +2458,7 @@ void SwingSchedulerDAG::generateEpilog(SMSchedule &Schedule, unsigned LastStage,
|
|||
if (EpilogBBs.size() > 0) {
|
||||
MachineBasicBlock *LastEpilogBB = EpilogBBs.back();
|
||||
SmallVector<MachineOperand, 4> Cond1;
|
||||
TII->InsertBranch(*LastEpilogBB, LoopExitBB, 0, Cond1, DebugLoc());
|
||||
TII->InsertBranch(*LastEpilogBB, LoopExitBB, nullptr, Cond1, DebugLoc());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2994,7 +3020,7 @@ void SwingSchedulerDAG::addBranches(MBBVectorTy &PrologBBs,
|
|||
Prolog->addSuccessor(Epilog);
|
||||
Prolog->removeSuccessor(LastPro);
|
||||
LastEpi->removeSuccessor(Epilog);
|
||||
numAdded = TII->InsertBranch(*Prolog, Epilog, 0, Cond, DebugLoc());
|
||||
numAdded = TII->InsertBranch(*Prolog, Epilog, nullptr, Cond, DebugLoc());
|
||||
removePhis(Epilog, LastEpi);
|
||||
// Remove the blocks that are no longer referenced.
|
||||
if (LastPro != LastEpi) {
|
||||
|
@ -3004,7 +3030,7 @@ void SwingSchedulerDAG::addBranches(MBBVectorTy &PrologBBs,
|
|||
LastPro->clear();
|
||||
LastPro->eraseFromParent();
|
||||
} else {
|
||||
numAdded = TII->InsertBranch(*Prolog, LastPro, 0, Cond, DebugLoc());
|
||||
numAdded = TII->InsertBranch(*Prolog, LastPro, nullptr, Cond, DebugLoc());
|
||||
removePhis(Epilog, Prolog);
|
||||
}
|
||||
LastPro = Prolog;
|
||||
|
|
|
@ -13,10 +13,18 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ProfileData/InstrProfWriter.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/IR/ProfileSummary.h"
|
||||
#include "llvm/ProfileData/ProfileCommon.h"
|
||||
#include "llvm/Support/EndianStream.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/OnDiskHashTable.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
|
@ -29,6 +37,7 @@ struct PatchItem {
|
|||
};
|
||||
|
||||
namespace llvm {
|
||||
|
||||
// A wrapper class to abstract writer stream with support of bytes
|
||||
// back patching.
|
||||
class ProfOStream {
|
||||
|
@ -40,6 +49,7 @@ public:
|
|||
|
||||
uint64_t tell() { return OS.tell(); }
|
||||
void write(uint64_t V) { LE.write<uint64_t>(V); }
|
||||
|
||||
// \c patch can only be called when all data is written and flushed.
|
||||
// For raw_string_ostream, the patch is done on the target string
|
||||
// directly and it won't be reflected in the stream's internal buffer.
|
||||
|
@ -65,6 +75,7 @@ public:
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If \c OS is an instance of \c raw_fd_ostream, this field will be
|
||||
// true. Otherwise, \c OS will be an raw_string_ostream.
|
||||
bool IsFDOStream;
|
||||
|
@ -139,7 +150,8 @@ public:
|
|||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
InstrProfWriter::InstrProfWriter(bool Sparse)
|
||||
: Sparse(Sparse), FunctionData(), ProfileKind(PF_Unknown),
|
||||
|
@ -152,6 +164,7 @@ void InstrProfWriter::setValueProfDataEndianness(
|
|||
support::endianness Endianness) {
|
||||
InfoObj->ValueProfDataEndianness = Endianness;
|
||||
}
|
||||
|
||||
void InstrProfWriter::setOutputSparse(bool Sparse) {
|
||||
this->Sparse = Sparse;
|
||||
}
|
||||
|
@ -269,7 +282,7 @@ void InstrProfWriter::writeImpl(ProfOStream &OS) {
|
|||
// structure to be serialized out (to disk or buffer).
|
||||
std::unique_ptr<ProfileSummary> PS = ISB.getSummary();
|
||||
setSummary(TheSummary.get(), *PS);
|
||||
InfoObj->SummaryBuilder = 0;
|
||||
InfoObj->SummaryBuilder = nullptr;
|
||||
|
||||
// Now do the final patch:
|
||||
PatchItem PatchItems[] = {
|
||||
|
|
|
@ -29,25 +29,43 @@
|
|||
|
||||
#include "llvm/Transforms/IPO/WholeProgramDevirt.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/DenseMapInfo.h"
|
||||
#include "llvm/ADT/DenseSet.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/ADT/MapVector.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/Analysis/TypeMetadataUtils.h"
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DebugInfoMetadata.h"
|
||||
#include "llvm/IR/DebugLoc.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/DiagnosticInfo.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/GlobalAlias.h"
|
||||
#include "llvm/IR/GlobalVariable.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/InstrTypes.h"
|
||||
#include "llvm/IR/Instruction.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/Intrinsics.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/Metadata.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/PassRegistry.h"
|
||||
#include "llvm/PassSupport.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Transforms/IPO.h"
|
||||
#include "llvm/Transforms/Utils/Evaluator.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace wholeprogramdevirt;
|
||||
|
@ -179,7 +197,7 @@ struct VTableSlot {
|
|||
uint64_t ByteOffset;
|
||||
};
|
||||
|
||||
}
|
||||
} // end anonymous namespace
|
||||
|
||||
namespace llvm {
|
||||
|
||||
|
@ -202,7 +220,7 @@ template <> struct DenseMapInfo<VTableSlot> {
|
|||
}
|
||||
};
|
||||
|
||||
}
|
||||
} // end namespace llvm
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -292,10 +310,12 @@ struct DevirtModule {
|
|||
|
||||
struct WholeProgramDevirt : public ModulePass {
|
||||
static char ID;
|
||||
|
||||
WholeProgramDevirt() : ModulePass(ID) {
|
||||
initializeWholeProgramDevirtPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
bool runOnModule(Module &M) {
|
||||
|
||||
bool runOnModule(Module &M) override {
|
||||
if (skipModule(M))
|
||||
return false;
|
||||
|
||||
|
@ -303,7 +323,7 @@ struct WholeProgramDevirt : public ModulePass {
|
|||
}
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
} // end anonymous namespace
|
||||
|
||||
INITIALIZE_PASS(WholeProgramDevirt, "wholeprogramdevirt",
|
||||
"Whole program devirtualization", false, false)
|
||||
|
@ -462,7 +482,7 @@ bool DevirtModule::tryUniqueRetValOpt(
|
|||
MutableArrayRef<VirtualCallSite> CallSites) {
|
||||
// IsOne controls whether we look for a 0 or a 1.
|
||||
auto tryUniqueRetValOptFor = [&](bool IsOne) {
|
||||
const TypeMemberInfo *UniqueMember = 0;
|
||||
const TypeMemberInfo *UniqueMember = nullptr;
|
||||
for (const VirtualCallTarget &Target : TargetsForSlot) {
|
||||
if (Target.RetVal == (IsOne ? 1 : 0)) {
|
||||
if (UniqueMember)
|
||||
|
|
|
@ -12,17 +12,47 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "InstCombineInternal.h"
|
||||
#include "llvm/ADT/APFloat.h"
|
||||
#include "llvm/ADT/APInt.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/None.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/Analysis/Loads.h"
|
||||
#include "llvm/Analysis/MemoryBuiltins.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/IR/BasicBlock.h"
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/Constant.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/GlobalVariable.h"
|
||||
#include "llvm/IR/InstrTypes.h"
|
||||
#include "llvm/IR/Instruction.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/IntrinsicInst.h"
|
||||
#include "llvm/IR/Intrinsics.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/Metadata.h"
|
||||
#include "llvm/IR/PatternMatch.h"
|
||||
#include "llvm/IR/Statepoint.h"
|
||||
#include "llvm/Transforms/Utils/BuildLibCalls.h"
|
||||
#include "llvm/IR/Type.h"
|
||||
#include "llvm/IR/Value.h"
|
||||
#include "llvm/IR/ValueHandle.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
#include "llvm/Transforms/Utils/SimplifyLibCalls.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace PatternMatch;
|
||||
|
||||
|
@ -400,7 +430,7 @@ static Value *simplifyX86varShift(const IntrinsicInst &II,
|
|||
// If all elements out of range or UNDEF, return vector of zeros/undefs.
|
||||
// ArithmeticShift should only hit this if they are all UNDEF.
|
||||
auto OutOfRange = [&](int Idx) { return (Idx < 0) || (BitWidth <= Idx); };
|
||||
if (llvm::all_of(ShiftAmts, OutOfRange)) {
|
||||
if (all_of(ShiftAmts, OutOfRange)) {
|
||||
SmallVector<Constant *, 8> ConstantVec;
|
||||
for (int Idx : ShiftAmts) {
|
||||
if (Idx < 0) {
|
||||
|
@ -630,7 +660,6 @@ static Value *simplifyX86extrq(IntrinsicInst &II, Value *Op0,
|
|||
static Value *simplifyX86insertq(IntrinsicInst &II, Value *Op0, Value *Op1,
|
||||
APInt APLength, APInt APIndex,
|
||||
InstCombiner::BuilderTy &Builder) {
|
||||
|
||||
// From AMD documentation: "The bit index and field length are each six bits
|
||||
// in length other bits of the field are ignored."
|
||||
APIndex = APIndex.zextOrTrunc(6);
|
||||
|
@ -736,7 +765,7 @@ static Value *simplifyX86pshufb(const IntrinsicInst &II,
|
|||
"Unexpected number of elements in shuffle mask!");
|
||||
|
||||
// Construct a shuffle mask from constant integers or UNDEFs.
|
||||
Constant *Indexes[32] = {NULL};
|
||||
Constant *Indexes[32] = {nullptr};
|
||||
|
||||
// Each byte in the shuffle control mask forms an index to permute the
|
||||
// corresponding byte in the destination operand.
|
||||
|
@ -781,7 +810,7 @@ static Value *simplifyX86vpermilvar(const IntrinsicInst &II,
|
|||
assert(NumElts == 8 || NumElts == 4 || NumElts == 2);
|
||||
|
||||
// Construct a shuffle mask from constant integers or UNDEFs.
|
||||
Constant *Indexes[8] = {NULL};
|
||||
Constant *Indexes[8] = {nullptr};
|
||||
|
||||
// The intrinsics only read one or two bits, clear the rest.
|
||||
for (unsigned I = 0; I < NumElts; ++I) {
|
||||
|
@ -834,7 +863,7 @@ static Value *simplifyX86vpermv(const IntrinsicInst &II,
|
|||
assert(Size == 8 && "Unexpected shuffle mask size");
|
||||
|
||||
// Construct a shuffle mask from constant integers or UNDEFs.
|
||||
Constant *Indexes[8] = {NULL};
|
||||
Constant *Indexes[8] = {nullptr};
|
||||
|
||||
for (unsigned I = 0; I < Size; ++I) {
|
||||
Constant *COp = V->getAggregateElement(I);
|
||||
|
@ -2481,7 +2510,6 @@ static IntrinsicInst *findInitTrampoline(Value *Callee) {
|
|||
|
||||
/// Improvements for call and invoke instructions.
|
||||
Instruction *InstCombiner::visitCallSite(CallSite CS) {
|
||||
|
||||
if (isAllocLikeFn(CS.getInstruction(), &TLI))
|
||||
return visitAllocSite(*CS.getInstruction());
|
||||
|
||||
|
@ -2970,7 +2998,7 @@ InstCombiner::transformCallThroughTrampoline(CallSite CS,
|
|||
|
||||
++Idx;
|
||||
++I;
|
||||
} while (1);
|
||||
} while (true);
|
||||
}
|
||||
|
||||
// Add any function attributes.
|
||||
|
@ -3005,7 +3033,7 @@ InstCombiner::transformCallThroughTrampoline(CallSite CS,
|
|||
|
||||
++Idx;
|
||||
++I;
|
||||
} while (1);
|
||||
} while (true);
|
||||
}
|
||||
|
||||
// Replace the trampoline call with a direct call. Let the generic
|
||||
|
|
|
@ -13,29 +13,38 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Analysis/CFG.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Analysis/IndirectCallPromotionAnalysis.h"
|
||||
#include "llvm/Analysis/IndirectCallSiteVisitor.h"
|
||||
#include "llvm/IR/BasicBlock.h"
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/DiagnosticInfo.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/InstIterator.h"
|
||||
#include "llvm/IR/InstVisitor.h"
|
||||
#include "llvm/IR/InstrTypes.h"
|
||||
#include "llvm/IR/Instruction.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/IntrinsicInst.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/MDBuilder.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/IR/PassManager.h"
|
||||
#include "llvm/IR/Type.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/ProfileData/InstrProfReader.h"
|
||||
#include "llvm/PassRegistry.h"
|
||||
#include "llvm/PassSupport.h"
|
||||
#include "llvm/ProfileData/InstrProf.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Transforms/Instrumentation.h"
|
||||
#include "llvm/Transforms/PGOInstrumentation.h"
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
using namespace llvm;
|
||||
|
@ -208,6 +217,7 @@ public:
|
|||
ICallPromotionFunc(Function &Func, Module *Modu, InstrProfSymtab *Symtab)
|
||||
: F(Func), M(Modu), Symtab(Symtab) {
|
||||
}
|
||||
|
||||
bool processFunction();
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
@ -474,7 +484,7 @@ static Instruction *createDirectCallInst(const Instruction *Inst,
|
|||
NewInst);
|
||||
|
||||
// Clear the value profile data.
|
||||
NewInst->setMetadata(LLVMContext::MD_prof, 0);
|
||||
NewInst->setMetadata(LLVMContext::MD_prof, nullptr);
|
||||
CallSite NewCS(NewInst);
|
||||
FunctionType *DirectCalleeType = DirectCallee->getFunctionType();
|
||||
unsigned ParamNum = DirectCalleeType->getFunctionNumParams();
|
||||
|
@ -610,7 +620,7 @@ bool ICallPromotionFunc::processFunction() {
|
|||
|
||||
Changed = true;
|
||||
// Adjust the MD.prof metadata. First delete the old one.
|
||||
I->setMetadata(LLVMContext::MD_prof, 0);
|
||||
I->setMetadata(LLVMContext::MD_prof, nullptr);
|
||||
// If all promoted, we don't need the MD.prof metadata.
|
||||
if (TotalCount == 0 || NumPromoted == NumVals)
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue