LLVM  16.0.0git
Macros | Functions
WebAssemblyArgumentMove.cpp File Reference
#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
#include "Utils/WebAssemblyUtilities.h"
#include "WebAssembly.h"
#include "WebAssemblyMachineFunctionInfo.h"
#include "WebAssemblySubtarget.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"
Include dependency graph for WebAssemblyArgumentMove.cpp:

Go to the source code of this file.


#define DEBUG_TYPE   "wasm-argument-move"


 INITIALIZE_PASS (WebAssemblyArgumentMove, DEBUG_TYPE, "Move ARGUMENT instructions for WebAssembly", false, false) FunctionPass *llvm

Detailed Description

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.

Definition in file WebAssemblyArgumentMove.cpp.

Macro Definition Documentation


#define DEBUG_TYPE   "wasm-argument-move"

Definition at line 40 of file WebAssemblyArgumentMove.cpp.

Function Documentation


INITIALIZE_PASS ( WebAssemblyArgumentMove  ,
"Move ARGUMENT instructions for WebAssembly"  ,
false  ,

Definition at line 62 of file WebAssemblyArgumentMove.cpp.