[llvm-dev] [IDF][analyzer] Generalizing IDFCalculator to be used for Clang's CFG
Kristóf Umann via llvm-dev
llvm-dev at lists.llvm.org
Mon Jun 3 16:51:56 PDT 2019
As the title suggests, I'd like to generalize llvm::IDFCalculator to be
able to calculate control dependencies on clang's CFG. The issue is
however, that many data structures it uses are "hardcoded" to use
llvm::BasicBlock, and requires a lot of code to turn it into template
I managed to pull this off by hammering the code until it compiled, and it
works perfectly, but I'm not really happy with how the patch came out:
Sadly, my knowledge on LLVM IR and phi nodes in general is very limited. My
1. I read the article IDFCalculator is based on, but I found no
references to IDFCalculator::setLiveInBlocks, and the file header seems to
confirm that it's an implementation specific thing. Could I get away
restricting the clang::CFG tailored version to not contain this function?
2. I didn't really manage to understand the logic for GraphDiff. What does
it really do in IDFCalculator's context? I dag out the patch that added
an extra constructor to use a snapshot of the CFG, but it seems to be
unused. Is it also unlikely that we find any use for this? Mind you, the
patch size grew a lot because I also "templatized" GraphDiff and all
related classes to handle clang's CFG.
If the answer to both of these questions is "no", I'd separate out a base
of IDFCalculator, to a new class called IDFCalculatorBase that wouldn't
contain either of said functions.
 Sreedhar, Vugranam C., and Guang R. Gao. "A linear time algorithm for
placing ϕ-nodes." Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on
Principles of programming languages. ACM, 1995.
 [IDF] Teach Iterated Dominance Frontier to use a snapshot CFG based on
a GraphDiff. https://reviews.llvm.org/D50675
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev