[PATCH] D130746: RFC: Uniformity Analysis for Irreducible Control Flow

Sameer Sahasrabuddhe via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 28 23:34:47 PDT 2022


sameerds created this revision.
Herald added subscribers: kosarev, jsilvanus, mattd, gchakrabarti, asavonic, foad, kerbowa, hiraditya, mgorny, nhaehnle, jvesely, arsenm.
Herald added a project: All.
sameerds requested review of this revision.
Herald added subscribers: llvm-commits, jholewinski.
Herald added a project: LLVM.

Uniformity analysis is a generalization of divergence analysis to
include irreducible control flow:

1. The proposed spec presents a notion of "maximal convergence" that captures the existing convention of converging threads at the headers of natual loops.
2. Maximal convergence is then extended to irreducible cycles. The identity of irreducible cycles is determined by the choices made in a depth-first traversal of the control flow graph. Uniformity analysis uses criteria that depend only on closed paths and not cycles, to determine maximal convergence. This makes it a conservative analysis that is independent of the effect of DFS on CycleInfo.
3. The analysis is implemented as a template that can be instantiated for both LLVM IR and Machine IR.

Current status:

- passes existing tests for divergence analysis
- passes new tests with irreducible control flow
- currently working on Machine IR tests

Based on concepts originally outlined by
Nicolai Haehnle <nicolai.haehnle at amd.com>

With contributions from Ruiling Song <ruiling.song at amd.com> and
Jay Foad <jay.foad at amd.com>.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D130746

Files:
  llvm/docs/ConvergenceAndUniformity.rst
  llvm/docs/CycleTerminology.rst
  llvm/docs/Reference.rst
  llvm/docs/convergence-both-diverged-nested.png
  llvm/docs/convergence-closed-path.png
  llvm/docs/convergence-divergent-inside.png
  llvm/docs/convergence-divergent-outside.png
  llvm/docs/convergence-natural-loop.png
  llvm/include/llvm/ADT/GenericCycleInfo.h
  llvm/include/llvm/ADT/GenericUniformityImpl.h
  llvm/include/llvm/ADT/GenericUniformityInfo.h
  llvm/include/llvm/ADT/Uniformity.h
  llvm/include/llvm/Analysis/UniformityAnalysis.h
  llvm/include/llvm/CodeGen/MachineCycleAnalysis.h
  llvm/include/llvm/CodeGen/MachinePassRegistry.def
  llvm/include/llvm/CodeGen/MachineSSAContext.h
  llvm/include/llvm/CodeGen/MachineUniformityAnalysis.h
  llvm/include/llvm/CodeGen/TargetInstrInfo.h
  llvm/include/llvm/IR/SSAContext.h
  llvm/include/llvm/InitializePasses.h
  llvm/lib/Analysis/CMakeLists.txt
  llvm/lib/Analysis/UniformityAnalysis.cpp
  llvm/lib/CodeGen/CMakeLists.txt
  llvm/lib/CodeGen/CodeGen.cpp
  llvm/lib/CodeGen/MachineCycleAnalysis.cpp
  llvm/lib/CodeGen/MachineSSAContext.cpp
  llvm/lib/CodeGen/MachineUniformityAnalysis.cpp
  llvm/lib/IR/SSAContext.cpp
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Target/AMDGPU/SIDefines.h
  llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
  llvm/lib/Target/AMDGPU/SIInstrInfo.h
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/irreducible-1.mir
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/always_uniform.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/atomics.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/b42473-r1-crash.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/control-flow-intrinsics.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/hidden_diverge.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/hidden_loopdiverge.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/inline-asm.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/interp_f16.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/intrinsics.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/branch-outside.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/diverged-entry-basic.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/diverged-entry-headers-nested.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/diverged-entry-headers.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/exit-divergence.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/irreducible-1.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/irreducible-2.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/irreducible/reducible-headers.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/join-at-loop-exit.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/join-at-loop-heart.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/kernel-args.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/llvm.amdgcn.buffer.atomic.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/llvm.amdgcn.image.atomic.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/no-return-blocks.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/phi-undef.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/propagate-loop-live-out.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/temporal_diverge.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/trivial-join-at-loop-exit.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/unreachable-loop-block.ll
  llvm/test/Analysis/DivergenceAnalysis/AMDGPU/workitem-intrinsics.ll
  llvm/test/Analysis/DivergenceAnalysis/NVPTX/daorder.ll
  llvm/test/Analysis/DivergenceAnalysis/NVPTX/diverge.ll
  llvm/test/Analysis/DivergenceAnalysis/NVPTX/hidden_diverge.ll
  llvm/test/Analysis/DivergenceAnalysis/NVPTX/irreducible.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D130746.448523.patch
Type: text/x-patch
Size: 204562 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220729/d1a556c9/attachment-0001.bin>


More information about the llvm-commits mailing list