[AMDGPU] Suppress redundant waitcnt instrs.
authorMark Searles <m.c.searles@gmail.com>
Wed, 7 Feb 2018 02:21:21 +0000 (02:21 +0000)
committerMark Searles <m.c.searles@gmail.com>
Wed, 7 Feb 2018 02:21:21 +0000 (02:21 +0000)
commit24c92eeb83ef89fcda002d996f4b7d1d91f698bf
tree04ce5d983e77deca2c26fa591ec307ba6ffa30bb
parent58340526d3e23c9ee385966f9b10f12cb879331a
[AMDGPU] Suppress redundant waitcnt instrs.

1. Run the memory legalizer prior to the waitcnt pass; keep the policy that the waitcnt pass does not remove any waitcnts within the incoming IR.

2. The waitcnt pass doesn't (yet) track waitcnts that exist prior to the waitcnt pass (it just skips over them); because the waitcnt pass is ignorant of them, it may insert a redundant waitcnt. To avoid this, check the prev instr. If it and the to-be-inserted waitcnt are the same, suppress the insertion. We keep the existing waitcnt under the assumption that whomever, e.g., the memory legalizer, inserted it knows what they were doing.

3. Follow-on work: teach the waitcnt pass to record the pre-existing waitcnts for better waitcnt production.

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

llvm-svn: 324440
llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
llvm/test/CodeGen/AMDGPU/waitcnt-no-redundant.mir [new file with mode: 0644]