diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-17 17:59:18 +0000 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-17 17:59:18 +0000 |
commit | cfafd2ffcad803e7bb02b60c085eafd73f28f87a (patch) | |
tree | d84324500a8b91dfea1a36ed96db5345c57b47b4 /chill/src/chill_run.cc | |
parent | 2fc34985f331c8d7b92969c5c657cb24f340ce25 (diff) | |
download | chill-cfafd2ffcad803e7bb02b60c085eafd73f28f87a.tar.gz chill-cfafd2ffcad803e7bb02b60c085eafd73f28f87a.tar.bz2 chill-cfafd2ffcad803e7bb02b60c085eafd73f28f87a.zip |
cleanup
Diffstat (limited to 'chill/src/chill_run.cc')
-rw-r--r-- | chill/src/chill_run.cc | 305 |
1 files changed, 0 insertions, 305 deletions
diff --git a/chill/src/chill_run.cc b/chill/src/chill_run.cc index 59cd6e5..afebbb4 100644 --- a/chill/src/chill_run.cc +++ b/chill/src/chill_run.cc @@ -1,50 +1,17 @@ #include "chilldebug.h" -// this is a little messy. the Makefile should be able to define one or the other -#ifndef PYTHON -#ifndef LUA -#define LUA -#endif -#endif - #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -//#include "chill_env.hh" #include "loop.hh" #include <omega.h> #include "ir_code.hh" - -#ifdef CUDACHILL - -#ifdef BUILD_ROSE -#include "loop_cuda_rose.hh" -#include "ir_cudarose.hh" -#elif BUILD_SUIF -#include "loop_cuda.hh" -#include "ir_cudasuif.hh" -#endif - -#else - -#ifdef BUILD_ROSE #include "ir_rose.hh" -#elif BUILD_SUIF -#include "ir_suif.hh" -#endif -#endif - -#ifdef LUA -#define lua_c //Get the configuration defines for doing an interactive shell -#include <lua.hpp> //All lua includes wrapped in extern "C" -#include "chill_env.hh" // Lua wrapper functions for CHiLL -#elif PYTHON #include "chillmodule.hh" // Python wrapper functions for CHiLL -#endif //--- // CHiLL globals @@ -57,181 +24,6 @@ bool is_interactive = false; std::vector<IR_Control *> ir_controls; std::vector<int> loops; -// this whole section belongs somewhere else -#ifdef LUA -//--- -// Interactive mode functions, directly copied out of lua.c -//--- -// The Lua interpreter state -static lua_State *globalL = NULL; -static const char *progname = "CHiLL"; - -static void lstop (lua_State *L, lua_Debug *ar) { - (void)ar; /* unused arg. */ - lua_sethook(L, NULL, 0, 0); - luaL_error(L, "interrupted!"); -} - - -static void laction (int i) { - signal(i, SIG_DFL); /* if another SIGINT happens before lstop, - terminate process (default action) */ - lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); -} - - -static void l_message (const char *pname, const char *msg) { - if (pname) fprintf(stderr, "%s: ", pname); - fprintf(stderr, "%s\n", msg); - fflush(stderr); // ? does this do anything ? -} - - -static int report (lua_State *L, int status) { - if (status && !lua_isnil(L, -1)) { - const char *msg = lua_tostring(L, -1); - if (msg == NULL) msg = "(error object is not a string)"; - l_message(progname, msg); - lua_pop(L, 1); - } - return status; -} - - -static int traceback (lua_State *L) { - if (!lua_isstring(L, 1)) /* 'message' not a string? */ - return 1; /* keep it intact */ - lua_getfield(L, LUA_GLOBALSINDEX, "debug"); - if (!lua_istable(L, -1)) { - lua_pop(L, 1); - return 1; - } - lua_getfield(L, -1, "traceback"); - if (!lua_isfunction(L, -1)) { - lua_pop(L, 2); - return 1; - } - lua_pushvalue(L, 1); /* pass error message */ - lua_pushinteger(L, 2); /* skip this function and traceback */ - lua_call(L, 2, 1); /* call debug.traceback */ - return 1; -} - - -static int docall (lua_State *L, int narg, int clear) { - DEBUG_PRINT("\ndocall()\n"); - int status; - int base = lua_gettop(L) - narg; /* function index */ - lua_pushcfunction(L, traceback); /* push traceback function */ - lua_insert(L, base); /* put it under chunk and args */ - signal(SIGINT, laction); - - DEBUG_PRINT("status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base);\n"); - - status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); - signal(SIGINT, SIG_DFL); - lua_remove(L, base); /* remove traceback function */ - /* force a complete garbage collection in case of errors */ - if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); - return status; -} - -static int dofile (lua_State *L, const char *name) { - int status = luaL_loadfile(L, name) || docall(L, 0, 1); - return report(L, status); -} - -static const char *get_prompt (lua_State *L, int firstline) { - const char *p; - lua_getfield(L, LUA_GLOBALSINDEX, firstline ? "_PROMPT" : "_PROMPT2"); - p = lua_tostring(L, -1); - if (p == NULL) p = (firstline ? LUA_PROMPT : LUA_PROMPT2); - lua_pop(L, 1); /* remove global */ - return p; -} - - -static int incomplete (lua_State *L, int status) { - if (status == LUA_ERRSYNTAX) { - size_t lmsg; - const char *msg = lua_tolstring(L, -1, &lmsg); - const char *tp = msg + lmsg - (sizeof(LUA_QL("<eof>")) - 1); - if (strstr(msg, LUA_QL("<eof>")) == tp) { - lua_pop(L, 1); - return 1; - } - } - return 0; /* else... */ -} - - -static int pushline (lua_State *L, int firstline) { - char buffer[LUA_MAXINPUT]; - char *b = buffer; - size_t l; - const char *prmt = get_prompt(L, firstline); - if (lua_readline(L, b, prmt) == 0) - return 0; /* no input */ - l = strlen(b); - if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ - b[l-1] = '\0'; /* remove it */ - if (firstline && b[0] == '=') /* first line starts with `=' ? */ - lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ - else - lua_pushstring(L, b); - lua_freeline(L, b); - return 1; -} - - -static int loadline (lua_State *L) { - int status; - lua_settop(L, 0); - if (!pushline(L, 1)) - return -1; /* no input */ - for (;;) { /* repeat until gets a complete line */ - status = luaL_loadbuffer(L, lua_tostring(L, 1), lua_strlen(L, 1), "=stdin"); - if (!incomplete(L, status)) break; /* cannot try to add lines? */ - if (!pushline(L, 0)) /* no more input? */ - return -1; - lua_pushliteral(L, "\n"); /* add a new line... */ - lua_insert(L, -2); /* ...between the two lines */ - lua_concat(L, 3); /* join them */ - } - lua_saveline(L, 1); - lua_remove(L, 1); /* remove line */ - return status; -} - - -static void dotty (lua_State *L) { - int status; - const char *oldprogname = progname; - progname = NULL; - while ((status = loadline(L)) != -1) { - if (status == 0) status = docall(L, 0, 0); - report(L, status); - if(repl_stop) - break; - if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ - lua_getglobal(L, "print"); - lua_insert(L, 1); - if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) - l_message(progname, lua_pushfstring(L, - "error calling " LUA_QL("print") " (%s)", - lua_tostring(L, -1))); - } - } - lua_settop(L, 0); /* clear stack */ - fputs("\n", stdout); - fflush(stdout); - progname = oldprogname; -} -#endif - -//--- -//--- - //--- // CHiLL program main // Initialize state and run script or interactive mode @@ -246,7 +38,6 @@ int main( int argc, char* argv[] ) int fail = 0; -#ifdef PYTHON // Create PYTHON interpreter /* Pass argv[0] to the Python interpreter */ Py_SetProgramName(argv[0]); @@ -258,17 +49,6 @@ int main( int argc, char* argv[] ) initchill(); if (argc == 2) { -/* #ifdef CUDACHILL --- This code is for translating lua to python before interprating. --- - //DEBUG_PRINT("\ncalling python\n"); - // file interpretlua.py has routines to read the lua transformation file - PyRun_SimpleString("from interpretlua import *"); - //DEBUG_PRINT("DONE calling python import of functions\n\n"); - char pythoncommand[800]; - sprintf(pythoncommand, "\n\ndopytransform(\"%s\")\0", argv[1]); - //DEBUG_PRINT("in C, running python command '%s'\n", pythoncommand); - - PyRun_SimpleString( pythoncommand ); - #else*/ FILE* f = fopen(argv[1], "r"); if(!f){ printf("can't open script file \"%s\"\n", argv[1]); @@ -293,102 +73,17 @@ int main( int argc, char* argv[] ) } //printf("DONE with PyRun_SimpleString()\n"); -// #endif --- endif for CUDACHILL --- -#endif - //END python setup -#ifdef LUA - - //Create interpreter - lua_State* L = lua_open(); - globalL = L; - - //Initialize the std libs - luaL_openlibs(L); - - //Initialize globals - register_globals(L); - - //Register CHiLL functions - register_functions(L); - - if (argc == 2) { - //--- - // Run a CHiLL script from a file - //--- - - //Check that the file can be opened - FILE* f = fopen(argv[1],"r"); - if(!f){ - printf("can't open script file \"%s\"\n", argv[1]); - exit(-1); - } - fclose(f); - - DEBUG_PRINT("\n*********************evaluating file '%s'\n", argv[1]); - - //Evaluate the file - fail = dofile(L, argv[1]); - if(!fail){ - fprintf(stderr, "script success!\n"); - } - } - if (argc == 1 && isatty((int)fileno(stdin))) { - //--- - // Run a CHiLL interpreter - //--- - printf("CUDA-CHiLL v0.2.1 (built on %s)\n", CHILL_BUILD_DATE); - printf("Copyright (C) 2008 University of Southern California\n"); - printf("Copyright (C) 2009-2012 University of Utah\n"); - is_interactive = true; // let the lua interpreter know. - fflush(stdout); - dotty(L); - //Not sure if we should set fail from interactive mode - printf("CUDA-CHiLL ending...\n"); - fflush(stdout); - } -#endif - if (!fail && ir_code != NULL && myloop != NULL && myloop->stmt.size() != 0 && !myloop->stmt[0].xform.is_null()) { -#ifdef CUDACHILL - int lnum; - #ifdef PYTHON - lnum = 0; - #else - lnum = get_loop_num( L ); - #endif - #ifdef BUILD_ROSE - ((IR_cudaroseCode *)(ir_code))->commit_loop(myloop, lnum); - #elif BUILD_SUIF - ((IR_cudasuifCode *)(ir_code))->commit_loop(myloop, lnum); - #endif -#else int lnum_start; int lnum_end; - #ifdef PYTHON lnum_start = get_loop_num_start(); lnum_end = get_loop_num_end(); DEBUG_PRINT("calling ROSE code gen? loop num %d\n", lnum); - #else - lnum_start = get_loop_num_start(L); - lnum_end = get_loop_num_end(L); - DEBUG_PRINT("calling ROSE code gen? loop num %d - %d\n", lnum_start, lnum_end); - #endif -#endif - #ifdef BUILD_ROSE finalize_loop(lnum_start, lnum_end); - //((IR_roseCode*)(ir_cide))->commit_loop(myloop, lnum); ((IR_roseCode*)(ir_code))->finalizeRose(); - //#elif BUILD_SUIF - //((IR_suifCode*)(ir_code))->commit_loop(myloop, lnum); - #endif delete ir_code; } -#ifdef PYTHON Py_Finalize(); -#endif -#ifdef LUA - lua_close(L); -#endif return 0; } |