aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2019-12-20 19:53:05 +0000
committerDimitry Andric <dim@FreeBSD.org>2019-12-20 19:53:05 +0000
commit0b57cec536236d46e3dba9bd041533462f33dbb7 (patch)
tree56229dbdbbf76d18580f72f789003db17246c8d9 /contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
parent718ef55ec7785aae63f98f8ca05dc07ed399c16d (diff)
Notes
Diffstat (limited to 'contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp')
-rw-r--r--contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp97
1 files changed, 0 insertions, 97 deletions
diff --git a/contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp b/contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
deleted file mode 100644
index 02f5cc6da77c..000000000000
--- a/contrib/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-//===-- WebAssemblyArgumentMove.cpp - Argument instruction moving ---------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// This file moves ARGUMENT instructions after ScheduleDAG scheduling.
-///
-/// Arguments are really live-in registers, however, since we use virtual
-/// registers and LLVM doesn't support live-in virtual registers, we're
-/// currently making do with ARGUMENT instructions which are placed at the top
-/// of the entry block. The trick is to get them to *stay* at the top of the
-/// entry block.
-///
-/// The ARGUMENTS physical register keeps these instructions pinned in place
-/// during liveness-aware CodeGen passes, however one thing which does not
-/// respect this is the ScheduleDAG scheduler. This pass is therefore run
-/// immediately after that.
-///
-/// This is all hopefully a temporary solution until we find a better solution
-/// for describing the live-in nature of arguments.
-///
-//===----------------------------------------------------------------------===//
-
-#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
-#include "WebAssembly.h"
-#include "WebAssemblyMachineFunctionInfo.h"
-#include "WebAssemblySubtarget.h"
-#include "WebAssemblyUtilities.h"
-#include "llvm/CodeGen/MachineBlockFrequencyInfo.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-argument-move"
-
-namespace {
-class WebAssemblyArgumentMove final : public MachineFunctionPass {
-public:
- static char ID; // Pass identification, replacement for typeid
- WebAssemblyArgumentMove() : MachineFunctionPass(ID) {}
-
- StringRef getPassName() const override { return "WebAssembly Argument Move"; }
-
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.setPreservesCFG();
- AU.addPreserved<MachineBlockFrequencyInfo>();
- AU.addPreservedID(MachineDominatorsID);
- MachineFunctionPass::getAnalysisUsage(AU);
- }
-
- bool runOnMachineFunction(MachineFunction &MF) override;
-};
-} // end anonymous namespace
-
-char WebAssemblyArgumentMove::ID = 0;
-INITIALIZE_PASS(WebAssemblyArgumentMove, DEBUG_TYPE,
- "Move ARGUMENT instructions for WebAssembly", false, false)
-
-FunctionPass *llvm::createWebAssemblyArgumentMove() {
- return new WebAssemblyArgumentMove();
-}
-
-bool WebAssemblyArgumentMove::runOnMachineFunction(MachineFunction &MF) {
- LLVM_DEBUG({
- dbgs() << "********** Argument Move **********\n"
- << "********** Function: " << MF.getName() << '\n';
- });
-
- bool Changed = false;
- MachineBasicBlock &EntryMBB = MF.front();
- MachineBasicBlock::iterator InsertPt = EntryMBB.end();
-
- // Look for the first NonArg instruction.
- for (MachineInstr &MI : EntryMBB) {
- if (!WebAssembly::isArgument(MI.getOpcode())) {
- InsertPt = MI;
- break;
- }
- }
-
- // Now move any argument instructions later in the block
- // to before our first NonArg instruction.
- for (MachineInstr &MI : llvm::make_range(InsertPt, EntryMBB.end())) {
- if (WebAssembly::isArgument(MI.getOpcode())) {
- EntryMBB.insert(InsertPt, MI.removeFromParent());
- Changed = true;
- }
- }
-
- return Changed;
-}