Implemented several code obfuscation techniques as LLVM passes to obfuscate LLVM IR.
It included obfuscation of arithmetic instructions for integers and floats, changing loop iterator access, obfuscating constants and strings during compilation with runtime decoding.