public JitCompiledPassageClass compilePassage(Lookup lookup, JitPassage passage) {
		if (ENABLE_DIAGNOSTICS.contains(Diag.PRINT_PASSAGE)) {
			System.err.println(passage);
		}
		JitAnalysisContext context = new JitAnalysisContext(config, passage);
		JitControlFlowModel cfm = new JitControlFlowModel(context);
		if (ENABLE_DIAGNOSTICS.contains(Diag.PRINT_CFM)) {
			cfm.dumpResult();
		}
		JitDataFlowModel dfm = new JitDataFlowModel(context, cfm);
		if (ENABLE_DIAGNOSTICS.contains(Diag.PRINT_DFM)) {
			dfm.dumpResult();
		}
		JitVarScopeModel vsm = new JitVarScopeModel(cfm, dfm);
		if (ENABLE_DIAGNOSTICS.contains(Diag.PRINT_VSM)) {
			vsm.dumpResult();
		}
		JitTypeModel tm = new JitTypeModel(dfm);
		JitAllocationModel am = new JitAllocationModel(context, dfm, vsm, tm);
		JitOpUseModel oum = new JitOpUseModel(context, cfm, dfm, vsm);
		if (ENABLE_DIAGNOSTICS.contains(Diag.PRINT_SYNTH)) {
			dfm.dumpSynth();
		}
		if (ENABLE_DIAGNOSTICS.contains(Diag.PRINT_OUM)) {
			oum.dumpResult();
		}

		JitCodeGenerator gen = new JitCodeGenerator(lookup, context, cfm, dfm, vsm, tm, am, oum);
		return gen.load();
	}
Translate a passage using the given lookup

@param lookup a lookup that can access everything the passage may need, e.g., userop
           libraries. Likely, this should come from the emulator, which may be in a script.
           If you are unsure what to use here, use {@link MethodHandles#lookup()}. If you see
           errors about accessing stuff during the compilation, ensure everything the
           emulator needs is accessible from the method calling
           {@link MethodHandles#lookup()}.
@param passage the decoded passage to compile
@return the compiled class, not instantiated for any particular thread
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitCompiler.java