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