static int compileModule(char **argv, LLVMContext &Context) {
....
....
....
// Add an appropriate TargetLibraryInfo pass for the module's triple.
TargetLibraryInfoImpl TLII(Triple(M->getTargetTriple()));
// The -disable-simplify-libcalls flag actually disables all builtin optzns.
if (DisableSimplifyLibCalls)
TLII.disableAllFunctions();
PM.add(new TargetLibraryInfoWrapperPass(TLII));
// -------> Add Obfuscator <-------
//PM.add(createStringObfuscation(1));
//PM.add(createSplitBasicBlock(1));
PM.add(createFlattening(1));
PM.add(createSubstitution(1));
PM.add(createBogus(1));
// Add the target data from the target machine, if it exists, or the module.
M->setDataLayout(Target->createDataLayout());
// Override function attributes based on CPUStr, FeaturesStr, and command line
// flags.
setFunctionAttributes(CPUStr, FeaturesStr, *M);
.....
.....
.....
return 0;
}