I've been beginning to work with LLVM and I'm interested to know if there is a programmatic way to extract the control flow graph and/or basic blocks from LLVM/clang in order to do some analysis on them. Is there a way to hook into the tool chain and pull out this information instead of doing a straight compilation? If not, what are the alternatives?
Extracting Basic Blocks/CFG from LLVM/clang on the Backend
1.9k Views Asked by thegravian At
2
There are 2 best solutions below
0
Matthieu M.
On
The CFG (Control Flow Graph) is purely part of CLang.
The CFG supports Visitors (see CFG.h) but you might want to ask on CLang dev list if there is a code sample available.
Related Questions in LLVM
- llvm headers do not compile under msvc 2013
- clang -Xclang -cc1 -O3 mips.c -emit-llvm , clang error: -emit-llvm cannot be used when linking
- clang::HeaderSearch search path ignored
- Generate C++ style code using LLVM
- What does an overlong bitshift on a LLVM vector yield?
- How can I store arbitrary data in LLVM metadata?
- Error when compiling simple LLVM example with Mingw
- In LLVM IR, how can I print the name of a unnamed value which is represented as an unsigned numeric value with their prefix such as %2?
- Why static_assert calls in unused template methods in LLVM
- With Swift open sourced, what would it take to have it running on the JVM?
- How to compile LLVM .cpp file in Windows
- Xcode 7 command failed due to signal: illegal instruction 4
- c++ segfault on one platform (MacOSX) but not another (linux)
- Call to implicitly-deleted copy constructor in LLVM(Porting code from windows to mac)
- How do I compile with "ffast-math"?
Related Questions in CLANG
- Cross compile simple standard C program on Linux for Mac
- Automatically wrap C/C++ function at compile-time with annotation
- clang -Xclang -cc1 -O3 mips.c -emit-llvm , clang error: -emit-llvm cannot be used when linking
- clang::HeaderSearch search path ignored
- Apple Mach-O Linker Error - ld: file not found: -ObjC
- different clang and gcc behavior with pointers
- How to use Clang compiler with MSBuild?
- MacPorts clang not using its own headers
- How to set compiler-specific flags with autotools
- Do I need to install all header files and libraries myself when using clang?
- In LLVM IR, how can I print the name of a unnamed value which is represented as an unsigned numeric value with their prefix such as %2?
- Why static_assert calls in unused template methods in LLVM
- Why clang doesn't issued a warning with using uninitialized array?
- How to traverse all nodes of clang AST?
- When can/will a function be inlined in C++? Can inline behavior be forced?
Related Questions in CODE-ANALYSIS
- Unknown code analysis error
- Detect if source is CSS/HTML/JavaScript
- Should nDepend's output folder be added to source control?
- Visual Studio's Rule Set Editor does not open
- Why do I get warning CA2229 (Implement serialization constructors) when inheriting from standard type
- Gradle: Setting PMD Arguments minimumPriority and shortFilenames
- nested using() and code rule CA2202
- How can i create a (design time only) nuget package that doesn't add an assembly reference when installed?
- Why is /optimize in a C# project generating more Code Analysis warnings than without this enabled?
- Code Analysis detected errors. No code analysis issues were detected
- WPF code analyze : CA2202 Do not dispose objects multiple timesObject
- WPF code analyze : CA1001 Types that own disposable fields should be disposable
- How to get better results from LLVM's MemoryDependenceAnalysis pass?
- Assembly name referred in project but same version not available
- Object 'iCrypt' can be disposed more than once
Related Questions in CONTROL-FLOW-GRAPH
- Control Flow Graphs - find all linearly independent paths
- Understand control flow graph in lcov branch coverage output
- Can I translate an AST to SSA, or do I need to translate to a CFG then to SSA?
- Tool to compare control flow of disassembly and C
- control edge rendering of a network in vis.js
- Extracting Basic Blocks/CFG from LLVM/clang on the Backend
- Control flow graph dominance
- Flattening a control flow graph to structured code
- Decompilation creating basic blocks
- Decompilation independent pattern structuring of cfg
- Drawing cfg using antlr4, graphiz and python and parser is empty
- Static analysis of unused assignments
- identifying a loop in LLVM CFG
- How to determine if a BasicBlock is controled by a `if`
- Why are the variables "i" and "j" considered dead in the control flow graph?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
LLVM supports plugin passes. It would be straight-forward to write a pass to emit whatever data you want in whatever format you want.
However, LLVM has a large suite of analysis and transform passes already. You may be able to use the existing LLVM framework to extract the data you want after running the analysis passes you want.
Take a look at the docs, the code, and then ask more specific questions on the LLVMdev list to get the best answers.