Files
clang-p2996/llvm/test/CodeGen/AMDGPU/divergence-at-use.ll
pvanhout f90849dfa3 [AMDGPU] Use UniformityAnalysis in AtomicOptimizer
Adds & uses a new `isDivergentUse` API in UA.
UniformityAnalysis now requires CycleInfo as well as the new temporal divergence API can query it.

-----

Original patch that adds `isDivergentUse` by @sameerds

The user of a temporally divergent value is marked as divergent in the
uniformity analysis. But the same user may also have been marked divergent for
other reasons, thus losing this information about temporal divergence. But some
clients need to specificly check for temporal divergence. This change restores
such an API, that already existed in DivergenceAnalysis.

Reviewed By: sameerds, foad

Differential Revision: https://reviews.llvm.org/D146018
2023-03-15 09:39:55 +01:00

45 lines
1.2 KiB
LLVM

; RUN: llc -march=amdgcn -mcpu=gfx900 -amdgpu-atomic-optimizations=true < %s | FileCheck %s
@local = addrspace(3) global i32 undef
define amdgpu_kernel void @reducible() {
; CHECK-LABEL: reducible:
; CHECK-NOT: dpp
entry:
%x = call i32 @llvm.amdgcn.workitem.id.x()
br label %loop
loop:
%i = phi i32 [ 0, %entry ], [ %i1, %loop ]
%gep = getelementptr i32, ptr addrspace(3) @local, i32 %i
%cond = icmp ult i32 %i, %x
%i1 = add i32 %i, 1
br i1 %cond, label %loop, label %exit
exit:
%old = atomicrmw add ptr addrspace(3) %gep, i32 %x acq_rel
ret void
}
define amdgpu_kernel void @def_in_nested_cycle() {
; CHECK-LABEL: def_in_nested_cycle:
; CHECK-NOT: dpp
entry:
%x = call i32 @llvm.amdgcn.workitem.id.x()
br label %loop
loop:
%i = phi i32 [ 0, %entry ], [ 0, %innerloop ], [ %i1, %loop ]
%cond = icmp ult i32 %i, %x
%i1 = add i32 %i, 1
br i1 %cond, label %innerloop, label %loop
innerloop:
%i.inner = phi i32 [ 0, %loop ], [ %i1.inner, %innerloop ]
%gep = getelementptr i32, ptr addrspace(3) @local, i32 %i
%i1.inner = add i32 %i, 1
%cond.inner = icmp ult i32 %i, %x
br i1 %cond, label %innerloop, label %loop
exit:
%old = atomicrmw add ptr addrspace(3) %gep, i32 %x acq_rel
ret void
}
declare i32 @llvm.amdgcn.workitem.id.x()