HomePhabricator

[AMDGPU] Add an AMDGPU specific atomic optimizer.

Description

[AMDGPU] Add an AMDGPU specific atomic optimizer.

This commit adds a new IR level pass to the AMDGPU backend to perform
atomic optimizations. It works by:

  • Running through a function and finding atomicrmw add/sub or uses of the atomic buffer intrinsics for add/sub.
  • If all arguments except the value to be added/subtracted are uniform, record the value to be optimized.
  • Run through the atomic operations we can optimize and, depending on whether the value is uniform/divergent use wavefront wide operations (DPP in the divergent case) to calculate the total amount to be atomically added/subtracted.
  • Then let only a single lane of each wavefront perform the atomic operation, reducing the total number of atomic operations in flight.
  • Lastly we recombine the result from the single lane to each lane of the wavefront, and calculate our individual lanes offset into the final result.

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

Details

Committed
sheredomOct 8 2018, 8:49 AM
Differential Revision
D51969: [AMDGPU] Add an AMDGPU specific atomic optimizer.
Parents
rL343972: [ELF][HEXAGON] Add R_HEX_GOT_16_X support
Branches
Unknown
Tags
Unknown