Escape Analysis & Capture Tracking in LLVM

Pointer analysis is an important topic in compiler optimization. One interesting aspect is the dynamic scope of pointers. LLVM differentiates between two situations: Pointer Capture: A pointer value is captured if the function makes a copy of any part of the pointer that outlives the call. Pointer Escape: A pointer value escapes if it is is accessible from outside the current function or thread. The latter case is sometimes considered separate and called thread-escape....

<span title='2017-01-08 19:00:00 +0000 UTC'>January 8, 2017</span>

Guaranteed Copy Elision

The new C++17 standard brings many exciting new features. A smaller, more subtle improvement it brings is guaranteed copy elision. The keyword is guaranteed, as copy elision itself has always been part of the standard. Although it might not be a change as radical as, say, structured bindings, I’m very happy to see it made it into the standard. Table of Content Copy Elision Return Value Optimization Passing a Temporary by Value Throwing and Catching Exceptions by Value Guaranteed Copy Elision Value Categories Addendum: Translation Units Addendum: Copy-List-Initialization Copy Elision Before discussing what changed in the latest version of the standard, it might be useful to revisit the basics of copy elision as they are currently defined by the C++14 standard....

<span title='2016-11-21 21:00:00 +0000 UTC'>November 21, 2016</span>

Understanding the Clang AST

Clang is everywhere; It is the core of my favorite Vim plugin YouCompleteMe, it recently got supported by Microsoft Visual Studio, it is mentioned in numerous episodes of CppCast and it powers the excellent clang formatter. Naturally, I wanted to get a better understanding of how the clang front end works under the hood. Table of Content Clang Front End & AST ASTContext Classes Navigating Sources AST Traversal Recursive AST Visitor AST Matchers Cursors Building the Examples Conclusion Related Clang Front End & AST Clang is a C language family front end for LLVM....

<span title='2015-12-31 11:08:16 +0000 UTC'>December 31, 2015</span>