Exemplo n.º 1
0
		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;
			}
		}
Exemplo n.º 2
0
		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;
		}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
		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;
		}
Exemplo n.º 6
0
		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;
		}
Exemplo n.º 7
0
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;
  }
Exemplo n.º 8
0
long long __declspec(dllexport) CALL_CONV __EnvRun(
  void *theEnv,
  long long runLimit)
  {
   return EnvRun(theEnv,runLimit);
  }
Exemplo n.º 9
0
bool ClipsRuleMgr::run()
{
	EnvRun(m_theEnv,-1);
	return true;
}