]> granicus.if.org Git - llvm/commit
[SelectionDAG] Enhance the simplification of `copyto` from `implicit-def`.
authorMichael Liao <michael.hliao@gmail.com>
Mon, 27 May 2019 18:26:29 +0000 (18:26 +0000)
committerMichael Liao <michael.hliao@gmail.com>
Mon, 27 May 2019 18:26:29 +0000 (18:26 +0000)
commit7c73732e345258d1ba494259caaf2353f218a65c
treea01839f88b3730b2b5c84cedcb30b870833f605d
parentcc60c8d61520e7726d5356d1181c45781068859a
[SelectionDAG] Enhance the simplification of `copyto` from `implicit-def`.

Summary:
- The current implementation simplifies the case where the source of
  `copyto` is `implicit-def`ed. However, it only works when that
  `implicit-def` is single-used since it detects that from
  `implicit-def` and cannot determine which destination vreg should be
  used if there are multiple uses.
- This patch changes that detection when `copyto` is being emitted. If
  that `copyto`'s source is defined from `implicit-def`, it simplifies
  it. Hence, it works even that `implicit-def` is multi-used.
- Except it simplifies the internal IR, it won't improve the quality of
  code generation. However, it helps to detect 'implicit-def` in a
  straight-forward manner in some passes, such as `si-i1-copies`. A test
  case is added.

Reviewers: sunfish, nhaehnle

Subscribers: jvesely, hiraditya, asbirlea, llvm-commits, yaxunl

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361777 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/InstrEmitter.cpp
lib/CodeGen/SelectionDAG/InstrEmitter.h
test/CodeGen/AMDGPU/i1-copy-phi.ll
test/CodeGen/AMDGPU/implicit-def-muse.ll [new file with mode: 0644]