Ejemplo n.º 1
0
        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>();
        }
Ejemplo n.º 2
0
 public static extern void PassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef* PMB, LLVMPassManagerRef* PM);
Ejemplo n.º 3
0
 public static extern void PassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef* PMB, uint Threshold);
Ejemplo n.º 4
0
 public static extern void PassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef* PMB, int Value);
Ejemplo n.º 5
0
 public static extern void PassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef* PMB, int Value);
Ejemplo n.º 6
0
 public static extern void PassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef* PMB, int Value);
Ejemplo n.º 7
0
 public static extern void PassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef* PMB, uint SizeLevel);
Ejemplo n.º 8
0
 private static extern void LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef @PMB, uint @SizeLevel);
Ejemplo n.º 9
0
 private static extern void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef @PMB, LLVMPassManagerRef @PM, [MarshalAs(UnmanagedType.Bool)] bool @privateize, [MarshalAs(UnmanagedType.Bool)] bool @RunInliner);
Ejemplo n.º 10
0
 private static extern void LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef @PMB, LLVMPassManagerRef @PM);
Ejemplo n.º 11
0
 private static extern void LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef @PMB, LLVMPassManagerRef @PM);
Ejemplo n.º 12
0
 private static extern void LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef @PMB, uint @Threshold);
Ejemplo n.º 13
0
 private static extern void LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef @PMB, [MarshalAs(UnmanagedType.Bool)] bool @Value);
Ejemplo n.º 14
0
 private static extern void LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef @PMB, [MarshalAs(UnmanagedType.Bool)] bool @Value);
Ejemplo n.º 15
0
 public static extern void PassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef* PMB, LLVMPassManagerRef* PM);
Ejemplo n.º 16
0
 public static extern void PassManagerBuilderDispose(LLVMPassManagerBuilderRef* PMB);
Ejemplo n.º 17
0
 public static extern void PassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef* PMB, LLVMPassManagerRef* PM, bool Internalize, bool RunInliner);
Ejemplo n.º 18
0
 private static extern void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef @PMB);