This is an archive of the discontinued LLVM Phabricator instance.

AMDGPU: Don't kill super-register with overlapping copy
ClosedPublic

Authored by arsenm on Oct 15 2020, 3:07 PM.

Details

Summary

This would end up killing part of the result super-register, resulting
in a verifier error on a later use of the overlapping registers. We
could add kills of any non-aliasing registers, but we should be moving
away from relying on kill flags.

Diff Detail

Event Timeline

arsenm created this revision.Oct 15 2020, 3:07 PM
Herald added a project: Restricted Project. · View Herald TranscriptOct 15 2020, 3:07 PM
arsenm requested review of this revision.Oct 15 2020, 3:07 PM
rampitec accepted this revision.Oct 15 2020, 3:15 PM

LGTM, although it might require checking liveness of all aliasing registers.

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
924

It could be some other unrelated superreg?

This revision is now accepted and ready to land.Oct 15 2020, 3:15 PM
arsenm added inline comments.Oct 15 2020, 3:18 PM
llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
924

If it's unrelated, we can kill the original source like was done before

rampitec added inline comments.Oct 15 2020, 3:20 PM
llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
924

Say the source is v[0:1] and we are killing it. But there is somewhere v[1:2] used, not in this instruction. We will kill that v[1:2] as well, right?

arsenm added inline comments.Oct 15 2020, 3:32 PM
llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
924

It kills the v1 portion, so a later instruction would be reading an undef value