public CodeGenerator(string targetPlatform, string dataLayout, int optimisation, string moduleName) { TargetPlatform = targetPlatform; DataLayout = dataLayout; OptimisationLevel = optimisation; if (optimisation != -1) { LLVMPassManagerBuilderRef passManagerBuilderRef = LLVM.PassManagerBuilderCreate(); LLVM.PassManagerBuilderSetOptLevel(passManagerBuilderRef, (uint)optimisation); PassManager = LLVM.CreatePassManager(); LLVM.PassManagerBuilderPopulateModulePassManager(passManagerBuilderRef, PassManager.Value); } Module = LLVM.ModuleCreateWithName(moduleName); Context = LLVM.GetModuleContext(Module); Builder = LLVM.CreateBuilder(); LLVM.SetTarget(Module, TargetPlatform); LLVM.SetDataLayout(Module, dataLayout); LLVM.AddNamedMetadataOperand(Module, "llvm.module.flags", LLVM.MDNode(new[] { LLVM.ConstInt(LLVM.Int32Type(), 2, false), LLVM.MDString("Dwarf Version", (uint)"Dwarf Version".Length), LLVM.ConstInt(LLVM.Int32Type(), 4, false) })); LLVM.AddNamedMetadataOperand(Module, "llvm.module.flags", LLVM.MDNode(new[] { LLVM.ConstInt(LLVM.Int32Type(), 2, false), LLVM.MDString("Debug Info Version", (uint)"Debug Info Version".Length), LLVM.ConstInt(LLVM.Int32Type(), 3, false) })); _globals = new Dictionary <string, LLVMValueRef>(); _structCache = new Dictionary <string, LLVMTypeRef>(); _functionCache = new Dictionary <string, LLVMValueRef>(); }
public static extern void PassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef* PMB, LLVMPassManagerRef* PM);
public static extern void PassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef* PMB, uint Threshold);
public static extern void PassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef* PMB, int Value);
public static extern void PassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef* PMB, int Value);
public static extern void PassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef* PMB, int Value);
public static extern void PassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef* PMB, uint SizeLevel);
private static extern void LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef @PMB, uint @SizeLevel);
private static extern void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef @PMB, LLVMPassManagerRef @PM, [MarshalAs(UnmanagedType.Bool)] bool @privateize, [MarshalAs(UnmanagedType.Bool)] bool @RunInliner);
private static extern void LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef @PMB, LLVMPassManagerRef @PM);
private static extern void LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef @PMB, LLVMPassManagerRef @PM);
private static extern void LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef @PMB, uint @Threshold);
private static extern void LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef @PMB, [MarshalAs(UnmanagedType.Bool)] bool @Value);
private static extern void LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef @PMB, [MarshalAs(UnmanagedType.Bool)] bool @Value);
public static extern void PassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef* PMB, LLVMPassManagerRef* PM);
public static extern void PassManagerBuilderDispose(LLVMPassManagerBuilderRef* PMB);
public static extern void PassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef* PMB, LLVMPassManagerRef* PM, bool Internalize, bool RunInliner);
private static extern void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef @PMB);