summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
commitb64793999546ed8adebaeebd9d8345d18db8927d (patch)
tree4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp
parentAdd support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff)
downloadwireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz
wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip
Remove LLVM 8.0.1 files.
Diffstat (limited to 'gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp')
-rw-r--r--gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp153
1 files changed, 0 insertions, 153 deletions
diff --git a/gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp b/gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp
deleted file mode 100644
index 256de295821..00000000000
--- a/gnu/llvm/lib/CodeGen/RegUsageInfoPropagate.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-//=--- RegUsageInfoPropagate.cpp - Register Usage Informartion Propagation --=//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// This pass is required to take advantage of the interprocedural register
-/// allocation infrastructure.
-///
-/// This pass iterates through MachineInstrs in a given MachineFunction and at
-/// each callsite queries RegisterUsageInfo for RegMask (calculated based on
-/// actual register allocation) of the callee function, if the RegMask detail
-/// is available then this pass will update the RegMask of the call instruction.
-/// This updated RegMask will be used by the register allocator while allocating
-/// the current MachineFunction.
-///
-//===----------------------------------------------------------------------===//
-
-#include "llvm/CodeGen/MachineBasicBlock.h"
-#include "llvm/CodeGen/MachineFunctionPass.h"
-#include "llvm/CodeGen/MachineFrameInfo.h"
-#include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/CodeGen/MachineRegisterInfo.h"
-#include "llvm/CodeGen/Passes.h"
-#include "llvm/CodeGen/RegisterUsageInfo.h"
-#include "llvm/IR/Module.h"
-#include "llvm/PassAnalysisSupport.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-#include "llvm/Target/TargetMachine.h"
-#include <map>
-#include <string>
-
-using namespace llvm;
-
-#define DEBUG_TYPE "ip-regalloc"
-
-#define RUIP_NAME "Register Usage Information Propagation"
-
-namespace {
-
-class RegUsageInfoPropagation : public MachineFunctionPass {
-public:
- RegUsageInfoPropagation() : MachineFunctionPass(ID) {
- PassRegistry &Registry = *PassRegistry::getPassRegistry();
- initializeRegUsageInfoPropagationPass(Registry);
- }
-
- StringRef getPassName() const override { return RUIP_NAME; }
-
- bool runOnMachineFunction(MachineFunction &MF) override;
-
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.addRequired<PhysicalRegisterUsageInfo>();
- AU.setPreservesAll();
- MachineFunctionPass::getAnalysisUsage(AU);
- }
-
- static char ID;
-
-private:
- static void setRegMask(MachineInstr &MI, ArrayRef<uint32_t> RegMask) {
- assert(RegMask.size() ==
- MachineOperand::getRegMaskSize(MI.getParent()->getParent()
- ->getRegInfo().getTargetRegisterInfo()
- ->getNumRegs())
- && "expected register mask size");
- for (MachineOperand &MO : MI.operands()) {
- if (MO.isRegMask())
- MO.setRegMask(RegMask.data());
- }
- }
-};
-
-} // end of anonymous namespace
-
-INITIALIZE_PASS_BEGIN(RegUsageInfoPropagation, "reg-usage-propagation",
- RUIP_NAME, false, false)
-INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfo)
-INITIALIZE_PASS_END(RegUsageInfoPropagation, "reg-usage-propagation",
- RUIP_NAME, false, false)
-
-char RegUsageInfoPropagation::ID = 0;
-
-// Assumes call instructions have a single reference to a function.
-static const Function *findCalledFunction(const Module &M,
- const MachineInstr &MI) {
- for (const MachineOperand &MO : MI.operands()) {
- if (MO.isGlobal())
- return dyn_cast<const Function>(MO.getGlobal());
-
- if (MO.isSymbol())
- return M.getFunction(MO.getSymbolName());
- }
-
- return nullptr;
-}
-
-bool RegUsageInfoPropagation::runOnMachineFunction(MachineFunction &MF) {
- const Module &M = *MF.getFunction().getParent();
- PhysicalRegisterUsageInfo *PRUI = &getAnalysis<PhysicalRegisterUsageInfo>();
-
- LLVM_DEBUG(dbgs() << " ++++++++++++++++++++ " << getPassName()
- << " ++++++++++++++++++++ \n");
- LLVM_DEBUG(dbgs() << "MachineFunction : " << MF.getName() << "\n");
-
- const MachineFrameInfo &MFI = MF.getFrameInfo();
- if (!MFI.hasCalls() && !MFI.hasTailCall())
- return false;
-
- bool Changed = false;
-
- for (MachineBasicBlock &MBB : MF) {
- for (MachineInstr &MI : MBB) {
- if (!MI.isCall())
- continue;
- LLVM_DEBUG(
- dbgs()
- << "Call Instruction Before Register Usage Info Propagation : \n");
- LLVM_DEBUG(dbgs() << MI << "\n");
-
- auto UpdateRegMask = [&](const Function &F) {
- const ArrayRef<uint32_t> RegMask = PRUI->getRegUsageInfo(F);
- if (RegMask.empty())
- return;
- setRegMask(MI, RegMask);
- Changed = true;
- };
-
- if (const Function *F = findCalledFunction(M, MI)) {
- UpdateRegMask(*F);
- } else {
- LLVM_DEBUG(dbgs() << "Failed to find call target function\n");
- }
-
- LLVM_DEBUG(
- dbgs() << "Call Instruction After Register Usage Info Propagation : "
- << MI << '\n');
- }
- }
-
- LLVM_DEBUG(
- dbgs() << " +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
- "++++++ \n");
- return Changed;
-}
-
-FunctionPass *llvm::createRegUsageInfoPropPass() {
- return new RegUsageInfoPropagation();
-}