Automated Compiler Generation of Log-Based Lock-Free Locks