xref: /llvm-project/polly/utils/pyscop/jscop2iscc.py (revision 515bc8c1554f03515565878ea3d35cffdc6fd195)
1*515bc8c1Sserge-sans-paille#!/usr/bin/env python
2b6a7c8d7STobias Grosserimport argparse, isl, os
3b6a7c8d7STobias Grosserimport json
4b6a7c8d7STobias Grosser
5b6a7c8d7STobias Grosserdef printDomain(scop):
6b6a7c8d7STobias Grosser
7b6a7c8d7STobias Grosser  domain = isl.USet('{}')
8b6a7c8d7STobias Grosser
9b6a7c8d7STobias Grosser  for statement in scop['statements']:
10b6a7c8d7STobias Grosser    domain = domain.union(isl.USet(statement['domain']))
11b6a7c8d7STobias Grosser
12b6a7c8d7STobias Grosser  print "D :=",
13b6a7c8d7STobias Grosser  print str(domain) + ";"
14b6a7c8d7STobias Grosser
15b6a7c8d7STobias Grosserdef printAccesses(scop):
16b6a7c8d7STobias Grosser
17b6a7c8d7STobias Grosser  read = isl.UMap('{}')
18b6a7c8d7STobias Grosser
19b6a7c8d7STobias Grosser  for statement in scop['statements']:
20b6a7c8d7STobias Grosser    for access in statement['accesses']:
21b6a7c8d7STobias Grosser      if access['kind'] == 'read':
22b6a7c8d7STobias Grosser        read = read.union(isl.UMap(access['relation']))
23b6a7c8d7STobias Grosser
24b6a7c8d7STobias Grosser  print "R :=",
25b6a7c8d7STobias Grosser  print str(read) + ";"
26b6a7c8d7STobias Grosser
27b6a7c8d7STobias Grosser  write = isl.UMap('{}')
28b6a7c8d7STobias Grosser
29b6a7c8d7STobias Grosser  for statement in scop['statements']:
30b6a7c8d7STobias Grosser    for access in statement['accesses']:
31b6a7c8d7STobias Grosser      if access['kind'] == 'write':
32b6a7c8d7STobias Grosser        write = write.union(isl.UMap(access['relation']))
33b6a7c8d7STobias Grosser
34b6a7c8d7STobias Grosser  print "W :=",
35b6a7c8d7STobias Grosser  print str(write) + ";"
36b6a7c8d7STobias Grosser
37b6a7c8d7STobias Grosserdef printSchedule(scop):
38b6a7c8d7STobias Grosser
39b6a7c8d7STobias Grosser  schedule = isl.UMap('{}')
40b6a7c8d7STobias Grosser
41b6a7c8d7STobias Grosser  for statement in scop['statements']:
42b6a7c8d7STobias Grosser    schedule = schedule.union(isl.UMap(statement['schedule']))
43b6a7c8d7STobias Grosser
44b6a7c8d7STobias Grosser  print "S :=",
45b6a7c8d7STobias Grosser  print str(schedule) + ";"
46b6a7c8d7STobias Grosser
47b6a7c8d7STobias Grosserdef __main__():
48b6a7c8d7STobias Grosser  description = 'Translate JSCoP into iscc input'
49b6a7c8d7STobias Grosser  parser = argparse.ArgumentParser(description)
50b6a7c8d7STobias Grosser  parser.add_argument('inputFile', metavar='N', type=file,
51b6a7c8d7STobias Grosser                      help='The JSCoP file')
52b6a7c8d7STobias Grosser
53b6a7c8d7STobias Grosser  args = parser.parse_args()
54b6a7c8d7STobias Grosser  inputFile = args.inputFile
55b6a7c8d7STobias Grosser  scop = json.load(inputFile)
56b6a7c8d7STobias Grosser
57b6a7c8d7STobias Grosser  printDomain(scop)
58b6a7c8d7STobias Grosser  printAccesses(scop)
59b6a7c8d7STobias Grosser  printSchedule(scop)
60b6a7c8d7STobias Grosser
61b6a7c8d7STobias Grosser  print 'R := R * D;'
62b6a7c8d7STobias Grosser  print 'W := W * D;'
63b6a7c8d7STobias Grosser  print 'Dep := (last W before R under S)[0];'
64b6a7c8d7STobias Grosser  print 'schedule D respecting Dep minimizing Dep;'
65b6a7c8d7STobias Grosser
66b6a7c8d7STobias Grosser
67b6a7c8d7STobias Grosser__main__()
68b6a7c8d7STobias Grosser
69