bool CLIPSFunctionPass::runOnFunction(llvm::Function& function) { if(!function.isDeclaration()) { void* env = getEnvironment(); CLIPSEnvironment* clEnv = new CLIPSEnvironment(env); EnvReset(env); CLIPSPassHeader* header = (CLIPSPassHeader*)getIndirectPassHeader(); char* passes = CharBuffer(strlen(header->getPasses()) + 64); sprintf(passes,"(passes %s)", header->getPasses()); EnvAssertString(env, passes); free(passes); KnowledgeConstructor tmp; if(header->needsLoops() && header->needsRegions()) { llvm::LoopInfo& li = getAnalysis<LoopInfo>(); llvm::RegionInfo& ri = getAnalysis<RegionInfo>(); tmp.route(function, li, ri); } else if(header->needsLoops() && !header->needsRegions()) { llvm::LoopInfo& li = getAnalysis<LoopInfo>(); tmp.route(function, li); } else if(header->needsRegions() && !header->needsLoops()) { llvm::RegionInfo& ri = getAnalysis<RegionInfo>(); tmp.route(function, ri); } else { tmp.route(function); } clEnv->makeInstances((char*)tmp.getInstancesAsString().c_str()); //TODO: put in the line to build the actual knowledge EnvRun(env, -1L); //it's up to the code in the expert system to make changes EnvReset(env); return true; } else { return false; } }
bool CLIPSModulePass::runOnModule(llvm::Module& module) { //assume the environment has already been setup in one way or another. void* env = getEnvironment(); CLIPSEnvironment* clEnv = new CLIPSEnvironment(env); EnvReset(env); CLIPSPassHeader* header = (CLIPSPassHeader*)getIndirectPassHeader(); char* passes = CharBuffer(strlen(header->getPasses()) + 64); sprintf(passes,"(passes %s)", header->getPasses()); EnvAssertString(env, passes); free(passes); KnowledgeConstructor tmp; tmp.route(&module); clEnv->makeInstances((char*)tmp.getInstancesAsString().c_str()); llvm::PassRegistry* registry = llvm::PassRegistry::getPassRegistry(); llvm::PassManager manager; const llvm::PassInfo* ci = registry->getPassInfo( llvm::StringRef("function-to-knowledge")); ExpertSystem::FunctionKnowledgeConversionPass* copy = (ExpertSystem::FunctionKnowledgeConversionPass*)ci->createPass(); copy->setEnvironment(clEnv); copy->setSkipLoops(!header->needsLoops()); copy->setSkipRegions(!header->needsRegions()); manager.add(copy); //need to have the conversion code manager.run(module); //TODO: put in the line to build the actual knowledge EnvRun(env, -1L); //it's up to the code in the expert system to make changes EnvReset(env); return true; }
Common::Error AdventureEngineEngine::run() { _console = new Console(this); _timer->installTimerProc(interruptExpertSystem, 1000000 / 60, this, "clipsSlowDown"); EnvReset(clipsEnv); EnvRun(clipsEnv, -1L); _timer->removeTimerProc(interruptExpertSystem); return Common::kNoError; }
extern "C" void Java_com_rtmpd_CommandsInterface_EnvRun( JNIEnv* env, jobject thiz, jobject callbackHandler, jstring callbackClassName, jstring callbackMethodName, jstring ip, jint port, jint logLevel) { CallBackInfo ci; ci.env = env; ci.callbackHandler = callbackHandler; ci.callbackClassName = env->GetStringUTFChars(callbackClassName, NULL); ci.callbackMethodName = env->GetStringUTFChars(callbackMethodName, NULL); EnvRun(env->GetStringUTFChars(ip, NULL), (uint16_t) port, ci, (int) logLevel); }
bool CLIPSBasicBlockPass::runOnBasicBlock(llvm::BasicBlock& bb) { void* env = getEnvironment(); CLIPSEnvironment* clEnv = new CLIPSEnvironment(env); EnvReset(env); CLIPSPassHeader* header = (CLIPSPassHeader*)getIndirectPassHeader(); char* passes = CharBuffer(strlen(header->getPasses()) + 64); sprintf(passes,"(passes %s)", header->getPasses()); EnvAssertString(env, passes); free(passes); KnowledgeConstructor tmp; FunctionNamer namer; tmp.route(&bb, namer, (char*)""); clEnv->makeInstances((char*)tmp.getInstancesAsString().c_str()); EnvRun(env, -1L); //it's up to the code in the expert system to make changes EnvReset(env); return true; }
bool CLIPSRegionPass::runOnRegion(llvm::Region* region, llvm::RGPassManager& rg) { void* env = getEnvironment(); CLIPSEnvironment* clEnv = new CLIPSEnvironment(env); EnvReset(env); CLIPSPassHeader* header = (CLIPSPassHeader*)getIndirectPassHeader(); char* passes = CharBuffer(strlen(header->getPasses()) + 64); sprintf(passes,"(passes %s)", header->getPasses()); EnvAssertString(env, passes); free(passes); KnowledgeConstructor tmp; FunctionNamer namer; tmp.route(region, namer, (char*)""); clEnv->makeInstances((char*)tmp.getInstancesAsString().c_str()); //TODO: put in code to allow us to manipulate the RGPassManager EnvRun(env, -1L); //it's up to the code in the expert system to make changes EnvReset(env); return true; }
globle void RunCommand( void *theEnv) { int numArgs; long int runLimit = -1; DATA_OBJECT argPtr; if ((numArgs = EnvArgCountCheck(theEnv,"run",NO_MORE_THAN,1)) == -1) return; if (numArgs == 0) { runLimit = -1; } else if (numArgs == 1) { if (EnvArgTypeCheck(theEnv,"run",1,INTEGER,&argPtr) == FALSE) return; runLimit = DOToLong(argPtr); } EnvRun(theEnv,runLimit); return; }
long long __declspec(dllexport) CALL_CONV __EnvRun( void *theEnv, long long runLimit) { return EnvRun(theEnv,runLimit); }
bool ClipsRuleMgr::run() { EnvRun(m_theEnv,-1); return true; }