[DivergenceAnalysis] Add methods for querying divergence at use
authorJay Foad <jay.foad@gmail.com>
Mon, 29 Jul 2019 10:22:09 +0000 (10:22 +0000)
committerJay Foad <jay.foad@gmail.com>
Mon, 29 Jul 2019 10:22:09 +0000 (10:22 +0000)
commitdcb75324794efcd9e01314ca14ddb9be9d915b93
treef09c697b079d355f79a7ae01c612dddcef7c73d7
parenta4f08dded7a6b47e132508ec819e6a286d5d6fe4
[DivergenceAnalysis] Add methods for querying divergence at use

Summary:
The existing isDivergent(Value) methods query whether a value is
divergent at its definition. However even if a value is uniform at its
definition, a use of it in another basic block can be divergent because
of divergent control flow between the def and the use.

This patch adds new isDivergent(Use) methods to DivergenceAnalysis,
LegacyDivergenceAnalysis and GPUDivergenceAnalysis.

This might allow D63953 or other similar workarounds to be removed.

Reviewers: alex-t, nhaehnle, arsenm, rtaylor, rampitec, simoll, jingyue

Reviewed By: nhaehnle

Subscribers: jfb, jvesely, wdng, hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 367218
llvm/include/llvm/Analysis/DivergenceAnalysis.h
llvm/include/llvm/Analysis/LegacyDivergenceAnalysis.h
llvm/lib/Analysis/DivergenceAnalysis.cpp
llvm/lib/Analysis/LegacyDivergenceAnalysis.cpp
llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp
llvm/test/CodeGen/AMDGPU/divergence-at-use.ll [new file with mode: 0644]