[AMDGPU] Fix the mis-handling of `vreg_1` copied from scalar register.
authorMichael Liao <michael.hliao@gmail.com>
Tue, 28 May 2019 16:29:39 +0000 (16:29 +0000)
committerMichael Liao <michael.hliao@gmail.com>
Tue, 28 May 2019 16:29:39 +0000 (16:29 +0000)
commit7166843f1e10efbdd3a24fccb15ad33bfb6f0f70
tree202b815d8e76d5898a3d5c8c9ca0baf58518159b
parent800db530d9fa1ed03a4facbb9e058413f4eca42c
[AMDGPU] Fix the mis-handling of `vreg_1` copied from scalar register.

Summary:
- Don't treat the use of a scalar register as `vreg_1` an VGPR usage.
  Otherwise, that promotes that scalar register into vector one, which
  breaks the assumption that scalar register holds the lane mask.
- The issue is triggered in a complicated case, where if the uses of
  that (lane mask) scalar register is legalized firstly before its
  definition, e.g., due to the mismatch block placement and its
  topological order or loop. In that cases, the legalization of PHI
  introduces the use of that scalar register as `vreg_1`.

Reviewers: rampitec, nhaehnle, arsenm, alex-t

Subscribers: kzhuravl, jvesely, wdng, dstuttard, tpr, t-tye, hiraditya, llvm-commits, yaxunl

Tags: #llvm

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

llvm-svn: 361847
llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp
llvm/test/CodeGen/AMDGPU/fix-sgpr-copies.mir