summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.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/Target/WebAssembly/WebAssemblyRegNumbering.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/Target/WebAssembly/WebAssemblyRegNumbering.cpp')
-rw-r--r--gnu/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp111
1 files changed, 0 insertions, 111 deletions
diff --git a/gnu/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp b/gnu/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp
deleted file mode 100644
index 1e2a248f097..00000000000
--- a/gnu/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-//===-- WebAssemblyRegNumbering.cpp - Register Numbering ------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// This file implements a pass which assigns WebAssembly register
-/// numbers for CodeGen virtual registers.
-///
-//===----------------------------------------------------------------------===//
-
-#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
-#include "WebAssembly.h"
-#include "WebAssemblyMachineFunctionInfo.h"
-#include "WebAssemblySubtarget.h"
-#include "WebAssemblyUtilities.h"
-#include "llvm/ADT/SCCIterator.h"
-#include "llvm/CodeGen/MachineFrameInfo.h"
-#include "llvm/CodeGen/MachineFunction.h"
-#include "llvm/CodeGen/MachineInstrBuilder.h"
-#include "llvm/CodeGen/MachineLoopInfo.h"
-#include "llvm/CodeGen/MachineRegisterInfo.h"
-#include "llvm/CodeGen/Passes.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-using namespace llvm;
-
-#define DEBUG_TYPE "wasm-reg-numbering"
-
-namespace {
-class WebAssemblyRegNumbering final : public MachineFunctionPass {
- StringRef getPassName() const override {
- return "WebAssembly Register Numbering";
- }
-
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.setPreservesCFG();
- MachineFunctionPass::getAnalysisUsage(AU);
- }
-
- bool runOnMachineFunction(MachineFunction &MF) override;
-
-public:
- static char ID; // Pass identification, replacement for typeid
- WebAssemblyRegNumbering() : MachineFunctionPass(ID) {}
-};
-} // end anonymous namespace
-
-char WebAssemblyRegNumbering::ID = 0;
-INITIALIZE_PASS(WebAssemblyRegNumbering, DEBUG_TYPE,
- "Assigns WebAssembly register numbers for virtual registers",
- false, false)
-
-FunctionPass *llvm::createWebAssemblyRegNumbering() {
- return new WebAssemblyRegNumbering();
-}
-
-bool WebAssemblyRegNumbering::runOnMachineFunction(MachineFunction &MF) {
- LLVM_DEBUG(dbgs() << "********** Register Numbering **********\n"
- "********** Function: "
- << MF.getName() << '\n');
-
- WebAssemblyFunctionInfo &MFI = *MF.getInfo<WebAssemblyFunctionInfo>();
- MachineRegisterInfo &MRI = MF.getRegInfo();
-
- MFI.initWARegs();
-
- // WebAssembly argument registers are in the same index space as local
- // variables. Assign the numbers for them first.
- MachineBasicBlock &EntryMBB = MF.front();
- for (MachineInstr &MI : EntryMBB) {
- if (!WebAssembly::isArgument(MI))
- break;
-
- int64_t Imm = MI.getOperand(1).getImm();
- LLVM_DEBUG(dbgs() << "Arg VReg " << MI.getOperand(0).getReg()
- << " -> WAReg " << Imm << "\n");
- MFI.setWAReg(MI.getOperand(0).getReg(), Imm);
- }
-
- // Then assign regular WebAssembly registers for all remaining used
- // virtual registers. TODO: Consider sorting the registers by frequency of
- // use, to maximize usage of small immediate fields.
- unsigned NumVRegs = MF.getRegInfo().getNumVirtRegs();
- unsigned NumStackRegs = 0;
- // Start the numbering for locals after the arg regs
- unsigned CurReg = MFI.getParams().size();
- for (unsigned VRegIdx = 0; VRegIdx < NumVRegs; ++VRegIdx) {
- unsigned VReg = TargetRegisterInfo::index2VirtReg(VRegIdx);
- // Skip unused registers.
- if (MRI.use_empty(VReg))
- continue;
- // Handle stackified registers.
- if (MFI.isVRegStackified(VReg)) {
- LLVM_DEBUG(dbgs() << "VReg " << VReg << " -> WAReg "
- << (INT32_MIN | NumStackRegs) << "\n");
- MFI.setWAReg(VReg, INT32_MIN | NumStackRegs++);
- continue;
- }
- if (MFI.getWAReg(VReg) == WebAssemblyFunctionInfo::UnusedReg) {
- LLVM_DEBUG(dbgs() << "VReg " << VReg << " -> WAReg " << CurReg << "\n");
- MFI.setWAReg(VReg, CurReg++);
- }
- }
-
- return true;
-}