LLVM: lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp File Reference (original) (raw)
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.