summaryrefslogtreecommitdiff
path: root/src/chill.cc
blob: 9901fab5ea269948a07e5e62ba107451291657bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "chilldebug.h"

#include <csignal>
#include <cstdio>
#include <cstdlib>
#include <cstring>


#include "loop.hh"
#include <omega.h>
#include "ir_code.hh"

#include "chillmodule.hh" // Python wrapper functions for CHiLL

//---
// CHiLL globals
//---
Loop *myloop = NULL;
IR_Code *ir_code = NULL;
bool is_interactive = false;

std::vector<IR_Control *> ir_controls;
std::vector<int> loops;

//---
// CHiLL program main
// Initialize state and run script or interactive mode
//---
int main(int argc, char *argv[]) {
  CHILL_DEBUG_PRINT("%s  main()\n", argv[0]);
  if (argc > 2) {
    fprintf(stderr, "Usage: %s [script_file]\n", argv[0]);
    exit(-1);
  }

  // Create PYTHON interpreter
  /* Pass argv[0] to the Python interpreter */
  Py_SetProgramName(argv[0]);

  /* Initialize the Python interpreter.  Required. */
  Py_Initialize();

  /* Add a static module */
  initchill();

  if (argc == 2) {
    FILE *f = fopen(argv[1], "r");
    if (!f) {
      printf("can't open script file \"%s\"\n", argv[1]);
      exit(-1);
    }
    PyRun_SimpleFile(f, argv[1]);
    fclose(f);
  }
  if (argc == 1) {
    //---
    // Run a CHiLL interpreter
    //---
    printf("CHiLL v" CHILL_BUILD_VERSION " (built on " CHILL_BUILD_DATE ")\n");
    printf("Copyright (C) 2008 University of Southern California\n");
    printf("Copyright (C) 2009-2012 University of Utah\n");
    fflush(stdout);
    is_interactive = true;
    PyRun_InteractiveLoop(stdin, "-");
    printf("CHiLL ending...\n");
    fflush(stdout);
  }

  // TODO Codegen is the major part that prevent CHiLL to be a pure Python library
  //    Other than exporting a class of course
  if (ir_code != NULL && myloop != NULL && myloop->stmt.size() != 0 && !myloop->stmt[0].xform.is_null()) {
    int lnum_start;
    int lnum_end;
    lnum_start = get_loop_num_start();
    lnum_end = get_loop_num_end();
    finalize_loop(lnum_start,lnum_end);
    delete ir_code;
  }
  Py_Finalize();
  return 0;
}