forked from OSchip/llvm-project
				
			[AMDGPU] Ask subtarget if waitcnt instruction is needed before barrier instruction
Differential Revision: https://reviews.llvm.org/D24985 llvm-svn: 282875
This commit is contained in:
		
							parent
							
								
									51f514d853
								
							
						
					
					
						commit
						d7bdf24f32
					
				| 
						 | 
					@ -540,6 +540,12 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Return the maximum number of waves per SIMD for kernels using \p VGPRs VGPRs
 | 
					  /// Return the maximum number of waves per SIMD for kernels using \p VGPRs VGPRs
 | 
				
			||||||
  unsigned getOccupancyWithNumVGPRs(unsigned VGPRs) const;
 | 
					  unsigned getOccupancyWithNumVGPRs(unsigned VGPRs) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// \returns True if waitcnt instruction is needed before barrier instruction,
 | 
				
			||||||
 | 
					  /// false otherwise.
 | 
				
			||||||
 | 
					  bool needWaitcntBeforeBarrier() const {
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // End namespace llvm
 | 
					} // End namespace llvm
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -590,8 +590,9 @@ bool SIInsertWaits::runOnMachineFunction(MachineFunction &MF) {
 | 
				
			||||||
      // S_SENDMSG implicitly waits for all outstanding LGKM transfers to finish,
 | 
					      // S_SENDMSG implicitly waits for all outstanding LGKM transfers to finish,
 | 
				
			||||||
      // but we also want to wait for any other outstanding transfers before
 | 
					      // but we also want to wait for any other outstanding transfers before
 | 
				
			||||||
      // signalling other hardware blocks
 | 
					      // signalling other hardware blocks
 | 
				
			||||||
      if (I->getOpcode() == AMDGPU::S_BARRIER ||
 | 
					      if ((I->getOpcode() == AMDGPU::S_BARRIER &&
 | 
				
			||||||
          I->getOpcode() == AMDGPU::S_SENDMSG)
 | 
					               ST->needWaitcntBeforeBarrier()) ||
 | 
				
			||||||
 | 
					           I->getOpcode() == AMDGPU::S_SENDMSG)
 | 
				
			||||||
        Required = LastIssued;
 | 
					        Required = LastIssued;
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
        Required = handleOperands(*I);
 | 
					        Required = handleOperands(*I);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue