Exemple #1
0
        public void TestEagerIRCompilation( )
        {
            using var ctx = new Context( );
            var nativeTriple = Triple.HostTriple;
            var target       = Target.FromTriple(nativeTriple);
            var machine      = target.CreateTargetMachine(nativeTriple);

            using var orcJit = new OrcJit(machine);
            using (var lazyModule = CreateModule(ctx, machine, 10101010, "lazy1", "lazy1"))
            {
                orcJit.AddLazyCompiledModule(lazyModule);
            }

            using (var lazyModule = CreateModule(ctx, machine, 20202020, "lazy2", "lazy2"))
            {
                orcJit.AddLazyCompiledModule(lazyModule);
            }

            // try several different modules with the same function name replacing the previous
            using (var module = CreateModule(ctx, orcJit.TargetMachine, 42))
            {
                AddAndExecuteTestModule(orcJit, module, 42);
            }

            using (var module = CreateModule(ctx, orcJit.TargetMachine, 12345678))
            {
                AddAndExecuteTestModule(orcJit, module, 12345678);
            }

            using (var module = CreateModule(ctx, orcJit.TargetMachine, 87654321))
            {
                AddAndExecuteTestModule(orcJit, module, 87654321);
            }
        }
Exemple #2
0
        internal KaleidoscopeJIT( )
        {
            TargetMachine = Target.FromTriple(Triple.HostTriple.ToString( ))
                            .CreateTargetMachine(Triple.HostTriple.ToString(), null, null, CodeGenOpt.Default, Reloc.Default, CodeModel.JitDefault);

            ExecutionEngine = new OrcJit(TargetMachine);
        }
Exemple #3
0
        private void AddAndExecuteTestModule(OrcJit orcJit, BitcodeModule module, int magicNumber)
        {
            ulong orcHandle = orcJit.AddEagerlyCompiledModule(module);
            var   main      = orcJit.GetFunctionDelegate <TestMain>("main");

            Assert.IsNotNull(main);
            Assert.AreEqual(magicNumber, main( ));
            orcJit.RemoveModule(orcHandle);
        }