public static void Main(string[] args) { Utilities.WaitForDebugger( ); using (StaticState.InitializeLLVM( )) { StaticState.RegisterNative( ); using (var machine = TargetMachine.FromTriple(Triple.HostTriple)) using (var generator = new CodeGenerator(LanguageLevel.MutableVariables, machine)) { RunReplLoop(generator); generator.Module.DIBuilder.Finish( ); if (!generator.Module.Verify(out string errMsg)) { Console.Error.WriteLine(errMsg); } else { machine.EmitToFile(generator.Module, "kls.o", CodeGenFileType.ObjectFile); Console.WriteLine(generator.Module.WriteToString( )); Console.WriteLine("Wrote module to kls.o"); } } } }
public static void Initialize(TestContext ctx) { _ = ctx; // unused using var llvmContext = new Context( ); using var module = llvmContext.CreateBitcodeModule("test", SourceLanguage.C, TestSrcFileName, "unit tests"); var tm = TargetMachine.FromTriple(Triple.HostTriple); module.TargetTriple = tm.Triple; module.Layout = tm.TargetData; var doubleType = new DebugBasicType(llvmContext.DoubleType, module, "double", DiTypeKind.Float); var voidType = DebugType.Create <ITypeRef, DIType>(module.Context.VoidType, null); var printDecl = module.CreateFunction(PrintFuncName, false, voidType, doubleType); var bldr = CreateFunctionAndGetBuilder(module, doubleType, AddFuncName, AddSectionName, 0); bldr.CurrentDebugLocation = new DILocation(llvmContext, 2, 1, bldr.InsertFunction !.DISubProgram !); var result = bldr.FAdd(bldr.InsertFunction.Parameters[0], bldr.InsertFunction.Parameters[1]); _ = bldr.Call(printDecl, result); bldr.Return(result); bldr = CreateFunctionAndGetBuilder(module, doubleType, SubFuncName, SubSectionName, 5); bldr.CurrentDebugLocation = new DILocation(llvmContext, 7, 1, bldr.InsertFunction !.DISubProgram !); result = bldr.FSub(bldr.InsertFunction.Parameters[0], bldr.InsertFunction.Parameters[1]); _ = bldr.Call(printDecl, result); bldr.Return(result); bldr = CreateFunctionAndGetBuilder(module, doubleType, MulFuncName, MulSectionName, 10); bldr.CurrentDebugLocation = new DILocation(llvmContext, 12, 1, bldr.InsertFunction !.DISubProgram !); result = bldr.FMul(bldr.InsertFunction.Parameters[0], bldr.InsertFunction.Parameters[1]); _ = bldr.Call(printDecl, result); bldr.Return(result); bldr = CreateFunctionAndGetBuilder(module, doubleType, DivFuncName, DivSectionName, 15); bldr.CurrentDebugLocation = new DILocation(llvmContext, 17, 1, bldr.InsertFunction !.DISubProgram !); result = bldr.FDiv(bldr.InsertFunction.Parameters[0], bldr.InsertFunction.Parameters[1]); _ = bldr.Call(printDecl, result); bldr.Return(result); Debug.WriteLine(module.WriteToString( )); tm.EmitToFile(module, TestObjFileName, CodeGenFileType.ObjectFile); }