[RegAllocGreedy] avoid using physreg candidates that cannot be correctly spilled
authorDaniil Fukalov <daniil.fukalov@amd.com>
Tue, 25 Sep 2018 18:37:38 +0000 (18:37 +0000)
committerDaniil Fukalov <daniil.fukalov@amd.com>
Tue, 25 Sep 2018 18:37:38 +0000 (18:37 +0000)
commit349b5943b475cf87d6dbf8a190e33814a0d8199c
tree1e1102dbd50e1040c2f38fa87c743e9b452619ef
parentc06ee8367aa565d6d5c1b318d5e36aef6149ac44
[RegAllocGreedy] avoid using physreg candidates that cannot be correctly spilled

For the AMDGPU target if a MBB contains exec mask restore preamble, SplitEditor may get state when it cannot insert a spill instruction.

E.g. for a MIR

bb.100:
    %1 = S_OR_SAVEEXEC_B64 %2, implicit-def $exec, implicit-def $scc, implicit $exec
and if the regalloc will try to allocate a virtreg to the physreg already assigned to virtreg %1, it should insert spill instruction before the S_OR_SAVEEXEC_B64 instruction.
But it is not possible since can generate incorrect code in terms of exec mask.

The change makes regalloc to ignore such physreg candidates.

Reviewed By: rampitec

Differential Revision: https://reviews.llvm.org/D52052

llvm-svn: 343004
llvm/lib/CodeGen/RegAllocGreedy.cpp
llvm/lib/CodeGen/SplitKit.h
llvm/test/CodeGen/AMDGPU/spill-before-exec.mir [new file with mode: 0644]