[Codegen/Statepoint] Allow usage of registers for non gc deopt values.
authorSerguei Katkov <serguei.katkov@azul.com>
Tue, 7 Apr 2020 04:29:25 +0000 (11:29 +0700)
committerSerguei Katkov <serguei.katkov@azul.com>
Thu, 9 Apr 2020 09:57:35 +0000 (16:57 +0700)
commita0275705bb5aa938119c3e7c8bc957a823450b17
tree576112553311f162e0e12981d45e315243e4ca8d
parentbf730e16863de43d7c991e9c9c802150e304272b
[Codegen/Statepoint] Allow usage of registers for non gc deopt values.

The change introduces the usage of physical registers for non-gc deopt values.
This require runtime support to know how to take a value from register.
By default usage is off and can be switched on by option.

The change also introduces additional fix-up patch which forces the spilling
of caller saved registers (clobbered after the call) and re-writes statepoint
to use spill slots instead of caller saved registers.

Reviewers: reames, dantrushin
Reviewed By: reames, dantrushin
Subscribers: mgorny, hiraditya, mgrang, llvm-commits
Differential Revision: https://reviews.llvm.org/D77371
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/FixupStatepointCallerSaved.cpp [new file with mode: 0644]
llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/test/CodeGen/X86/statepoint-regs.ll [new file with mode: 0644]