LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries