[DA][SDA] SyncDependenceAnalysis re-write
This patch achieves two things:
- It breaks up the join_blocks interface between the SDA to the DA to return two separate sets for divergent loops exits and divergent,
disjoint path joins.
- It updates the SDA algorithm to run in O(n) time and improves the precision on divergent loop exits.
This fixes https://bugs.llvm.org/show_bug.cgi?id=46372 (by virtue of
the improved join_blocks interface) and revealed an imprecise expected
result in the Analysis/DivergenceAnalysis/AMDGPU/hidden_loopdiverge.ll
Reviewed By: sameerds
Differential Revision: https://reviews.llvm.org/D84413